TEE-OS 入门前置篇:密码学基础核心
承接上一篇的安全基础概念,本篇我们来讲解所有安全技术的核心工具——密码学。如果说隔离是安全的城墙,那么密码学就是城墙上的锁和卫兵。TEE的所有安全能力,从安全启动到安全存储,从支付签名到生物识别,本质上都是密码学技术的具体应用。
作为一名工程师,你不需要成为密码学家,不需要精通每一个算法的数学原理,但你必须准确理解每个算法的特性、适用场景和常见陷阱。90%的安全漏洞不是因为算法本身被破解,而是因为开发者用错了算法。
一、密码学的核心目标
所有密码学算法最终都是为了实现上一篇讲到的安全三要素:
- 机密性:加密算法保证信息不被未授权读取
- 完整性:哈希算法和数字签名保证信息不被未授权篡改
- 不可否认性:数字签名保证行为主体无法否认自己的操作
二、对称加密:大数据量加密的首选
1. 核心原理
对称加密使用同一把密钥进行加密和解密。
明文 + 密钥 → 加密算法 → 密文
密文 + 同一把密钥 → 解密算法 → 明文
2. 核心特性
- 速度极快:比非对称加密快1000倍以上
- 适合加密大数据量:文件、视频、固件等
- 密钥分发困难:通信双方必须通过安全通道交换密钥
- 无法提供身份认证和不可否认性
3. 主流算法详解
(1)AES(Advanced Encryption Standard)
- 地位:全球通用的对称加密标准,被所有国家和行业认可
- 密钥长度:128位(AES-128)、192位(AES-192)、256位(AES-256)
- 安全强度:AES-128足以抵御目前所有已知的攻击,AES-256用于最高安全级别场景
- TEE应用:安全存储、OTA升级包加密、DRM内容解密、硬盘加密
(2)SM4
- 地位:中国国家密码管理局发布的国密对称加密标准
- 密钥长度:128位
- 安全强度:与AES-128相当
- 应用场景:国内金融、政务、军工等必须使用国密算法的领域
- MTK平台支持:所有联发科芯片都内置了SM4硬件加速引擎
4. 关键概念:分组加密工作模式
对称加密算法只能加密固定长度的数据块(AES和SM4都是128位)。要加密任意长度的数据,需要使用工作模式。
工作模式 | 特点 | 安全性 | 推荐程度 |
ECB | 最简单,每个块独立加密 | 极差,相同明文块生成相同密文块 | 绝对禁止使用 |
CBC | 每个块与前一个密文块异或后再加密 | 中等,需要IV向量 | 不推荐用于新系统 |
GCM | 认证加密模式,同时提供加密和完整性校验 | 极高 | 强烈推荐,所有新系统的首选 |
重要警告:永远不要在生产环境中使用ECB模式。它会泄露明文的统计特征,即使不知道密钥也能破解部分信息。
5. TEE中的最佳实践
- 所有大数据量加密统一使用AES-256-GCM或SM4-GCM
- IV向量必须是随机生成的,且每个加密操作使用不同的IV
- 永远不要自己实现加密算法,使用TEE内核提供的硬件加速接口
三、非对称加密:解决密钥分发问题
1. 核心原理
非对称加密使用一对密钥:公钥和私钥。
- 公钥可以公开给任何人
- 私钥必须严格保密,永远不能泄露
- 公钥加密的内容只能用对应的私钥解密
- 私钥签名的内容只能用对应的公钥验签
2. 核心特性
- 解决密钥分发问题:不需要安全通道交换密钥
- 提供身份认证和不可否认性
- 速度极慢:比对称加密慢1000倍以上
- 不适合加密大数据量
3. 主流算法详解
(1)RSA
- 地位:最经典、应用最广泛的非对称加密算法
- 密钥长度:2048位(最低安全要求)、3072位(推荐)、4096位(最高安全)
- 缺点:密钥太长,计算量大,速度慢
- 现状:正在被ECC逐步取代,但在很多老系统中仍在使用
(2)ECC(Elliptic Curve Cryptography,椭圆曲线加密)
- 地位:现代非对称加密的主流标准
- 核心优势:在相同安全强度下,密钥长度比RSA短得多
- 安全强度对比:
ECC密钥长度 | RSA等效密钥长度 |
256位 | 3072位 |
384位 | 7680位 |
- 常用曲线:
- secp256r1(NIST P-256):全球通用标准
- secp256k1:比特币使用的曲线
- TEE应用:密钥交换、数字签名、身份认证
(3)SM2
- 地位:中国国密非对称加密标准
- 基于椭圆曲线:安全强度与ECC secp256r1相当
- 应用场景:国内金融、政务、军工领域
- MTK平台支持:所有联发科芯片都内置了SM2硬件加速引擎
4. 最常见的使用误区
绝对不要用非对称加密直接加密大数据。非对称加密的正确用法是:
- 生成一个随机的对称密钥(会话密钥)
- 用对称密钥加密大数据
- 用对方的公钥加密会话密钥
- 将加密后的会话密钥和密文一起发送给对方
- 对方用自己的私钥解密会话密钥,再用会话密钥解密大数据
5. TEE中的最佳实践
- 所有新系统优先使用ECC secp256r1或SM2
- RSA只用于兼容老系统,且密钥长度至少2048位
- 私钥永远不要离开TEE,所有私钥操作都在TEE内部完成
四、哈希算法:完整性校验的基石
1. 核心原理
哈希算法将任意长度的输入数据转换为固定长度的输出(哈希值)。
2. 三个核心特性
- 单向性:无法从哈希值反推出原始数据
- 抗碰撞性:无法找到两个不同的输入数据,生成相同的哈希值
- 确定性:相同的输入永远生成相同的输出
3. 主流算法详解
(1)SHA-256
- 地位:全球通用的哈希算法标准
- 输出长度:256位(32字节)
- 安全强度:极高,目前没有有效的破解方法
- TEE应用:数据完整性校验、密码存储、数字签名、OTA升级包校验
(2)SM3
- 地位:中国国密哈希算法标准
- 输出长度:256位
- 安全强度:与SHA-256相当
- 应用场景:国内金融、政务、军工领域
4. 绝对禁止使用的算法
- MD5:已被完全破解,碰撞攻击非常容易
- SHA-1:已被破解,2017年谷歌发布了SHA-1碰撞攻击
- 这两个算法只能用于校验非安全相关的数据,绝对不能用于任何安全场景
5. 典型应用场景
(1)数据完整性校验
发送方:计算文件的SHA-256哈希值 → 发送文件和哈希值 接收方:计算收到文件的SHA-256哈希值 → 与发送的哈希值对比 如果相同,说明文件没有被篡改;如果不同,说明文件被篡改
(2)密码存储
永远不要明文存储密码,也不要用加密的方式存储密码。正确的做法是: 存储:密码 + 随机盐 → SHA-256哈希 → 存储哈希值和盐 验证:用户输入密码 + 存储的盐 → SHA-256哈希 → 与存储的哈希值对比
五、数字签名:身份认证与不可否认性
1. 核心原理
数字签名是非对称加密和哈希算法的结合。
2. 完整签名与验签流程
签名流程(发送方):
- 计算原始数据的SHA-256哈希值
- 用自己的私钥对哈希值进行加密,生成签名
- 将原始数据和签名一起发送给接收方
验签流程(接收方):
- 计算收到的原始数据的SHA-256哈希值
- 用发送方的公钥对签名进行解密,得到发送方计算的哈希值
- 对比两个哈希值,如果相同,说明:
- 数据确实是由持有对应私钥的发送方发送的(身份认证)
- 数据在传输过程中没有被篡改(完整性)
- 发送方无法否认自己发送了这个数据(不可否认性)
3. 为什么要先哈希再签名?
- 非对称加密速度慢,只加密哈希值(32字节)比加密整个原始数据快得多
- 大多数非对称加密算法只能加密固定长度的数据,无法加密任意长度的原始数据
4. TEE中的核心应用
数字签名是TEE中最重要的安全机制之一:
- 安全启动:每一级固件在加载前都会验证签名
- OTA升级:升级包在安装前会验证签名
- TA验证:每个TA在加载前都会验证厂商签名
- 支付签名:交易信息在TEE中用支付私钥签名
六、密钥管理与安全存储:TEE的核心价值
密码学算法本身是公开的,系统的安全最终取决于密钥的安全。如果密钥被泄露,再强的算法也毫无意义。这正是TEE存在的核心价值——保护密钥的安全。
1. 密钥分级体系
现代安全系统采用分层密钥管理体系,不同级别的密钥有不同的安全要求:
最高安全级别 ↑ 根密钥(HUK) ↑ 设备加密密钥(DEK) ↑ 用户密钥(UK) ↑ 会话密钥(SK) ↑ 最低安全级别
(1)根密钥(Hardware Unique Key, HUK)
- 存储位置:烧录在芯片的efuse中,一次性可编程
- 特性:每个设备唯一,永远无法读取,永远无法修改
- 作用:整个系统的信任根,用于派生所有其他密钥
- 安全级别:最高,只有TEE内核可以访问
(2)设备加密密钥(Device Encryption Key, DEK)
- 生成方式:由HUK派生而来
- 存储位置:加密存储在RPMB分区中
- 作用:用于加密所有用户密钥和安全存储数据
- 安全级别:高,只有TEE内核可以访问
(3)用户密钥(User Key, UK)
- 生成方式:用户创建或导入的密钥,如支付密钥、加密密钥
- 存储位置:用DEK加密后存储在普通文件系统中
- 作用:用于加密用户数据和执行安全操作
- 安全级别:中,只有对应的TA可以访问
(4)会话密钥(Session Key, SK)
- 生成方式:每次会话随机生成
- 存储位置:TEE内部内存中
- 作用:用于单次会话的加密
- 安全级别:低,会话结束后立即销毁
2. TEE安全存储的实现原理
这是TEE最核心的功能,也是很多人最困惑的地方:为什么即使root了Android系统,也无法读取TEE中的安全存储数据?
答案很简单:加密密钥永远不会出现在非安全世界。
完整的安全存储流程:
- 用户需要存储一个敏感数据
- TA将数据发送给TEE内核
- TEE内核用HUK派生的DEK加密数据
- TEE内核将加密后的数据返回给TA
- TA将加密后的数据存储在普通的文件系统中(如/data/tee/)
读取流程:
- TA从文件系统读取加密后的数据
- TA将加密数据发送给TEE内核
- TEE内核用DEK解密数据
- TEE内核将解密后的明文数据返回给TA
- TA使用明文数据,使用完成后立即从内存中清除
关键点:DEK永远不会离开TEE内核,非安全世界只能看到加密后的数据。即使攻击者获得了Android系统的root权限,也无法获取DEK,也就无法解密安全存储的数据。
3. 密钥管理的铁律
- 密钥永远不要出现在非安全世界:所有密钥操作都必须在TEE内部完成
- 永远不要硬编码密钥:任何密钥都不能写在代码或配置文件中
- 最小权限原则:每个TA只能访问自己的密钥,不能访问其他TA的密钥
- 密钥生命周期管理:密钥必须有明确的生成、使用、更新、销毁流程
- 永远不要备份私钥:私钥一旦泄露,整个系统的安全就不复存在
七、本篇总结与下一篇预告
本篇核心要点
- 对称加密速度快,适合加密大数据;非对称加密解决密钥分发问题,提供身份认证
- 哈希算法提供数据完整性校验,是数字签名的基础
- 数字签名同时提供身份认证、完整性和不可否认性
- 系统的安全最终取决于密钥的安全,TEE的核心价值就是保护密钥
- 永远不要自己实现密码学算法,使用经过验证的标准实现
三个密码学素养
- 不要发明密码学算法:即使是最优秀的密码学家也很难设计出安全的算法
- 不要修改密码学算法的参数:任何对标准算法的修改都可能引入安全漏洞
- 永远怀疑密钥的安全性:假设密钥总有一天会泄露,设计相应的应急方案