簡述SM3散列算法

SM3是國密算法中唯一的密碼雜湊算法,是一種密碼散列函數(shù)標準,用于替代MD5/SHA-1/SHA-2等國際算法,今天我們就來了簡單解一下。

什么是SM3算法?

SM3采用密碼散列(hash)函數(shù)標準,是在SHA-256基礎(chǔ)上改進實現(xiàn)的一種算法,其安全性及效率要高于MD5算法和 SHA-1 算法,與SHA-256相當(dāng)。

SM3

SM3算法流程

SM3算法結(jié)果為256位,其大體上與SHA256相同,其算法過程如下:

  • 消息填充

SM3的消息擴展步驟是以512位的數(shù)據(jù)分組作為輸入的。因此,我們需要在一開始就把數(shù)據(jù)長度填充至512位的倍數(shù)。數(shù)據(jù)填充規(guī)則和MD5一樣,具體步驟如下:

1、先填充一個“1”,后面加上k個“0”。其中k是滿足(n+1+k) mod 512 = 448的最小正整數(shù)。

2、追加64位的數(shù)據(jù)長度。

SM3

  • 消息擴展

SM3的迭代壓縮步驟沒有直接使用數(shù)據(jù)分組進行運算,而是使用這個步驟產(chǎn)生的132個消息字。概括來說,先將一個512位數(shù)據(jù)分組劃分為16個消息字,并且作為生成的132個消息字的前16個。再用這16個消息字遞推生成剩余的116個消息字。

  • 迭代壓縮

SM3的迭代過程和MD5類似,也是Merkle-Damgard結(jié)構(gòu)。但和MD5不同的是,SM3使用消息擴展得到的消息字進行運算。

初值IV被放在A、B、C、D、E、F、G、H八個32位變量中,整個算法中最核心、也最復(fù)雜的地方就在于壓縮函數(shù)。壓縮函數(shù)將這八個變量進行64輪相同的計算。

  • 壓縮函數(shù)

將計算完成的A、B、C、D、E、F、G、H和原來的A、B、C、D、E、F、G、H分別進行異或,就是壓縮函數(shù)的輸出。這個輸出再作為下一次調(diào)用壓縮函數(shù)時的初值。依次類推,直到用完最后一組132個消息字為止。

  • 輸出結(jié)果

將得到的A、B、C、D、E、F、G、H八個變量拼接輸出,就是SM3算法的輸出。

SM3算法的應(yīng)用場景

在商用密碼體系中,SM3主要用于數(shù)字簽名及驗證、消息認證碼生成及驗證、隨機數(shù)生成等。

SM3

SM3算法的特點

SM3算法作為一款比較優(yōu)秀的密碼散列函數(shù),具備一下幾個特點:

  1. 對于任意給定的消息,SM3可以很簡單的生成散列數(shù)值;
  2. 從任意給定的散列數(shù)值,無法反推出明文消息;
  3. 修改消息,散列數(shù)值必定會發(fā)生變化;
  4. 對于兩個不同的消息,SM3不會給與相同的散列數(shù)值。

免責(zé)聲明:素材源于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪稿。