伽羅瓦域是抽象代數下的域論分支中的內容,這部分想必很多人都比較熟悉,此處不再贅述。
最近,國密算法中的SM2和SM9已經成為國際標准,其中SM9算法在橢圓曲線離散對數難題的基礎上,添加了若干個雙線性配對難題來保證安全性。
配對的過程中,除去群G1中的元素與SM2算法一樣在素域下之外,群G2中的元素為GFq2域,群GT中的元素為GFq12域。
SM9算法大部分運算都在闊域中進行,而塔式擴張的意義在於將闊域中的元素用基域中的元素進行表示和計算。這里先按照塔式擴張的順序(1→2→4→12)探討一下闊域中的元素計算。
1. (1)
塔式擴張中的(1),就是指基域。在SM9算法中,是素域Fq,其中q是256位BN曲線的基域特征值。
Fq域下的元素運算,與我們日常的加減乘除運算並無差異,略去不談。
2. (2)
塔式擴張中的(2),即域Fq2。這是從素域向二次域的第一次擴張,擴張公式如下:
Fq2[μ] = Fq[μ] /( μ2 - α), 其中,α = -2
即:該次擴張的即約多項式為 x2 - α, α = -2
下面以具體的例子來說明該次擴張。
SM9規范第5部分中,群 G2 的生成元 P2 = (xP2, yP2):
坐標 xP2:( 85AEF3D0 78640C98 597B6027 B441A01F F1DD2C19 0F5E93C4 54806C11 D8806141 , 37227552 92130B08 D2AAB97F D34EC120 EE265948 D19C17AB F9B7213B AF82D65B )
坐標 yP2:( 17509B09 2E845C12 66BA0D26 2CBEE6ED 0736A96F A347C8BD 856DC76B 84EBEB96 , A7CF28D5 19BE3DA6 5F317015 3D278FF2 47EFBA98 A71A0811 6215BBA5 C999A7C7 )
此處,點P2的x軸和y軸均為域Fq2下的元素,且高維在前,低維在后。
按照這種表示順序,此處定義兩個域Fq2下的元素:
X = (a, b)
Y = (c, d)
即:
X = a * μ1 + b * μ0 = a * μ + b
Y = c * μ1 + d * μ0 = c * μ + d
加法和減法計算就是對應維度的數值在素域q下的加和減:
X + Y = (a, b) + (c, d) = (a + c, b + d)
X - Y = (a, b) - (c, d) = (a - c, b - d)
乘法:
X * Y = (a, b) * (c, d)
= (a * μ + b) * (c * μ + d)
= (a * c * μ2 + (a * d + b * c)μ + b * d) mod ( μ2 - α)
= -2 *a * c + (a * d + b * c)μ + b * d
= (a * d + b * c)μ + (b * d - 2 * a * c)
即:
X * Y = (a, b) * (c, d) = (a * d + b * c , b * d - 2 * a * c)
其中,最終結果中的 * 運算均為素域q下的乘法運算。
求逆:
計算 X-1 = (a, b)-1
假設結果為(x, y)
則有,(a, b) * (x, y) = (0, 1)
(0, 1)為域Fq2下的單位元,相當於素域q下的 1。
將上式展開
(a, b) * (x, y) = (a * y + b * x)μ + (b * y - 2 * a * x)
= (a * y + b * x , b * y - 2 * a * x) = (0, 1)
相當於求解二元一次方程。
a * y + b * x = 0
b * y - 2 * a * x = 1
求解x和y的過程省去不說,可以得到求逆操作的結果為
X-1 = (a , b)-1 = ((-a) / (b2 + 2 * a2) , b / (b2 + 2 * a2))
其中相關元素與計算均在素域q下進行。
帶即約多項式值的乘法:
該乘法直接放在這里會有些突兀,后續篇幅會繼續介紹第二次擴張和第三次擴張,到時會對此處設置該乘法一目了然,該乘法為:
X * Y * μ = (a * μ + b) * (c * μ + d) * μ
= (a * c * μ3 + (a * d + b * c)μ2 + b * d * μ) mod ( μ2 - α)
= (a * c * μ * (-2) + (a * d + b * c) * (-2) + b * d * μ)
= (b * d - 2 * a * c) * μ - 2 * (a * d + b * c)
即:
X * Y * μ = (b * d - 2 * a * c , - 2 * (a * d + b * c))
以上便是塔式擴張的第一次擴張后的元素計算公式。
如上可知,擴張的實際作用是將闊域元素使用基域下的元素表示並按照基域下的運算規則進行運算。
SM9算法的群G2中的點加與倍點計算,雖然與SM2的素域下運算公式一致,但實際處理時,所有元素均按照上面的公式在域Fq2下進行。
后面再花兩個篇幅探討第二次擴張2→4和第三次擴張4→12,並推導4次闊域和12次闊域下的元素計算公式。
后續篇幅如下:
伽羅瓦域(有限域)GFq^12上元素的1→2→4→12塔式擴張(2)------第二次擴張