sm4


    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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM