Algorithm-Design

了解 SHA-512 如何實現其設計目標

  • May 26, 2018

SHA-2 上的Wikipedia 條目包含一個可用的虛擬碼配方。為了更深入的了解,我從中實現了 SHA-256 和 SHA-512。這很有幫助,但我仍然認為我沒有將我對散列如何工作以及它如何實現其目標的理解結合在一起。

簡而言之,我可以從 SHA-2 串在一起的組件中看到一些非線性的位旋轉和可能的混亂行為,但我錯過了整個算法如何導致可證明地實現雪崩效應或任何類似的東西。

在此處的討論中,發布者傾向於將雜湊輸出本質上視為來自任何輸入消息集的隨機映射,無論它們是否具有任何相關性(例如,它們可能是要散列的隨機消息,或者它們可能來自諸如整數之類的簡單序列從 1 到 1000)。我想知道 SHA-2 的這個屬性是否以及如何被證明或驗證。

到目前為止,這是我的理解:

  • 從素數的平方根和立方根派生的初始散列數據和舍入常數不相關。以這種方式選擇數字是為了證明設計者沒有偏見(或隱藏的後門)。您同樣可以使用的二進制擴展 $ \pi $ 依次在每個常數中。
  • 我看到的 hash 和 round 常量的主要設計目的是,當它們被添加時,它們會將非線性重複旋轉推入更混亂的模式;結合起來,它們基本上確保在重複計算時沒有單個輸入單詞值具有簡單的短循環,例如 Sum $ s0 = (a \ggg 28) \oplus (a \ggg 34) \oplus (a \ggg 39). $ 在每一輪。
  • 一輪中用於初始化工作區的總和似乎具有在每個單詞中“傳播”消息位值的效果(無論是在工作區中,還是在雜湊子組件之一中),據我所知,具體旋轉量的值(在範例中為 28、34、39)不是很重要,除了每個值在 sums/sigmas 之間是不同的,並且它們不會形成彼此模數或與字長模數的短循環。
  • 我可以看到,在輪次中還添加了一些重要的回饋(例如,使用了創建temp1的值h- 如果它沒有以某種方式用於temp1or temp2,它的值將變得無關緊要)。但總的來說,我不知道為什麼總和的結果以給定的特定方式組合在一起。例如,為什麼e在創建過程中被否定ch

我不指望一步就能從這個層次的理解到完全的理解。我也不是 100% 確定上述任何一項。總的來說,我可以看到 SHA-2 如何以揮手的方式發揮它的魔力——我可能會說“它是一個複雜的系統,它使用一些基本算法建構,並具有混沌行為互動”。但我被困在下一個層次。

我如何找出為什麼使案例如ch和的特定配方maj(維基百科文章中選擇的名稱暗示它們在設計中具有意義)?

SHA-2 做了它打算做的事情的證明採取什麼形式?

SHA-2 和 SHA-1 一樣,是一個 ARX 散列函式:也就是說,它使用A ddition、Rotation 和 e X clusive -or 進行位擴散。Khovratovich 和 Nikolić 在他們的論文Rotational Cryptanalysis of ARX中非常簡單明了地解釋了每一個的目的,所以我將在這裡簡單地引用它們:

加法提供擴散和非線性,而 XOR 沒有。雖然擴散速度相對較慢,但它通過軟體和硬體的低加法價格得到補償,因此加法數量相對較高(每字節十個)的原語仍然很快。字內旋轉消除了左右位之間的不平衡(由加法引入)並加速了擴散。

所以沒有“混沌行為互動”,但有位擴散,這就是你在雜湊中想要的。足夠的位擴散稱為“雪崩效應”。消息擴展混合了單詞之間的位,而實際的壓縮函式是非線性出現的地方,使用這些預混合位。

至於你問題的第二部分, $ \operatorname{ch}(a,b,c) $ 是“選擇”函式:當 $ a $ 是 $ \text{true} $ ,結果等價於 $ b $ , 什麼時候 $ a $ 是 $ \text{false} $ ,結果等價於 $ c $ . 所以 $ a $ 充當兩者之間的選擇器 $ b $ 或者 $ c $ . $ \operatorname{maj}(a,b,c) $ 是“多數”函式,取多數值作為最終結果。所以如果兩個或三個變數是 $ 1 $ ,那麼結果是 $ 1 $ ; 否則,結果是 $ 0 $ . 而且通常還有 $ \operatorname{par} $ 函式,它是“奇偶校驗”,並在操作數之間使用 XOR。

這些函式中的每一個的真值密度都是 50%。換句話說,給定完全隨機的值 $ a $ , $ b $ , 和 $ c $ , 你有 50% 的機會獲得 $ 1 $ 或者 $ 0 $ 結果。

引用自:https://crypto.stackexchange.com/questions/15953