一种基于Xiao-Lai方案的动态SM4白盒算法
1 白盒密码概述
白盒密码是一种特殊的密码学技术,旨在保护加密算法在不可信环境中的安全性,最早由Chow等人提出[1]。与传统的黑盒模型不同,白盒密码假设攻击者可以完全访问算法的内部细节,包括密钥和中间计算结果。其主要应用场景包括软件保护、数字版权管理(DRM)和嵌入式系统等,确保即使攻击者能够逆向工程或动态调试,也无法轻易提取密钥或破坏加密过程。白盒密码通过复杂的数学变换和混淆技术,将密钥与算法深度融合,从而在开放环境中实现高强度的安全防护。
2 方案设计
2.1 白盒密码原理
白盒密码的原理是通过混淆技术在关键密码操作的输入和输出添加置乱编码,并封装成查找表的形式,隐藏关键的加密逻辑和数据。例如对于一个从m比特到n比特的映射F,分别使用一个从m比特到m比特的随机双射G(例如可逆仿射变换)和一个从n比特到n比特的随机双射H对映射F的输入和输出进行混淆:
F′=H∘F∘G−1.
分组密码可以看作是由一系列串行的子部件(例如AES-128中的轮密钥加、S盒替换等)构成,在白盒实现中需要分别对每一个子部件进行混淆。每一个部件的输入置乱编码应是上一个部件的输出置乱编码的逆。例如对于一个从m比特到n比特的映射F和一个从n比特到p比特的映射K,K∘F应被混淆为:
K′∘F′=(P∘K∘H−1)∘(H∘F∘G−1)
其中P是一个从p比特到p比特的随机双射。分别将(H∘F∘G−1)和(P∘K∘H−1)固化成查找表,将F和K的逻辑隐藏。值得注意的是,在上述串行子部件“头”“尾”两端的置乱编码为外部编码(external encoding)。例如在本例中,需要使用G对输入进行编码,使用P−1对输出进行解码。
2.2 Xiao-Lai方案
Xiao-Lai方案 [2] 使用可逆仿射变换作为置乱编码,将轮函数F(Xi,Xi+1,Xi+2,Xi+3,rki)执行过程分为三个部分,分别进行Xi+1,Xi+2,Xi+3三个状态的异或、原SM4算法中的非线性变换τ与线性变换L,以及Xi与X′′的异或操作。
(1) 计算Xi′=Xi+1⊕Xi+2⊕Xi+3
在计算之前需要消去上一个变换中的输出置乱编码,随后添加新的置乱编码Ei。本阶段的计算过程可以表示为:
Xi′=Ei∘Pi+1−1[Xi+1]⊕Ei∘Pi+2−1[Xi+2]⊕Ei∘Pi+3−1[Xi+3],
其中Pi+j(j=1,2,3)是32比特到32比特的随机可逆仿射变换:
Pi(x)=Ai⋅x⊕ai,
其中Ai为GF(2)