密码软件与实现与密钥安全之密钥安全方案
基于寄存器的密钥安全方案
原理
确保密钥数据只以明文形态储存在cpu寄存器上
安全目标
1.密钥长期储存寄存器
- 特权资源,不被用户态访问;
- 除加解密任务外不访问该寄存器
2.密钥初始化
3.加解密计算过程
安全性分析
基于寄存器的对称密码算法实现采用多重安全措施,有效抵御冷启动攻击,将密钥长期存储在特权寄存器中,并通过原子操作、系统补丁等手段避免泄露到内存。方案防范只读DMA攻击,但对于读写DMA和内核态软件攻击存在一定潜在风险,同时通过无密钥相关跳转提高了对侧信道攻击的防御。
基于寄存器的公钥密码算法实现方案
1)初始化:进行口令派生算法计算 AES 主密,并将AES 主密钥安全存储在特权寄存器中。
2)RSA 私钥解密:在从内存中接收到 RSA 计算请求时,从外部读取加密的 RSA 密钥在 CPU 中将RSA私行解密,并将明文形态的 RSA私钥临时存放在寄存器上。
3)RSA计算:在通用寄存器上完成 RSA 计算过程。
难点:仅用寄存器完成涉及大量中间变量的RSA计算
1.全寄存器
- Montgomery乘法
2.寄存器 + 内存加密
- 加密内存空间的构建
- Montgomery乘法实现
- 模幂实现
- RSA实现
基于寄存器的密钥安全方案对比
基于Cache的密钥安全方案
原理
利用Cache代替内存进行计算和储存(Cache As RAM),确保敏感数据只以明文形态出现在寄存器和Cache中
密钥架构步骤
- 1.从用户输入的口令中导出主密钥并复制到每个 CPU 核的调试寄存器中。
- 2.从硬盘将加密的私钥读入内存。
- 3.需要进行私钥操作时,将主密钥从调试寄存器中载入 Cache。
- 4.加密的私钥被载入 Cache。
- 5.私钥被主密钥解密来进行密码计算。
- 6.如果在签名时需要 DRBG(随机数发生器),那么DRBG种子先被解密,再生成随机比特,并更新DRBG 内部状态。随后敏感信息被擦除。
基于Cache的安全计算环境构建
- 1.从被TRESOR机制保护的调试寄存器载人主密钥。
- 2.由AES主密钥初始化AES 计算上下文。
- 3.加密的私钥被主密钥解密。
- 4.使用私钥构造私钥上下文。
- 5.进行所请求的私钥操作,其中,在计算 ECDSA时,DRBG子需要被解密来生成随机比特,然后更新。
- 6.输出被写回内存
系统实现
CAR技术实现
1.执行保护环境
struct CACHE CRYPTO ENV{
unsigned char masterKey[128/8];
AES CONTEXT aes;
union {
RSA rsaCtx;
ECDSA{
ECDSA KEY ecdsaKey;
unsigned char mallocBuffer[DMEM SIZE];
} ecdsaCtx;
}pkcontext;
DRBG drbg;
PRECOMPUTATION TABLE table;
unsigned char CacheStack[CSTACK SIZE];
unsigned long privKeyId;
unsigned char input[MAX IN LENGTH];
unsigned char output[MAX OUT LENGTH];
}CacheCryptoEnv;
2.L1 D-Cache使用
计算过程中,保证整个CacheCryptoEnvironment都在L1 D-Cache中。
3.栈切换
4.原子性
- 调用preempt_disable()禁止内核抢占
- 调用local_irq_save()关闭可屏蔽中断,阻止上下文切换发生
5.对SMP支持
密码算法实现
- RSA
- DRBG
- ECDSA
用户接口
通过ioctl系统调用请求服务
- 1.获取私钥的数量。
- 2.根据密钥唯一标识符(privateKeyId)指定的密对做私运算。
- 3.根据密钥对来获取公信息,包括算法标识符和公钥
基于处理器扩展特性的密钥安全方案
基于可信执行环境的密钥安全方案
原理
基于可信执行环境的密钥安全方案的基本原理就是将密码软件实现运行在传统的操作系统内“逻辑”隔离的可信执行环境中,并配合一系列技术来保证密码软件实现的代码完整性、运行期的密钥安全和存储期的密钥安全,使其可以防范来自同一常规执行环境(例如ARM TrustZone 安全区域之外的富操作系统)的攻击者。
可信执行环境(TEE)
对加载到该环境内部的代码和数据实施额外安全保护,与操作系统并行运行
1.ARM TrustZone
提供ARM平台上系统维度、硬件层次的隔离
- 安全域
- 普通域
2.Intel SGX
基于CPU硬件特性的隔离技术,为应用程序提供可信的隔离执行环境
提供了内存加密、隔离执行环境、断言证明、数据密封等安全特性
3.Intel TXT
- 验证平台及其操作系统的真实性
- 确保真实操作系统在受信任的环境中启动
- 提供额外安全功能
(1)可信平台模块
(2)静态信任链和动态信任链
密钥安全方案设计
1.ARM TrustZone
(1)代码完整性保护
- 从 ROM 中把安全启动加载程序加载进安全内存;
- 安全启动加载程序把安全操作系统镜像和密码软件实现加载到安全内存中,将非安全启动加载程序和富操作系统内核加载到非安全内存中;
- 安全启动加载程序跳转系统到普通域,执行非安全的启动加载程序,并运行已经加载好的富操作系统内核。
(2)运行期的密钥保护
- 将 CPU 状态、内存区域、I/O外部设备与富操作系统进行了隔离
(3)储存期的密钥保护
基于访问控制和密钥加密存储两种方式完成对存储期的密钥保护
- 指定 I/0外设的访问权限,使某些外设只允许来自安全域的访问,这样就可以将密钥存储在只有安全域可以访问的安全非易失性存储中
- 借助硬件支持的 SCC-AES 等机制,将密以密文形式存储,密钥加密密钥被存储在基于可编程电子熔丝的安全存储中
2.Intel SGX
(1)代码完整性保护
- 每个enclave都计算了唯一的度量值,且不同的enclave的度量值不同
(2)运行期的密钥保护
- 保证不同的enclave之间相互隔离,且外部无法访问和篡改enclave的寄存器
(3)储存期的密钥保护
- enclave可以对密钥进行加密
3.Intel TXT
(1)代码完整性保护
- TXT的静态信任链和动态信任链机制可以对密码软件实现的代码进行完整性度量,保护其不被攻击者恶意篡改。
(2)运行期的密钥保护
- 提供了一个与常规操作系统隔离的执行环境
- 运行时,将常规操作系统挂起,密码软件实现中的密钥不会被常规操作系统中的攻击者恶意获取
(3)储存期的密钥保护
- TPM为TXT提供必要的可信根、非易失性随机存取存储器(NVRAM)、随机数发生器、密码计算等功能
基于事务内存机制的密钥安全方案
Intel TSX工作机制
- 提高并行效率,减少多线程编程的难度和代价
- 使临界区只有在确定发生数据访问冲突后才串行执行
方案设计
Mimosa采用密钥加密密钥保护其他密钥的结构
操作周期
- 初始化:仅在启动时执行一次
- 保护计算:每次RSA私钥计算时进行
基于门限密码算法的密钥安全方案
秘密分享
创建密钥的多个备份,并将这些备份分发给不同的人或储存在多个位置
Shamir秘密分享方案
1. 初始化:
- 选择一个质数 ( p ) 和要分享的秘密 ( S )。
设定阈值 ( t ) 和参与者总数 ( n )。
2. 生成多项式:
- 创建一个 ( t-1 ) 次的随机多项式,其中 ( a_0 = S )。
- 系数 ( a_1, a_2, \dots, a_{t-1} ) 是随机选取的。
3. 生成份额:
- 对于每个参与者 ( i ),计算多项式在 ( i ) 处的值 ( f(i) ) 并分发给对应的参与者。
4. 份额收集:
- 将生成的份额分发给参与者。
5. 秘密重建:
- 当收集到至少 ( t ) 个份额时,利用拉格朗日插值法重建多项式。
- 使用 ( f(0) ) 获得原始秘密 ( S )。
门限密码算法
SM2门限密码算法示例
方案的核心步骤:
1.密钥生成:
- 包括可信中心的参与,但仅在密钥生成阶段。
实现秘密分享等步骤,将密钥分割成多个部分。
签名生成: - 参与者按照门限值t进行签名生成,但任意t个参与者均可完成签名的生成。
2.签名验证:
- 验证方案确保门限数量的签名被合理验证,确保签名的有效性。
基于门限密码算法的密钥安全方案(SM2)
- A为用户终端
- B为协作服务端
1.密钥生成
2.合作签名/解密
(1)合作签名计算
(2)合作解密计算