了解中間值 - SHA2 - 512
我正在嘗試了解 SHA2 - 512 算法,因此我正在關注此文件,其中包含字元串“abc”的中間值。在,和
t=0
的值很簡單。但是我沒有得到相同的值,這表明我在計算時做錯了f``h``g``e
噸1=H+Σ1(和)+通道(和,F,G)+ķ一世+在一世 $ T_1 = h + \Sigma_1(e) + \text{Ch}(e,f,g) + K_i + W_i $ . 我幾乎可以肯定我已經實施通道 ( ) $ \text{Ch( )} $ 和Σ1() $ \Sigma_1 ( ) $ 正確。我想我的問題可能是加法(反對264) $ \pmod {2^{64}} $ . 我理解每個術語的總和噸1 $ T_1 $ 是一個 64 位的數字。所以我假設我們可以將這些數字轉換為整數並將它們相加(反對264) $ \pmod {2^{64}} $ . 現在得到的數字在二進制中可能不是 64 位長。我們是否添加0 $ 0 $ ’s 在二進製表示的前面使其成為 64 位長?我不確定這是否有幫助,但這裡有一些我得到的二進制值
t=0
(現在我在最高有效位的左側添加零):#Sigma_1(e) 0101000100001110010100100111111110101101111001101000001011010001 #Ch(e,f,g) 0001111110000101110010011000110001111011001001110011110100111011 #T_1 0110100101100101001100111001100011001110110101111110100010100000 #e <- T_1 + d 0000111010110101001010001101001100101101111101010001111110010001
而根據文件,
e
二進制是1100001111010100111010111111110101001000011001010000111111111010
.如果您可以提供包含這些其他功能的中間值的資源,我希望我能弄清楚。否則,如果您能詳細解釋如何獲得正確的值,將不勝感激。如果您希望我提供更多資訊,請告訴我。
假設您真的是指 SHA2-512:
Sigma_1 (e) 0101000100001110010100100111111110101101111001101000001011010001
‘Sigma_1’ 的值不正確;我剛剛檢測了一個已知良好的實現並獲得了第一輪:
s一世G米一個1=9427和33bb5C9dbC一個$$ sigma1 = 9427e33bb5c9dbca $$
也許你有R○噸R $ ROTR $ 操作作為輪班,而不是輪換…
現在,至於你的沉思:
我理解每個術語的總和噸1 $ T1 $ 是一個 64 位的數字。所以我假設我們可以將這些數字轉換為整數並將它們相加(反對264) $ \pmod {2^{64}} $ . 現在得到的數字在二進制中可能不是 64 位長。
實際上,在 SHA-512 中表示值的最自然方式是一如既往地使用 64 位;這些位被解釋為範圍內的值[0,264−1] $ [0, 2^{64}-1] $ ; 通常,msbit 可能恰好為零;我們仍然將其視為 64 位值(因此永遠不需要在開頭或結尾添加 0 - 這些值始終是正確的長度)。
是的,這不是我們計算 RSA 中位數的方式 - SHA-512 不是 RSA。