在 SHA-256 中添加添加的理由是什麼?
簡短版本:SHA-256 使用加法以及各種按位運算。那是怎麼回事?
我正在閱讀有關 SHA-256 如何工作的描述,其中包括對在算法工作時發生在位塊上的各種內部操作的描述。
作為我習慣的熟悉的“位明智”運算符,它們中的大多數對我來說是有意義的。旋轉、與、異或等。但其中一個對我來說很突出。其中一件事與另一件事不同。
該算法還使用了ADD。位運算符中有一個算術運算符。(最後一個進位被丟棄,因此輸出的大小與輸入的大小相同。)
這對我來說似乎很奇怪。在整個過程中,我們都在處理比特塊,每個比特都具有相同的意義。頓時,這些比特塊變成了數字。位具有重要意義,如果兩個位都為 1,則發生進位。位可以影響他們的鄰居,但只能在一個方向上。
我最初認為 SHA-256 的所有進出位都同等重要,並且具有同等影響結果的能力。現在我想知道是否某些位比其他位具有更大的影響輸出的能力。
這是怎麼回事?
SHA-256 是一種類似 ARX 的算法。ARX 代表加法、旋轉和異或,它描述了算法中使用的操作。(我說類似 ARX 是因為 SHA-256 也使用右移,這不是 ARX。)
ARX 方法很受歡迎,因為通常按位運算在一個欄位中是線性的,而加法在不同欄位中是線性的,但在另一個欄位中它們都是非線性的。這允許使用這些通常非常快的操作(在許多系統上,單個週期)來提供一種既能抵抗線性密碼分析又能抵抗差分密碼分析的算法。使用這種方法的其他算法包括流密碼 ChaCha 和排列 SPARKLE。
SHA-256 被認為具有雪崩效應,其中每個輸入位都會影響每個輸出位。雖然進位確實只有一個方向,但存在旋轉,這意味著更高位可以在操作的後期影響更低位。SHA-256 使用常量來防止固定點為零,這些也提供了 1 位,這些位會影響以後加法的行為。
因此,雖然這是一個很自然的問題,但基於 ARX 的方法已經得到了相當好的研究,並且可以安全地使用,例如在 SHA-256 中。