密码SDK概述
什么是密码SDK
先说说我个人的理解。密码SDK,就是封装了密码学算法和安全协议的软件开发工具包。说白了,它给你提供了一套现成的加密、解密、签名、验签、密钥管理的接口,你不用自己从头写AES、RSA甚至国密算法。
我刚开始做Android安全时,觉得直接调系统的Cipher类就完事了。直到有一次,项目需要同时支持Fingerprint认证和TEE(可信执行环境)存储密钥,才发现系统API的碎片化程度超乎想象。不同厂商的定制 ROM,对KeyStore的行为都不太一样。密码SDK就是为了解决这类问题——它在底层帮你抹平了设备差异,上层暴露统一的接口。
一个成熟的密码SDK通常包含这些模块:
- 对称加密:AES、SM4等,支持CBC/GCM等模式
- 非对称加密:RSA、SM2,支持密钥对生成和验签
- 哈希与MAC:SHA-256、SM3、HMAC
- 密钥管理:生成、存储、导入导出,最好能绑定到TEE
- 安全协议:比如TLS握手简化、数字信封
应用场景
我在项目里碰到的典型场景就这几类:
| 场景 | 说明 | 密码SDK能做什么 |
|---|---|---|
| 本地数据加密 | 存储用户敏感信息(、生物特征、离线数据) | AES-GCM加密后存入SharedPreferences或SQLCipher |
| 网络传输安全 | 业务报文需要端到端加密,避免中间人 | 信封加密(RSA加密AES密钥),或直接SM2密文 |
| 身份认证 | 双因素、指纹/人脸绑定密钥 | 集成BiometricPrompt + KeyStore签名 |
| 安全通信管道 | App与服务器之间建立专属加密通道 | 通过SDK协商会话密钥,实现一次一密 |
| 合规改造 | 金融、政务等场景要求国密算法 | SDK内置SM2/SM3/SM4,一键切换算法套件 |
嗯,这里要注意:很多场景其实可以归为「防脱库」和「防篡改」两类。密码SDK的主要价值就是把这两件事做成标准化组件。
为什么需要适配
你想想看,Android系统每年一个大版本,厂商还自己魔改。同一个KeyGenParameterSpec在不同设备上的表现可能天差地别。我踩过的坑包括:
- Android 6.0 上
KeyStore生成密钥后,7.0上读取失败——因为底层实现从软件Keystore切到了硬件绑定 - 某些华为手机对
GCM模式支持不完整,加密时直接抛AEADBadTagException——其实不是密钥错了,是驱动bug - 国密算法在部分小米机型上跑出错误结果,因为系统
Cipher的SM4实现根本没经过官方认证
所以适配的核心目的就三个:
- 兼容性——让SDK在2亿+设备上表现一致
- 合规性——满足国家密码局、GDPR、PCI-DSS等要求
- 性能与安全平衡——不在低端机上拖垮UI,也不在高端机上弱化防护
密码SDK适配的知识体系
我把整个适配过程的结构画成了一张图。你看完就知道后面29章在讲什么了:
这张图里的每一个绿色、橙色、紫色节点,后面都会展开成一整章的内容。我个人习惯先把体系搭好,再逐个击破。
常见疑问
你可能在想:为什么不直接用系统API,非要包一层SDK?
我举个真实例子。Android 9 之后KeyStore的setKeyEntry()行为发生了变化,原来可以导入的PKCS8密钥,在新版本上直接抛异常——因为Google收紧了密钥来源验证。如果你的App用了系统API直接导入密钥,那用户升级系统后就崩了。而密码SDK可以提前垫一层兼容判断:检测到Android 9+就改用KeyGenParameterSpec.Builder.setIsStrongBoxBacked(),并在低于9的设备上fallback到软件实现。
好了,第一章就是这些底层的认识。算法怎么选、KeyStore怎么调、合规怎么过,后面会一点点掰开讲。