2012年3月,國家密碼管理局正式公布了包含SM4分組密碼算法在內的《祖沖之序列密碼算法》等6項密碼行業標准。與DES和AES算法類似,SM4算法是一種分組密碼算法。其分組長度為128bit,密鑰長度也為128bit。加密算法與密鑰擴展算法均采用32輪非線性迭代結構,以字(32位)為單位進行加密運算,每一次迭代運算均為一輪變換函數F。SM4算法加/解密算法的結構相同,只是使用輪密鑰相反,其中解密輪密鑰是加密輪密鑰的逆序。SM4算法的整體結構如圖所示:
SM4算法結構圖:
2. 參數產生
字節由8位2進制數表示,字由32位2進制數表示;
S盒為固定的8bit輸入和輸出置換;
加密密鑰長度為128bit,表示為MK=(MK0,MK1,MK2,MK3),其中MKi (i=0,1,2,3)為字。輪密鑰表示為rki(i=0,1,2.....,31)為字。FK=(FK0,FK1,FK2,FK3)為系統參數,CK=(CK0,CK1,.....,CK31)為固定參數,都為字。
3. 輪函數
整體的加密函數為:
其中T為一個合成置換,由非線性變換和線性變換復合而成。
非線性變換由4個平行的S盒構成,S盒的數據均采用16進制。
線性變換公式如下,其中B為非線性變換得到的字
4. 密鑰擴展
已知加密密鑰MK=(MK0,MK1,MK2,MK3),系統參數FK=(FK0,FK1,FK2,FK3),固定參數CK=(CK0,CK1,.....,CK31).
rki為輪密鑰,輪密鑰由加密密鑰生成。
首先,
然后對i=0,1,2,...,31:
改變換與加密中的T變換基本相同,只是將其中的線性變換改為:,由於系統參數個固定參數是已知的,輪密鑰即可求得。
5. 加密/解密過程祖沖之序列密碼
加密最后一輪變換時,輸出為:
最后輸出是加密的反序,解密時只是將輪密鑰的使用順序進行逆向進行。
————————————————
版權聲明:本文為CSDN博主「10點43」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/cg129054036/java/article/details/83016958