1. 国密与TEE概述
各位同学好,我是老张。做了十几年安全架构,最近五年一直在跟国密和TEE打交道。今天咱们聊聊这个组合——国密算法在可信执行环境里的落地。
说实话,刚接触这个领域时我也挺困惑。国密算法是中国的密码标准,TEE是芯片级的隔离技术,这两者怎么结合?为什么要结合?
嗯,咱们一步步拆开看。
1.1 国密算法体系:SM2/SM3/SM4
国密算法,全称是中国商用密码算法。它不是单个算法,而是一整套密码体系。我习惯把它分成三类:
- SM2:椭圆曲线公钥密码算法,对标国际的RSA/ECDSA
- SM3:密码杂凑算法,对标国际的SHA-256
- SM4:分组对称密码算法,对标国际的AES
这三兄弟各有各的用处。SM2做签名和密钥交换,SM3做完整性校验,SM4做数据加密。你想想看,一个完整的密码系统,公钥、哈希、对称加密,全齐了。
核心要点:国密算法不是简单的"中国版AES",而是一套完整的密码体系。SM2、SM3、SM4各司其职,缺一不可。
我在项目中遇到过不少团队,只把SM4当成AES的替代品,结果签名和哈希还在用国际算法。这种做法,说白了就是"半拉子国密",合规评审时肯定过不了。
SM2:公钥密码
SM2基于椭圆曲线,密钥长度256位。它的签名速度比RSA快,但验签稍慢。实际项目中,SM2常用于:
- 数字签名:证明数据是谁发的
- 密钥协商:双方安全地商量一个对称密钥
- 证书签发:国密PKI体系的基础
个人经验:SM2的密钥生成比较耗时,我建议在系统初始化阶段预生成一批密钥对,放到密钥池里。别等到业务请求来了才现场生成,那延迟你扛不住。
SM3:密码杂凑
SM3输出256位哈希值,安全性设计上比SHA-256还保守一些。它的应用场景很直接:
- 数据完整性校验
- 消息认证码(HMAC-SM3)
- 数字签名的预处理
SM3有个特点——它的实现比SM2/SM4简单,纯软件跑起来也很快。所以很多TEE方案里,SM3是第一个被移植进去的国密算法。
SM4:对称加密
SM4是分组密码,分组长度128位,密钥长度128位。它的结构跟AES不太一样,用的是Feistel网络结构。
我记得第一次看SM4的算法文档时,觉得它跟AES差别挺大。AES是SPN结构,SM4是Feistel结构。这意味着什么呢?
- SM4的加解密结构几乎一样,实现起来省事
- SM4的轮数固定为32轮,比AES的10/12/14轮多
- SM4的S盒设计有自己的数学原理
| 算法 | 类型 | 密钥长度 | 输出长度 | 对标国际 |
|---|---|---|---|---|
| SM2 | 公钥密码 | 256位 | 签名64字节 | RSA/ECDSA |
| SM3 | 密码杂凑 | — | 256位 | SHA-256 |
| SM4 | 分组对称 | 128位 | 128位 | AES |
1.2 可信执行环境(TEE)基本概念
TEE,说白了就是芯片上的一个"安全小黑屋"。你的敏感数据在里面处理,外面的操作系统、应用、甚至物理攻击都看不到。
为什么需要这么个东西?
你想想看,传统的安全方案依赖操作系统来隔离。但操作系统本身漏洞那么多,一旦被攻破,所有保护都白搭。TEE的思路是——从硬件层面做隔离,让安全不依赖OS。
目前主流的TEE技术有:
- ARM TrustZone:手机、IoT设备上最常见
- Intel SGX:PC和服务器上的TEE
- RISC-V TEE:开源架构下的新方案
它们的共同点是:
- 硬件隔离:安全世界和普通世界物理隔离
- 内存加密:TEE内部的数据在内存中是加密的
- 安全启动:从ROM开始逐级验证,确保TEE代码没被篡改
- 远程证明:让第三方验证TEE是否真实可信
避坑指南:我曾经以为TEE是"绝对安全"的,后来发现不是。TEE只保护运行时的数据,输入输出通道、侧信道攻击、物理攻击,这些都需要额外防护。别把TEE当成万能药。
1.3 为什么需要将国密算法落地到TEE中
这个问题,我分三个层面来讲。
第一层:合规要求。
现在很多行业——金融、政务、关键基础设施——都要求使用国密算法。如果你的系统跑在TEE里,但TEE内部用的是国际算法,合规评审时会被打回来。我见过不少项目,因为这个问题返工,成本翻倍。
第二层:安全增强。
国密算法本身是安全的,但算法安全不等于系统安全。密钥怎么存?怎么用?怎么防止泄露?
把国密算法放到TEE里,等于给算法加了一层"硬件铠甲":
- 私钥永远不出TEE
- 签名运算在TEE内部完成
- 即使OS被攻破,攻击者也拿不到密钥
第三层:性能优化。
国密算法在普通环境里跑,性能还行。但在TEE里,情况就复杂了。TEE的内存有限,计算资源受限,有些TEE甚至没有硬件加速。
我做过一个项目,把SM2签名放到SGX里,一开始性能惨不忍睹。后来做了大量优化——预计算、查表法、并行化——才把性能提上来。这些经验,后面几章我会详细讲。
一句话总结:国密+TEE,合规、安全、性能三者兼顾。但落地过程坑很多,需要系统性的架构设计。
下面这张图,是我自己总结的国密+TEE整体架构。你看一眼,后面每章都会围绕这个图展开。
这张图展示了国密+TEE的四层架构。从上到下:应用层调用国密算法,国密算法运行在TEE内部,TEE依赖硬件安全基座。每一层都有各自的挑战,后面29章咱们一个一个啃。
嗯,第一章就到这里。内容不多,但都是基础。后面的章节,我会带着大家一步步把国密算法真正跑在TEE里,包括代码实现、性能调优、安全加固。准备好了吗?