接上文:
sm4對稱演算法是乙個分組演算法,用於無線區域網產品。該演算法的分組長度為128位元,金鑰長度為128位元。加密演算法與金鑰擴充套件演算法都採用32輪非線性迭代結構。解密演算法與加密演算法的結構相同,只是輪金鑰的使用順序相反,解密輪金鑰是加密輪金鑰的逆序。此演算法採用非線性迭代結構,每次迭代由乙個輪函式給出,其中輪函式由乙個非線性變換和線性變換復合而成,非線性變換由s盒所給出。其中rki為輪金鑰,合成置換t組成輪函式。
演算法原理
128bit的明文被分為4個32bit的字,記成x0,x1,x2,x3。密文也分為4個字,記成y0,y1,y2,y3,這些明文會經過32輪的迭代加密。
常量:
var ck =[32
]uint32
var fk =[4
]uint32
輪函式:整體的加密函式為:
其中t為乙個合成置換,由非線性變換和線性變換復合而成。
•非線性變換由4個平行的s盒構成,s盒的資料均採用16進製制。
•線性變換公式如下,其中b為非線性變換得到的字
func
processblock
(rk [
]uint32
, in [
]byte
, out [
]byte)r
(x[:])
binary.bigendian.
putuint32
(out[0:
4], x[0]
) binary.bigendian.
putuint32
(out[4:
8], x[1]
) binary.bigendian.
putuint32
(out[8:
12], x[2]
) binary.bigendian.
putuint32
(out[12:
16], x[3]
)}func
r(a [
]uint32
)func
f0(x [
]uint32
, rk uint32
)uint32
func
f1(x [
]uint32
, rk uint32
)uint32
func
f2(x [
]uint32
, rk uint32
)uint32
func
f3(x [
]uint32
, rk uint32
)uint32
func
t(z uint32
)uint32
func
l(b uint32
)uint32
func
tau(a uint32
)uint32
金鑰擴充套件:已知加密金鑰
系統引數(參照上面常量部分)
固定引數(參照上面常量部分)
rki為輪金鑰,輪金鑰由加密金鑰生成。
首先,然後對i=0,1,2,…,31,有
改變換與加密中的t變換基本相同,只是將其中的線性變換改為:
輪金鑰即可求得。
func
expandkey
(key [
]byte
, forenc bool)[
]uint32
}else
}return rk[:]
}func
encround
(x0 uint32
, x1 uint32
, x2 uint32
, x3 uint32
, x4 uint32
, rk [
]uint32
, i int
)uint32
func
decround
(x0 uint32
, x1 uint32
, x2 uint32
, x3 uint32
, x4 uint32
, rk [
]uint32
, i int
)uint32
func
tap(z uint32
)uint32
func
lap(b uint32
)uint32
加密 / 解密:加密最後一輪變換時,輸出為:
最後輸出是加密的反序,解密時只是將輪金鑰的使用順序進行逆向進行。
sm7演算法是一種分組密碼演算法,分組長度為128位元,金鑰長度為128位元。sm7適用於非接觸式ic卡,應用包括身份識別類應用(門禁卡、工作證、參賽證),票務類應用(大型賽事門票、展會門票),支付與通卡類應用(積分消費卡、校園一**、企業一**等)。
國密演算法(三)
接上文 為了降低公開金鑰系統中金鑰和證書管理的複雜性,以色列科學家 rsa演算法發明人之一adi shamir在1984年提出了標識密碼 identity based cryptography 的理念。標識密碼將使用者的標識 如郵件位址 手機號碼 qq號碼等 作為公鑰,省略了交換數字證書和公鑰過程,...
國密演算法介紹以及Fabric國密擴充套件
國密即國家密碼局認定的國產密碼演算法。主要有sm1,sm2,sm3,sm4。金鑰長度和分組長度均為128位。sm1 為對稱加密。其加密強度與aes相當。該演算法不公開,呼叫該演算法時,需要通過加密晶元的介面進行呼叫。採用該演算法已經研製了系列晶元 智慧型ic卡 智慧型密碼鑰匙 加密卡 加密機等安全產...
國密演算法學習
國產密碼演算法 國密演算法 是指國家密碼局認定的國產商用密碼演算法,在金融領域目前主要使用公開的sm2 sm3 sm4三類演算法,分別是非對稱演算法 雜湊演算法和對稱演算法。sm2演算法 sm2橢圓曲線公鑰密碼演算法是我國自主設計的公鑰密碼演算法,包括sm2 1橢圓曲線數字簽名演算法,sm2 2橢圓...