密码学之对称加密体系(1):AES、SM4的 S 盒有限域与复合域算法实现原理


🔥点击进入【硬件安全】社区,查看更多精彩内容🔥

🔥点击查看《硬件安全》系列文章🔥

📢 声明
🥭 作者主页:【摆渡沧桑的CSDN主页】
⚠️ 未经作者允许,禁止转载。
⚠️ 本文为非盈利性质,目的为个人学习记录及知识分享。因能力受限,存在知识点分析不正确的可能。若您参考本文造成了不良后果,本人不承担相关责任。
⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
😄 欢迎大家指出文章错误,欢迎同行与我交流 ~

@[toc]

一、引言

1.1 基于传统查表的S盒实现

本文要讲一下如何实现 AES 和 SM4 的 S 盒实现。
其实,除了我们平时使用查找表实现,如c 语言一个unsigned int Sbox[256] = {…},verilog一个always case xxx:解决问题。而这种查表实现是S盒最基本的实现方法。
本文主要介绍一种较为复杂的S盒实现,可以将 S 盒的实现,并结合线性变换(AES 的 MixColumn,SM4 的 $L$变换)形成 $8\rightarrow 32$的大表 T-Table 进行加速,例如openssl的查表实现。
因此,我们本文将介绍通过逻辑运算的 S 盒实现方法。

1.2 基于逻辑运算的S盒实现

AES 和 SM4 的 S 盒都是由 $GF(2^8)$ 有限域上(有限域又称为伽罗瓦域)的运算进行生成的。可以直接基于其实现方法,对 S 盒进行计算实现。在 AES 和 SM4 的 S 盒生成公式中,均设计在 $GF(2^8)$ 的求逆运算,该运算比较耗时。有限域中求逆运算可以转化幂运算,例如 AES 的 S 盒可以表达为:

该运算定义在$GF(2^8)$上,直接实现同样较为复杂。

还有一种方法,是使用布尔函数对 S 盒进行表达,利用布尔函数进行实现。该方法其实可以看作$GF(2)$上的表达。D. Gligoroski(On Deviations of the AES S-box when Represented as Vector Valued Boolean Function)对 AES 的 S 盒进行了分析,得到其布尔函数表达式,例如,其中第0比特可表示为:
在这里插入图片描述
由此可以看出,布尔函数非常复杂,直接利用布尔函数表达式也不是一个好的思路。

D.CanrightA Very Compact Rijndael S-box一文中,提出一种实现思路:基于复合域进行实现。文章提出该方法实现在资源有限情况下的该类 S 盒的实现方式,后该方法被用于构造掩码实现(抵抗DPA攻击)和bitslice实现上。本文将对这个方法进行介绍。

二、原理

2.1 基本原理

AES 和 SM4 的 S 盒生成都是基于$GF(2^8)$进行构造的,利用逆运算和仿射变换(affine)。
仿射变换本身就能表示成逻辑运算,我们重点关注求逆运算
AES 和 SM4 的表达都是基于多项式基,以 AES 的有限域为例,假设$A$为多项式的根,即:

那么任何一个元素$x$可以表示为
这种做法是将$GF(2^8)$直接看作$GF(2)$的8次扩域。
我们也可以不这么看,将$GF(2^8)$看成$GF(2^4)$的2次扩域,$GF(2^{4})$可以进一步看作$GF(2^2)$的2次扩域,再进一步$GF(2^2)$可以看作$GF(2)$的2次扩域
而$GF(2^8)$的求逆运算,可以通过数学表达式,转换为$GF(2^4)$的求逆和一些乘、加操作。
这些操作可以进一步向下转化。下面我们详细说明一下。

$K = GF(q^n)$为$GF(q)$的n次扩域,$\beta$ 为多项式的根,那么多项式基为
任何一个元素$x$,可以表示为
这也是AES 和 SM4 所采用的基表示方式。
此外,除了多项式基以外,域的表达方式还可以使用正规基进行表达,正规基为${\beta, \beta^q, \beta^{q^2}, \ldots, \beta^{q^{n-1}}}$,正规基使用了多项式的全部根。

2.2 $GF(2^8)$的逆

$GF(2^8)$,可以看作$GF(2^4)$的2次扩域,也就是在$GF(2^4)$上寻找一个不可约二次多项式:
其中,$\tau$ 和 $\upsilon$ 为 $GF(2^4)$ 的元素。
设 $Y$ 为 $r(y)$ 的根,则 $GF(2^8)$ 元素的多项式基为 ${Y, 1}$,正规基为${Y, Y^{16}}$。

#

Canright在文章中讨论了多项式基和正规基两种方式,我们这里只看正规基。对于$GF(2^8)$的元素
求逆:

$\gamma_i$ 和 $\delta_i$ 都是$GF(2^4)$的元素, $gd = 1$,待定系数求解,可得出

在其文内有详细推导方法。
观察系数,其达到的效果就是,$GF(2^8)$的求逆运算,转化成为$GF(2^4)$的乘法、平方和求逆。

可以选择不可约多项式为
也就是 $\tau$ 取1来降低求解复杂度,这样,对$g = \gamma_1 Y^{16} + \gamma_0 Y$的求逆可简化为如下图:
在这里插入图片描述

2.3 $GF(2^4)$的逆

同样,$GF(2^4)$可以看作$GF(2^2)$的二次扩域,也就是在$GF(2^2)$寻找一个不可约二次多项式:

设$Z$ 为该多项式的根,取正规基${Z^4, Z}$。
和$GF(2^8)$计算方法相同,可计算$GF(2^4)$元素
求逆:

其中$\upsilon\delta=1$,待定系数求解,可得出

也可以取$T = 1$降低复杂度,那么在$GF(2^4)$求逆运算如下图所示:
在这里插入图片描述

2.4 $GF(2^4)$的乘法

在$GF(2^8)$求逆时,也涉及到了$GF(2^4)$的乘法。$GF(2^4)$的乘法$\upsilon\delta = (\Gamma_1 Z^4+\Gamma_0 Z)(\Delta_1 Z^4 + \Delta_0 Z)$可按照如下公式计算:

如下图:

2.5 $GF(2^2)$的逆

进一步,$GF(2^2)$可以看作$GF(2)$的二次扩域,在$GF(2)$上的不可约多项式只有
取正规基${W^2, W}$

逆为
其中, $\Gamma\Delta =1$,待定系数求解,可得出

2.6 $GF(2^2)$的乘法

$GF(2^2)$的乘法:

计算如下:

如下图:
在这里插入图片描述

2.7 其他结论

将$GF(2^8)$进行转化,我们还有一些操作未介绍,包括 $\upsilon\gamma^2$、$N\Gamma^2$ 和 $N\Gamma$。这些值可通过选择不同的 $\upsilon$ 和 $N$ 进行简化。文章详细讨论了选取的方法。
直接给结论:

  1. 对于$GF(2^2)$,不可约多项式为
    正规基${W^2, W}$
  2. 对于$GF(2^4)/GF(2^2)$,不可约多项式为
    正规基${Z^4, Z}$,$N(g_1W^2+g_2W)^2 = W^2(g_1W^2+g_2W) = g_1W^2+(g_1+g_0)W$
  3. 对于$GF(2^8)/GF(2^4)$,不可约多项式为
    如此:复合域下,实际上是以表示$GF(2^8)$的一个元素。
    而 S 盒的输入是以多项式基表示进行输入的。要利用复合域进行运算,需要将输入表示进行转换。
    以线性空间的角度看,这复合域表示相当于是给$GF(2^8)$找了一组新基。两组基有如下关系:找到$w^2z^4y^{16}$等在多项式基下的表示,形成矩阵X:计算$X^{-1}$,乘以多项式基下的表示即可得到复合域基下的表示。
    S盒计算完成后,再进行反变换即可。

🔥 精选往期 《硬件安全》系列文章🔥
【算法篇】
密码学之公钥密码体系(1):背包算法
密码学之公钥密码体系(2):RSA算法
密码学之公钥密码体系(3):ElGamal算法
密码学之公钥密码体系(4):Rabin公钥密码方案
密码学之对称加密体系(1):AES、SM4的 S 盒有限域与复合域算法实现原理

【概述篇】
硬件安全技术——概述1-安全威胁和硬件安全技术
硬件安全技术——概述2-5G时代IoT环境下芯片安全风险与挑战
硬件安全技术——芯片安全设计技术1
硬件安全技术——芯片安全设计技术2
硬件安全技术——芯片安全设计技术3
硬件安全技术——芯片安全设计技术4(PUF)


文章作者: Janice
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Janice !
评论
  目录