我們來到了目前主流的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 流程圖二
圖二
圖片來自
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也是SHA1的變體而已。
整體算法的流程其實很多相同的地方,除了提供更高的位元之外,在做演算時有些參數會不同。
也造成了圖一那樣的,Block Size跟Word Size的不同。
就因為這樣我們必需要拆解一下SHA2,並做分類。
SHA-224 和 SHA-256 為一類。
SHA-384、SHA-512、SHA-512/224 和 SHA-512/256為另一類。
我們就 SHA2-256 跟 SHA2-512 來代表這兩類。
SHA2 流程(圖十二)
圖十二
圖片來自
SHA-2 WiKi
。
這邊能看出多了4個黑盒子跟變成了8個緩衝塊。
然後細部上面變動了兩塊緩衝區。
整體來說還是能看出MD5深深的影子。
但是到目前為止還沒有發生偽造跟碰撞就是了。
SHA2-256,圖十三:
圖十三
SHA2-512,圖十四
圖十四
圖十三跟MD5、SHA1一樣。
而圖十四來說,其實就是取1024餘數後要等於896。
填充的方式也一樣先填一位元的'1'後填滿'0'直到符合上述條件。
SHA2-256,圖十五:
圖十五
SHA2-512,圖十六
圖十六
應對上流程圖的那些黑箱,
大家可能比較不熟悉的是σ跟SHR吧。
σ是在處理W時會用到的。
SHR其實就是向右位移,但不做循環位移,最左邊就是補'0'。
緩衝容器初始化
這邊就有點尷尬了,我們必需要一個一個跟你說初始化的資料:
SHA2-224,圖十七
圖十七
SHA2-256,圖十八
圖十八
SHA2-384,圖十九
圖十九
SHA2-512,圖二十
圖二十
這邊應該有發現到,初始資料的長度變化。
沒錯,512的資料是一次做128位元的。
那我們簡單的看一下K生成(圖六):
SHA2-256,圖二一:
圖二一
SHA2-512,圖二二:
圖二二
這邊一樣是K的對應數值,直接做成列表就OK了。
是固定的常數。
SHA2-256,圖二三:
圖二三
SHA2-512,圖二四:
圖二四
這邊就出現了F函數那邊的σ了。
一樣代進去算,然後把資料作相加。
SHA2-256,圖二五:
圖二五
SHA2-512,圖二六:
圖二六
其實流程差不多就是這樣。
有了K,有了W,再把資料帶進去計算就OK了。
然後就是重複次數了:
SHA2-256:64次。
SHA2-512:80次。
做完全回合後輸出
這邊就是更新初始容器:
SHA2-256,圖二七:
圖二七
SHA2-512,圖二八:
圖二八
輸出的部分比較特殊,一樣每個都要列舉:
SHA2-224,圖二九
圖二九
SHA2-256,圖三十
圖三十
SHA2-384,圖三一
圖三一
SHA2-512,圖三二
圖三二
更特殊的:
SHA2-512/224:直接取SHA2-512的最左邊的224位元。
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)