Page 432 - 《软件学报》2025年第10期
P. 432

龚子睿 等: FBS-uBlock: 灵活的  uBlock  算法比特切片优化方法                                      4829


                 一步优化了    DES  算法, Kwan  利用选择函数优化了      S  盒的计算, May  利用  Schaumüller-Bichl [18] 提供的  S  盒逻辑表
                 达式加速了算法. Matsuda 等人     [19] 、Papapagiannopoulos [20] 采用比特切片优化了  PRESENT  算法, 张笑从等人  [21] 、
                 王磊等人   [22] 、陈晨等人  [23] 采用比特切片优化了    SM4  算法, 并降低了计算     S  盒时需要的逻辑门个数. 对于        AES  算
                 法, 还有众多针对     CPU  平台  [24−28] 和  GPU  平台  [29,30] 的比特切片优化.
                    在  Biham  所提出的比特切片方法中, 每个寄存器代表一个比特位, 后续也产生了不一样的比特切片表示法.
                 例如, Könighofer [12] 考虑到  CPU  中仅有  16  个  64  比特寄存器, 已有的  AES  比特切片方法无法将数据全部保存在寄
                 存器中, 导致产生了大量影响性能的访存指令, 由此提出了访存开销更低的                       AES  比特切片表示法. Käsper 等人    [13]
                 考虑  XMM  寄存器的数量, 采用与      Könighofer 类似的比特切片方法优化了       AES  算法的比特切片实现. 苗鑫等人        [31,32]
                 将  SM4  算法的明文数据视为立方体的结构, 提出新的针对               SM4  算法的比特切片表示法. 王闯等人         [33] 提出一种通
                 用的切片分组密码算法模型, 所优化的            SM4  算法在切片形式上与苗鑫等人的方法类似, 但其重点考虑的是减少数
                 据切片过程的开销. 陈晨等人         [14] 针对传统比特切片的访存问题, 设计了基于寄存器的优化方法, 并从指令层面分
                 析了优化前后的内存读取次数和耗时. Adomnicai 等人            [34] 提出针对  AES  算法的固定切片优化方法, 将行移位和列
                 混淆融合, 并利用     ARM  处理器的桶形移位器削减移位运算的开销. 此外, 一些密码算法在设计之初就考虑了比特
                 切片实现友好的性质, 例如        GIFT  算法  [35] 、ASCON  算法  [36] 、FESH  算法  [37] 、TANGRAM  算法  [38] 等. 对于  PRESENT
                 算法, 虽然原始结构不是比特切片实现友好的形式, 但                Reis 等人  [39] 提出了线性层分解方法, 将    PRESENT  算法转
                 变成了易于比特切片实现的形式, 从而可通过比特切片方法进行实现加速.
                    单指令多数据      (single instruction multiple data, SIMD) 指令集是加速密码算法实现的常用技术, 常见的     SIMD
                 指令集有   x86  架构的  SSE  指令集、AVX   指令集和    ARM  架构的  NEON  指令集. Hamburg [40] 利用  Permute 指令加
                 速  AES  算法实现, CBC  模式加密速率能够达到        10.8 c/B (cycles/byte), CTR  模式能够达到  5.4 c/B. Matsuda 等人  [19]
                 使用  AVX  指令集优化    PRESENT  算法和  Piccolo  算法, PRESENT-80/128  达到  5.79 c/B, Piccolo-80  达到  5.69 c/B.
                 Seo  等人  [41] 使用  NEON  指令集优化  LEA  算法, 4  线程并行能够达到  3.2 c/B. Park  等人  [42] 使用  NEON  指令集优化
                 SIMON/SPECK  算法, SIMON-128/128  能够达到  32.4 c/B, SPECK-128/128  能够达到  9.7 c/B, 多线程下分别达到
                 14.3 c/B  和  5.1 c/B. Adomnicai 等人  [43] 采用  S  盒分解方法优化  Skinny-128  算法, 在  ARM  平台达到  127 c/B, 在  x86
                 平台达到   44 c/B. 对于  Banik  等人  [35] 提出的  GIFT  算法, GIFT-64/128  在  AVX2  指令集的优化下能够达到  2.10 c/B.
                 对于  uBlock 算法  [1] , 在使用  x86 平台的  SSE  指令集优化下, uBlock-128/128 算法能够达到  11.8 c/B, uBlock-128/256
                 算法能够达到     17.4 c/B, uBlock-256/256  算法能够达到  13.6 c/B. 高莹等人  [44] 使用  AVX2  指令集优化  uBlock  算法,
                 比设计文档中的实现方法提升了           269%、182%  和  49%.
                    密码算法中所有的算术运算都是在处理器的寄存器上计算, 倘若算法需要使用的寄存器数量大于处理器提供
                 的物理寄存器数量, 则会产生访存开销. 研究者们进行了各种尝试减少访存开销. 在公钥密码算法中, Hutter 等
                 人  [45,46] 和  Seo  等人  [47] 提出新的高精度乘法计算方法, 减少读取指令的条数. 在分组密码算法中, Schwabe 等人          [27] 通
                 过设计寄存器调度算法优化          AES  算法, 减少  S  盒在比特切片下消耗的访存指令; Könighofer      [12] 和  Käsper 等人  [13] 针
                 对算法结构提出了新的比特切片表示法, 减少寄存器使用数量; May                   等人  [17] 在优化  DES  算法时发现, Schaumüller-
                 Bichl [18] 的  S  盒表达式逻辑门个数比  Kwan [16] 的更多, 但使用前者优化的   DES  算法实现速率反而比后者的更快, 他
                 们认为是访存导致了这一反常现象.
                  2   基础知识

                  2.1   uBlock  算法

                    uBlock  是一族分组密码算法, 整体结构是          PX  结构, 根据分组和密钥的比特长度可分为              uBlock-128/128、
                 uBlock-128/256  和  uBlock-256/256, 迭代轮数分别为  16、24  和  24. 图  1  展示了  uBlock  算法的加密轮函数, 加密输
                 入  n  比特明文  X, 每轮迭代中依次计算轮密钥加、S          盒、线性变换      B  和线性变换   PL/PR, 输出前再计算一次轮密
                 钥加. 解密是加密的逆过程, 在此不赘述.
   427   428   429   430   431   432   433   434   435   436   437