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:开源架构下的新方案

它们的共同点是:

  1. 硬件隔离:安全世界和普通世界物理隔离
  2. 内存加密:TEE内部的数据在内存中是加密的
  3. 安全启动:从ROM开始逐级验证,确保TEE代码没被篡改
  4. 远程证明:让第三方验证TEE是否真实可信

避坑指南:我曾经以为TEE是"绝对安全"的,后来发现不是。TEE只保护运行时的数据,输入输出通道、侧信道攻击、物理攻击,这些都需要额外防护。别把TEE当成万能药。

1.3 为什么需要将国密算法落地到TEE中

这个问题,我分三个层面来讲。

第一层:合规要求。

现在很多行业——金融、政务、关键基础设施——都要求使用国密算法。如果你的系统跑在TEE里,但TEE内部用的是国际算法,合规评审时会被打回来。我见过不少项目,因为这个问题返工,成本翻倍。

第二层:安全增强。

国密算法本身是安全的,但算法安全不等于系统安全。密钥怎么存?怎么用?怎么防止泄露?

把国密算法放到TEE里,等于给算法加了一层"硬件铠甲":

  • 私钥永远不出TEE
  • 签名运算在TEE内部完成
  • 即使OS被攻破,攻击者也拿不到密钥

第三层:性能优化。

国密算法在普通环境里跑,性能还行。但在TEE里,情况就复杂了。TEE的内存有限,计算资源受限,有些TEE甚至没有硬件加速。

我做过一个项目,把SM2签名放到SGX里,一开始性能惨不忍睹。后来做了大量优化——预计算、查表法、并行化——才把性能提上来。这些经验,后面几章我会详细讲。

一句话总结:国密+TEE,合规、安全、性能三者兼顾。但落地过程坑很多,需要系统性的架构设计。

下面这张图,是我自己总结的国密+TEE整体架构。你看一眼,后面每章都会围绕这个图展开。

国密算法在TEE中的落地架构 应用层 金融支付 · 身份认证 · 数据保护 · 区块链 国密算法层 SM2 签名/密钥交换 · SM3 哈希 · SM4 加解密 可信执行环境(TEE) 内存隔离 · 安全存储 · 远程证明 · 安全调度 硬件安全基座 ARM TrustZone / Intel SGX / RISC-V TEE 安全等级递增 硬件依赖递增

这张图展示了国密+TEE的四层架构。从上到下:应用层调用国密算法,国密算法运行在TEE内部,TEE依赖硬件安全基座。每一层都有各自的挑战,后面29章咱们一个一个啃。

嗯,第一章就到这里。内容不多,但都是基础。后面的章节,我会带着大家一步步把国密算法真正跑在TEE里,包括代码实现、性能调优、安全加固。准备好了吗?