iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
Security

無趣的密碼學,有趣的加密!系列 第 20

[Day 20] 020 - 雜湊 - Hash(二)

  • 分享至 

  • xImage
  •  

雜湊 - SHA家族

我們來到了目前主流的Hash算法了。

SHA全名為『Secure Hash Algorithm』,字面意思就是安全雜湊演算法。

目前SHA從0~3個版本,而2跟3其實都是安全的,但不同的地方是算法差距蠻大的。

SHA3其實是因為SHA1跟2有很多的相似之處,所以NIST就決定開發完全不同的演算法。

如果有一天SHA2被破解,那SHA3就能替換它,並且保持完全不同的結構,使破解邏輯不會被仿製。

接下來應該會把SHA家族的1、2、3介紹完。


SHA1 與 SHA2

一樣我們搭配論文一起來分析。

Secure Hash Standard (SHS)

接下來我們所使用的圖片都是來自2015年所發布的,Secure Hash Standard (SHS) 文檔,在此標記。

先看圖一:


圖一

能看到除了SHA1之外都是一些200以上的數字,而那些就是SHA2。

在看一些詳細訊息如:

  • Message Size必需要在2^64以內。
  • Message Digest Size 會輸出的長度。
    其他的訊息說起來還好,詳細解說的時候會知道的。

SHA1

SHA1 流程圖二


圖二
圖片來自SHA-1 WiKi

不覺得好像在哪裡看過、而且很熟悉嗎。

沒錯,其實就是借鑑了MD5。

大家熟悉MD5之後,我這邊就快速地講過一些關鍵的參數。


填充(對應MD5的步驟1跟2)

跟MD5一樣,看圖三。


圖三


F函數(對應MD5的步驟4)

然後那個F就是圖四:


圖四

然後圖五就能知道F(x,y,z) = F(b,c,d)


圖五


緩衝容器初始化(對應MD5的步驟3)

然後初始化容器數值為圖六:


圖六


K生成(對應MD5的前置)

那我們簡單的看一下K生成(圖七):


圖七

喔~整個簡單到不行……

在回合數時填入上述的數值。


W處理(對應MD5的步驟2切塊資料跟步驟4)

在看一下W(圖八):


圖八

其實也沒什麼難度就是了。

對了它ROTL的1就是位移一次。


做完全回合後輸出(對應MD5的步驟5)

這邊也一樣如圖九


圖九

輸出就是如圖十


圖十


SHA1 總結

然後SHA1的總覽圖十一,這邊能看到它做80次。


圖十一

SHA1我就快速的帶過,大家應該熟悉MD5之後再來寫這邊,只要改一些參數就好。

所以因為類似,也就被破解了,目前跟MD5一樣是不安全的Hash。

因此我們進入比較重要的SHA2。


SHA2

這邊先說一下,其實SHA2也是SHA1的變體而已。

整體算法的流程其實很多相同的地方,除了提供更高的位元之外,在做演算時有些參數會不同。

也造成了圖一那樣的,Block Size跟Word Size的不同。

就因為這樣我們必需要拆解一下SHA2,並做分類。

  1. SHA-224 和 SHA-256 為一類。
  2. SHA-384、SHA-512、SHA-512/224 和 SHA-512/256為另一類。

我們就 SHA2-256 跟 SHA2-512 來代表這兩類。


SHA2 流程(圖十二)


圖十二
圖片來自SHA-2 WiKi

這邊能看出多了4個黑盒子跟變成了8個緩衝塊。

然後細部上面變動了兩塊緩衝區。

整體來說還是能看出MD5深深的影子。

但是到目前為止還沒有發生偽造跟碰撞就是了。


填充

  1. SHA2-256,圖十三:

    圖十三

  2. SHA2-512,圖十四

    圖十四

圖十三跟MD5、SHA1一樣。
而圖十四來說,其實就是取1024餘數後要等於896。
填充的方式也一樣先填一位元的'1'後填滿'0'直到符合上述條件。


F函數

  1. SHA2-256,圖十五:

    圖十五

  2. SHA2-512,圖十六

    圖十六

應對上流程圖的那些黑箱,

大家可能比較不熟悉的是σ跟SHR吧。

σ是在處理W時會用到的。

SHR其實就是向右位移,但不做循環位移,最左邊就是補'0'。


緩衝容器初始化

這邊就有點尷尬了,我們必需要一個一個跟你說初始化的資料:

  1. SHA2-224,圖十七

    圖十七
  2. SHA2-256,圖十八

    圖十八
  3. SHA2-384,圖十九

    圖十九
  4. SHA2-512,圖二十

    圖二十

這邊應該有發現到,初始資料的長度變化。

沒錯,512的資料是一次做128位元的。


K生成

那我們簡單的看一下K生成(圖六):

  1. SHA2-256,圖二一:

    圖二一

  2. SHA2-512,圖二二:

    圖二二

這邊一樣是K的對應數值,直接做成列表就OK了。

是固定的常數。


W處理

  1. SHA2-256,圖二三:

    圖二三

  2. SHA2-512,圖二四:

    圖二四

這邊就出現了F函數那邊的σ了。

一樣代進去算,然後把資料作相加。


流程

  1. SHA2-256,圖二五:

    圖二五

  2. SHA2-512,圖二六:

    圖二六

其實流程差不多就是這樣。

有了K,有了W,再把資料帶進去計算就OK了。

然後就是重複次數了:

  1. SHA2-256:64次。
  2. SHA2-512:80次。

做完全回合後輸出

這邊就是更新初始容器:

  1. SHA2-256,圖二七:

    圖二七

  2. SHA2-512,圖二八:

    圖二八

輸出的部分比較特殊,一樣每個都要列舉:

  1. SHA2-224,圖二九

    圖二九
  2. SHA2-256,圖三十

    圖三十
  3. SHA2-384,圖三一

    圖三一
  4. SHA2-512,圖三二

    圖三二

更特殊的:

  1. SHA2-512/224:直接取SHA2-512的最左邊的224位元。
  2. SHA2-512/256:直接取SHA2-512的最左邊的256位元。

SHA2 總結

就大家有MD5的經驗來說,這邊的幾個動作其實也都大同小異。

而且發布的標準來說其實也十分的完整就是了,這邊有點像是導讀一樣的(不是一直都是導讀嗎?)。

除了多了幾個向右、向左位移的黑盒子之外,在資料W上也做了一些改變。

但整理來說流程也都差不多,並沒有真的很難的地方。

我想大家應該能理解。

但也是因為很類似MD5,而且應用的都是電腦硬體很擅長的部分,所以能做大檔案跟大資料的Hash。

只是可能要切塊,並且做混入Hash,主要是因為最大的2^64的限制。

但我想解決這個問題並不難就是了。

接下來要講一個完全跟SHA2不同算法的SHA3。

那接下來明天見啦~


參考資料

SHA家族

SHA-1 WiKi

SHA-2 WiKi

Secure Hash Standard (SHS)


上一篇
[Day 19] 019 - 雜湊 - Hash(一)
下一篇
[Day 21] 021 - 雜湊 - Hash(三)
系列文
無趣的密碼學,有趣的加密!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言