國密演算法(二)

2021-10-03 14:11:08 字數 2600 閱讀 5835

接上文:

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橢圓...