Files
GmSSL/SM4_bit_slice.md
2018-05-27 21:37:17 +08:00

15 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#SM4 Bit Slice 实现
SM4算法是一个分组算法。该算法的分组长度为128 比特密钥长度为128 比特。加密算法与密钥扩展算法都采用32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
由于SM4算法在实现的过程中要根据内部状态做查表动作导致其算法的运行时间泄漏了内部状态的值使得基于Cache时间的攻击能够对SM4产生现实性的威胁。因此有必要开发一种运行时间与部状态无关的SM4算法同时为了提升运算能力将SM4算法拆成4 bits运算使得算法在64位的处理器上最多可以支持16组SM4算法同时进行。
## 原理说明
算法结构算法将一个字节的信息按照高位4bit低位4bit分开存储因此1个64寄存器可以保存16个高位或者16个低位信息而一个32位字可以分解成4个高位和4个低位分开保存在8个64位寄存器内。算法的整体结构基于这种存储结构对标准的SM4算法进行改造保证单个SM4加密在算法全过程中只使用4bit宽度的存储位从而在64位寄存器中可以实现16路SM4并行。
S_BOX 拆分实现SM4的S盒由矩阵运算和8次多项式构成的有限域求逆元运算构成S盒的一般实现是根据算法的内部状态值查找内存中表的对应值来实现的不同的状态值查找的时间可能不同这也是cache攻击能够产生效果的原因为了使S盒的查找符合常量时间要求并满足bit slice算法的结构对S盒进行拆分查找过程是输入状态值得4bit高位和4bit低位输出也是4bit高位和4bit低位64位寄存器同样可以满足16路并行查找。查表算法中8bit矩阵运算被分解成4bit内的矩阵运算而8次多项式构成的有限域求逆则按照复合域同构映射的方法先映射到有限域$GF(4^2)$上,在映射到有限域$GF(((2)^2)^2)$上,使得$GF(8)$上的有限域求逆过程,转化成$GF(((2)^2)^2)$上的运算,其求逆运算被降低到了$GF(2)$上的求逆可以用简单的函数实现。经过此方法的分解S盒的查表运算变成一个可以在4bit寄存器内实现运行时间与输入无关64位下可以满足16路并行查表的bit slice算法。
16路并行输入数据为16个分组每个分组为16字节数据要分割成16对64位数据每对64位数据保存16组数据对应字节的高位和低位经过算法计算算法密文以同样的结构输出