各平台密钥管理与安全硬件支持详解
摘要:本文分析了主流操作系统平台(Windows、Linux、macOS、Android、iOS和鸿蒙OS)的密钥管理组件、安全硬件支持以及对国密算法(特别是SM2)的兼容情况,吐槽一下这些鸡肋。
引言
最近一直在研究基于密钥签名的去中心化权限认证方案。查了各大操作系统提供了专用密钥存储组件和安全硬件支持。不得不写篇文章来吐槽一下。
各平台密钥管理与安全特性对比
下表对主流平台的密钥管理组件、安全硬件和算法支持进行了对比:
平台 | 密钥存储组件 | 安全硬件 | 安全硬件私钥导出 | ECDSA支持 | SM2支持 | 密钥导入限制 | 权限控制 |
---|---|---|---|---|---|---|---|
Windows | CNG/KSP | TPM | 不允许 | ✓ | 需扩展 | TPM生成的密钥不可导入 | 基于用户,不区分应用 |
Linux | PKCS#11/密钥环 | TPM | 不允许 | ✓ | 需特定库 | 依赖TPM实现 | 用户级隔离,部分实现支持应用隔离 |
macOS/iOS | Keychain | Secure Enclave | 不允许 | ✓ | ✗ | SE密钥仅内部生成,不可导入 | 应用沙箱隔离,可设置共享组 |
Android | Keystore | TEE/StrongBox | 不允许 | ✓ | 部分厂商 | 硬件保护密钥不可导入 | 应用级隔离,系统权限严格控制 |
鸿蒙OS | 统一密钥管理服务 | TEE (TrustZone) | 不允许 | ✓ | ✓ | TEE生成的密钥不可导入 | 分布式设备身份与应用隔离结合 |
从表中可以看出,各个平台基本有这样几个特点:
- 1、基本都不支持SM2,所以国内国密场景压根就没法用设备自带的安全硬件,只能用外接的硬件。对于消费者来说浪费设备资料、对于开发者来说开发适配成本就更高了。
- 2、都不支持密钥导入、导出,也就是说一个人有3台设备,就会至少3组密钥,别说开发者看到这么多密钥头疼,用户自己都会搞晕。虽说不能明文导出是为了保障安全,但好歹给一个设备与设备间加密传输密钥的接口呀,让密钥从一个安全环境直接进入另一个安全环境。
- 3、PC系统基本都是基于用户进行权限管理,用户登录后如果运行木马程序,很容易造成安全风险。
Windows 平台
密钥存储组件: CNG与CAPI
Windows平台的密钥管理主要依赖于两个关键组件:较新的Cryptography API: Next Generation (CNG) 和传统的CryptoAPI (CAPI)。
CNG (Cryptography API: Next Generation)
CNG是Windows Vista及更新版本中引入的现代密码学API,提供了更灵活、可扩展的密码学服务:(注意:CNG的软件模式下的持久化密钥是存在硬盘上的,只有与TPM、HSM配合才是用硬件存储)
- 密钥存储提供程序(KSP): 负责密钥的存储和管理
- 算法提供程序: 实现各类密码算法
- 存储提供程序: 如用于保存凭证的Windows凭证管理器
主要特性:
- 支持 FIPS 140-2 认证的加密算法
- 支持ECC(椭圆曲线密码学)
- 支持硬件安全模块(HSM)集成
- 可扩展架构允许添加第三方密码提供程序
TPM集成
Windows对可信平台模块(TPM)提供了深度集成:
- BitLocker驱动器加密: 利用TPM保护全盘加密密钥
- Virtual Smart Card: 将TPM用作虚拟智能卡
- Platform Crypto Provider: 通过CNG接口访问TPM密码功能
算法支持:
- 标准算法: RSA、ECDSA、AES、SHA系列算法全面支持
- 国密算法: Windows原生CNG不支持SM2/SM3/SM4,需通过第三方密码提供程序扩展实现
Linux 平台
Linux平台的密钥管理呈现分散化特点,不同发行版可能采用不同的解决方案。
PKCS#11与密钥环系统
- PKCS#11: 提供标准化接口访问密码令牌
- GNOME Keyring: GNOME桌面环境的密码管理服务
- KDE Wallet: KDE桌面环境的密码管理服务
- 系统密钥环(System Keyring): 用于存储系统级密钥
TPM支持
Linux通过TPM2.0 Software Stack (TSS)提供TPM支持:
- tpm2-tools: 命令行工具集
- tpm2-tss: TPM2.0软件栈核心库
- tpm2-abrmd: 资源管理器守护进程
算法支持:
- 标准算法: 通过OpenSSL支持主流密码算法
- 国密算法: 需通过特定的OpenSSL分支(如"GmSSL")或第三方库实现SM2/SM3/SM4支持
- 挑战: Linux内核中的硬件密钥管理功能对国密支持有限
macOS/iOS 平台
Apple生态系统提供了统一的安全架构,核心是Keychain服务和Secure Enclave。
Keychain 服务
- 系统级密钥管理: 集中存储密码、证书、密钥等
- 应用沙盒集成: 应用可访问自己的Keychain项
- iCloud Keychain同步: 跨设备安全同步
- 访问控制列表(ACL): 精细的访问权限控制
Secure Enclave
A7及更新芯片中的安全协处理器:
- 物理隔离: 与主处理器分离的安全区
- 密钥生成与存储: 密钥在Secure Enclave内生成,私钥永不离开
- 生物识别集成: Touch ID/Face ID验证直接在Secure Enclave处理
算法支持:
- 标准算法: 全面支持RSA、ECDSA、AES等
- 国密算法: 官方Security框架不支持SM2/SM3/SM4,需通过应用层实现
- 关键限制: Secure Enclave不允许导入外部生成的密钥,仅支持内部生成
Android 平台
Android通过Keystore系统提供密钥管理功能。
Android Keystore系统
- 应用隔离: 每个应用的密钥相互隔离
- 硬件支持: 可利用设备TEE或安全元件
- 密钥用途限制: 可限制密钥的使用场景和条件
- 身份认证绑定: 密钥可与设备解锁状态或生物识别绑定
硬件支持
- TEE (可信执行环境): 如高通的QSEE、华为的iTrustee
- StrongBox Keymaster: 专用安全硬件实现(如Titan M)
算法支持:
- 标准算法: 支持RSA、EC、AES等主流算法
- 国密算法: AOSP版本不支持SM2/SM3/SM4
- 厂商定制: 部分国内厂商在定制Android系统中添加了国密支持
鸿蒙OS (HarmonyOS)
作为新兴操作系统,鸿蒙OS在设计之初就考虑了安全特性。
统一密钥管理服务
- 分布式密钥管理: 支持跨设备安全协同
- 多级安全架构: 从芯片到应用的纵深防御
- 设备认证体系: 基于密钥的可信设备认证
硬件安全能力
- TEE环境: 基于ARM TrustZone技术
- 安全存储区: 提供密钥隔离存储
- CC EAL5+认证: 部分核心安全组件获得高级别安全认证
算法支持:
- 标准算法: 支持国际主流密码算法
- 国密算法: 原生支持SM2/SM3/SM4系列国密算法
- 硬件加速: 部分设备提供国密算法硬件加速
跨平台开发挑战与解决方案
主要挑战
- 密钥不可导出、导入,导致共享密钥困难: 多数平台的硬件安全存储区不允许导出私钥,无法共享复制密钥,设备一旦丢失、损坏,密钥就无法恢复。
- 算法支持差异: 国密算法SM2基本没有得到支持
- API不一致: 各平台密钥管理API设计理念差异大
- 安全等级控制: 有些系统对密钥的使用控制过于宽泛,容易被恶意程序攻击。