簡(jiǎn)述SM3散列算法

SM3是國(guó)密算法中唯一的密碼雜湊算法,是一種密碼散列函數(shù)標(biāo)準(zhǔn),用于替代MD5/SHA-1/SHA-2等國(guó)際算法,今天我們就來(lái)了簡(jiǎn)單解一下。

什么是SM3算法?

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

SM3

SM3算法流程

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

  • 消息填充

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

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

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

SM3

  • 消息擴(kuò)展

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

  • 迭代壓縮

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

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

  • 壓縮函數(shù)

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

  • 輸出結(jié)果

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

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

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

SM3

SM3算法的特點(diǎn)

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

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

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