Page 152 - 《软件学报》2020年第10期
P. 152

3128                                  Journal of Software  软件学报 Vol.31, No.10, October 2020

         Hunt [80] .TRESOR-Hunt 利用 DMA 传输的写操作向内核内存中注入攻击代码进行特权提升,攻击代码以 root 权限
         执行将受保护的密钥从寄存器提取到片外 RAM 的指定位置,之后即可利用标准 DMA 传输获得片外 RAM 中存
         储的密钥.FrozenCache  [66] 提出将密钥存储在 CPU 缓存中以进行保护的思路:将内存映射到 CPU 的 L1 缓存,
         使用缓存存储 AES 密钥和轮密钥,并清除片外 RAM 中的密钥;通过让所有处理器核心进入 no-fill 模式,也称
         CAR(cache-as-RAM)模式,来冻结缓存中的密钥,以防止敏感数据被刷新到片外 RAM 中.FrozenCache 使 CPU
         缓存不能发挥正常作用,每次内存访问都会导致缓存未命中.此外,因安全高效实现 FrozenCache 涉及很多细
         节问题,作者未实现该方案的原型系统.
             上述密钥和密码算法保护方案都是针对 x86 架构平台,然而 ARM 架构平台的安全性也受到板级物理攻击
                            [2]
         的威胁,如 FROST 攻击 .在 ARM 架构对称密码算法保护方面,ARMORED                  [67,68] 是针对 ARM 架构和安卓操作
         系统的 TRESOR 修改版,利用 ARM-32 架构的调试寄存器和多媒体寄存器组 NEON                            [81] 实现 AES 算
         法.ARMORED 将 AES 密钥长期存储在调试寄存器的断点寄存器和监视点寄存器中,受 ARM 架构调试寄存器
         数量的限制,仅支持 AES-128.每次加解密时,AES 密钥被加载到 NEON 寄存器,轮密钥和中间状态也都存储在
         NEON 寄存器中.为提高性能,ARMORED 将原子代码中加解密范围从 1 个 AES 输入块增加到 16 个,从而减少
         轮密钥计算次数,即轮密钥计算频率由每输入 128 bit 计算 1 次减少为每输入 2K bit 计算 1 次.ARMORED 实现
         为安卓的 LKM,并通过集成到 Crypto-API 支持基于 ARM 的 Linux 内核,其性能比通用 AES 低 2.3 倍.该方案的
         一个安全问题是:ARM 架构平台上的 JTAG 设备可以通过 JTAG 接口破坏内核完整性,因而 ARMORED 不能抵
         抗通过 JTAG 接口进行的攻击.Key-hiding       [69] 在 ARMORED 基础上进行了改进,将保护密钥的长度扩大到 256
         bit.ARMORED 无法存储超过 128 bit 密钥的原因是:ARM 架构要求所有指令都开始于能被 4 整除的地址,因此
         每个值寄存器的最后 2 位必须为 0,导致 ARMORED 用 4 个 32 bit 断点寄存器和 4 个 32 bit 监视点寄存器不能
         存储 256 bit 密钥.Key-hiding 的解决方案是利用与每个断点或监视点寄存器对应的控制寄存器,将不能在断点
         或监视点寄存器最后 2 位存储的数据存储到相应控制寄存器的第 1 位和第 2 位中,从而利用 4 个断点寄存器和
         4 个监视点寄存器,以及相应的控制寄存器,在 ARM-32 架构中保护 256 bit AES 密钥.因为缺少与原型系统兼容
                                                                                       [2]
         的 AES-256 算法,Key-hiding 未进行性能测试.Anti-forensics [70] 是一种针对安卓设备抗 FROST 攻击 的 AES 密
         钥保护方案.与前述方案不同,Anti-forensics 不是将密钥和加解密算法限制在 CPU 内部,而是通过更改密钥在内
         存中的存储位置来防止 FROST 攻击.Anti-forensics 将 AES 密钥存放在存储安卓启动命令行参数的内存地址,
         系统重新启动时密钥将被命令行参数覆盖,使 FROST 攻击无法获得密钥.该方案不需要占用 CPU 寄存器等其
         他存储资源,不会影响系统正常运行,且对 AES 算法性能影响较小,仅 1.03 倍性能降低,其性能比 ARMORED 高
         2 倍,但是由于密钥存储空间的限制,Anti-forensics 只能保护一个密钥.
             上述内核层对称密钥和密码算法保护方法被扩展到非对称密码算法保护中.与对称密码算法相比,非对称
         密码算法的存储或运算通常需要占用更多存储空间.以 RSA 算法为例,RSA 实验室                        [82] 和 NIST [83] 建议 RSA 私钥
         长度最少为 2048 bit,并且与 RSA 私钥相关的解密/签名运算也需要大量存储空间.在 x86 架构非对称密码算法
         保护方面,PRIME    [71] 、RegRSA [73] 、Copker [74] 、Mimosa [75] 的基本思路类似:将受 TRESOR 保护的 AES 密钥用
         作主密钥加密 RSA 私钥,只需长期占用调试寄存器存储 AES 密钥,而将加密后的 RSA 私钥存储在片外 RAM 中,
         以解决私钥较长存储空间不足的问题,然后选择其他 CPU 内部存储保护 AES 算法和 RSA 算法,仅在进行 RSA
         解密/签名的原子代码中独占这些存储资源,以降低对系统正常运行的影响.PRIME                          [71] 利用 Intel AVX(advanced
         vector extensions) [84] 的多媒体寄存器组实现了 RSA-2048 算法,其在 AVX 寄存器中解密 RSA 私钥以及进行 RSA
         运算.PRIME 采用蒙哥马利(Montgomery)方法在 AVX 寄存器中实现了 RSA 的模幂运算,但是需要将一些不会
         影响 RSA 安全性的中间结果短暂存储在片外 RAM 中.由于存储空间限制,PRIME 不能使用 CRT 加速运算,导
         致其运行速度比常规 RSA 实现慢约 9 倍.与 PRIME 思路类似,Yang 等人                [72] 利用 x86-64 架构的调试寄存器和
         AVX 寄存器实现椭圆曲线密码算法 ECDH(elliptic curve  Diffie-Hellman),将上述寄存器分别用于长期存储 163
         bit 私钥和计算 ECDH 共享密钥.RegRSA      [73] 提出寄存器缓冲区的概念,将所有可用 CPU 寄存器用作安全数据缓
         冲区,敏感数据仅存储在寄存器缓冲区中,并利用寄存器缓冲区实现了使用 CRT 加速的 RSA-2048 算法.该方案
   147   148   149   150   151   152   153   154   155   156   157