机密计算: 可信与国密算法
可信根、可信链以及国密算法。
机密计算
- 多家巨头入局,机密计算能否成为数据安全的终结者?
- 当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
- 龙蜥社区:2023云原生机密计算最佳实践白皮书
- 好书相赠!《机密计算:AI数据安全和隐私保护》
- 鲲鹏芯片及通用机密计算平台技术
- 【机密计算】关于机密计算的五大须知
- google 机密计算
可信认证
如何拿到合法的公钥:
- 公钥证书:里面含有名字、组织、邮箱地址等基本信息,以及属于此人的公钥,由认证机构 (Certification Authority, Certifying Authority, CA) 施加数字签名
- 认证机构:由国际性组织和政府所设立的组织,也有通过提供认证服务来盈利的一般企业,此外个人也可以成立认证机构
可信根
- 可信根的定义:如果信息系统中的可信机制是完整的,则沿着这个支撑关系回溯,最终会得到一个既具备安全功能又具备可信功能,而且不需要其他机制提供安全支撑的底层机制,这就是系统的可信根。
- 可信根的基本属性:具备密码服务功能、具备对系统启动的度量能力、可以控制系统启动过程、先于系统其它部分启动
- 可信根的基本组成:由具备密码服务功能的可信平台模块、以及系统中的度量代码段组成;可信平台模块拥有权限保护机制,需要更高的权限才可以访问到其片内的资源,例如只有安全处理器才可以访问到芯片的密钥;度量代码放在ROM中,固化在可信平台模块内部,无法被攻击。
可信链的建立
如何由可信根出发建立信任链:
- 信任建立的基础:身份信息的确认,代码完整性的度量
- 身份信息的确认:基于安全处理芯片中的公钥密码模块,通过签名和验签来实现
- 代码完整性的度量:基于安全处理芯片中的单向散列函数模块,生成固定长度的散列值;与预期的散列值进行比较,实现完整性度量
任何一步验签失败,都会使得系统无法启动。
片外固件结构
加密+签名(安全服务器中完成):
- 在 Header 中填入加密参数(随机数),用于对固件 Body 进行加密;随机数会作为对称加密的初始化向量
- 对 Header + Body 计算摘要得到哈希值,然后进行签名操作
- 使用加密参数加密 Body
- 拼接 Header + Enc_Body + Signature
解密+验签(Boot阶段由安全管理芯片完成):
- 获得 Header 中的解密参数(随机数)
- 使用对称密码对 Body 进行解密;
- 对 Header + Dec_Body 计算摘要得到哈希值
- 对得到的哈希值进行验签
可信度量
- 逐级检查代码的完整性,度量的结果放在PCR(Platform Configurate Register)寄存器中;
- 核心度量根 CRTM,就是 ROM 代码;
- 服务器的 BIOS 都是 UEFI 模式;
- 将预期值和 PCR 寄存器的值进行比对,确认代码的完整性。
动态度量:
TPCM
特性:TPM 只支持静态度量,国内 TPCM 标准可以支持动态度量- 动态度量:安全处理器对运行中的关键程序和数据进行度量监控,包括:
- 中断向量表
- 系统调用表
- 内核模块
- 度量报告:包含当前计算机的可信状态,同时对度量报告进行签名,无法伪造
- Hy独有:TDM 轻量级动态度量,满足不同用户需求
Windows 运行 certmgr 命令可以查看证书:
可信存储
- 集成密码模块:在服务器的内存控制器中,集成了对称加解密引擎;
- 对性能的影响:由于对称加解密的特点,对访存性能几乎没有影响;
- 加密开关:在内存物理地址增加 C 位,作为加解密的开关,同时加解密以页为单位(4K页和2M页);通过ASID来对应不同的虚拟机,实现应用层加密管理
- 密钥管理:密钥由安全处理器管理、用户和操作承统均无法获得密钢:每个虚拟机对应一个不同的 ASID,内存加加解密的密钥由UMC内部逻辑产生.根据不同的ASID 和地址生成不同的密钥。
如何实现安全存储:
- 数据加密:将数据进行加密后,放入磁盘
- 访问授权:用户访问服务器需要提供授权码,授权正确才可以访问
- 可信绑定:授权码和可信状态绑定,授权码正确且系统状态是可信的,才可以拿到密钥,解密磁盘里的数据;其他任何人想访问设备,不能获得密钥,保证存储数据安全
常用技术:Bitlocker(比特锁)
可信软件基
TSB(Trusted Software Base)
:
- 可信软件基由可信管理中心统一管理和调度;
- 硬件设备公司与可信商业软件公司合作,由其提供可信软件基;
- 可信设备在TPCM只负责实现硬件支持,主要是在安全处理器中实现TPCM模块
TSB由基本信任基、主动监控机制(控制机制,度量机制,判定机制)、可信基础库,支撑机制组成
- 基本信任基:具有基本的量度能力,对TSB的启动做验证
- 主动监控机:制监控系统调用,在ERT的支撑下实现对系统调用软件环境的主动量度和控制(ERT: Entity of Root of Trust, 可信根实体)
- 支撑机制:通过ERT接口调用,为应用提供完整性量度,加解密,可信认证等服务
- 协作机制:接收可信策略管理中心的策略下发,上次审计结果,与其他计算平合进行可信协作
- 可信基准库:存储可信基准值,包括驻留基准值(硬盘)和即时基准值(内存)
Mbedtls
1 |
|
AES
▶
AES
1 |
|
- 准备一个txt文本,内容为’Hello World’
- 使用 AES-256-GCM 加密,SHA256 验证完整性,密钥为 hex:7a30d862c42e74
1 |
|
Hash
1 |
|
PKey
- rsa_genkey - 演示如何生成 RSA 密钥对的应用程序
- rsa_encrypt - 使用 rsa API 的 RSA 加密参考程序
- rsa_decrypt - 使用 rsa API 的 RSA 解密参考程序
- ecdsa - ECDSA 程序示例
- gen_key - 如何生成私钥的示例
▶
RSA加解密
1 |
|
ECDH
密钥交换算法简介:RSA算法再一定程度熵解决了密钥配送问题,但也可以用DH密钥协商算法来解决密钥配送问题。DH密钥协商算法时基于离散对数问题。DH(Diffie-Hellman)密钥协商是由 Whitfield Diffie 和 Martin Hellman 提出,该算法允许通讯双方再不安全的信道交换数据,从而协商出一个会话密钥。
- Diffie-Hellman 密钥交换:基于有限域的离散对数难以计算所实现
- Alic 给 Bob 一个大质数 P 和生成元 G
- Alice 和 Bob 各在 1 ~ P-2 的区间内生成一个随机数并保密
- Alic发送 $G^A mod P$ 给Bob
- Bob发送 $G^B mod P$ 给Alice
- Alice 计算 $(G^B mod P)^A mod P$ 作为密钥
- Bob 计算 $(G^A mod P)^B mod P$ 作为密钥,与 Alice 相同
- 生成元的计算方法:
- 设 13 为 P,则任取 G 在 0 - P-1 内,A 在 1 ~ P - 1 的范围内,生成元 $G^A mod P$ 应当与 A 一一对应的关系
- 例如 2 的 1 次方到 12 次方取 13 的模与 1 - 12 一一对应因此 2 是 13 的生成元
mbedtls\programs\pkey
目录下:
dh_client.c
,DH客户端dh_server.c
,DH服务器dh_genprime.c
,产生DH共享参数,保存在dh_prime.txtrsa_genkey.c
,产生RSA密钥对,保存在rsa_priv.txt、rsa_pub.txt
▶
DH密钥交换
1 |
|
SM4 国密算法
参考:
- SM4分组密码算法国家标准
- 国密加密算法sm4
- SM4分组密码算法介绍
- SM4算法介绍
- Support for SM4 (Chinese National Standard)
- Mbedtls SM4 issue
- mbedtls-2.7-sm4 代码
1 |
|
代码:
- 源码:
library/sm4.c
- 头文件:
build/include/mbedtls/sm4.h
- 测试代码:
tests/suites/test_suite_sm4.function
- 测试数据:
tests/suites/test_suite_sm4.data
▶
sm4.h
1 |
|
1 |
|