Encryption

如何計算初始 RC5 加密參數?

  • February 16, 2021

在此處輸入圖像描述

我從一個小型論文中學習理解 RC5。正如我們在公式中看到的,第 0 輪必須使用 A=A+S

$$ 0 $$,因為循環從 r(round) 1 開始。 我嘗試加法和 OR(按位) 得到答案 DA679BFB 但一直失去,這是我的計算結果。

A = A + S[0]

 = 4B726970 + BF0A8B1D

 = 10A7CF48D


A = A OR S[0]

 = 4B726970 OR BF0A8B1D

 = FF7AEB7D

S Data 是第三階段密鑰在 RC5 上擴展的結果。我真的需要幫助,因為我在這裡被困了 2 天,提前謝謝你。

Plaintext : 4B726970 746F2053 74656761 6E6F
key       : 4B726970 746F6772 616669 
w(blocksize) = 32, r(round) = 12, b(key lenght) = 16

首先:你應該使用加法,而不是 XOR。接下來,如果您使用電腦進行此計算,請確保您將字節處理為 little-endian,並將密鑰填充到您提到的 16 個字節:

4B726970 746F6772 61666900 00000000

現在,您基本上已經自己回答了為什麼沒有得到正確值的問題:

S Data 是第三階段密鑰在 RC5 上擴展的結果。

公式A = A + S[0]是正確的,但正如您所注意到的,混合的有多個階段 $ L $ 和 $ S $ 數組。在第一階段, $ A $ 和 $ B $ 看起來像:

i=1 A= **0xbf0a8b1d** B= **0x5ee7fad**
i=2 A= 0xd88eaf30 B= 0x2a1c93ca
i=3 A= 0xb7dc3e7f B= 0xc47155c4
...

這些是您發布的圖像右側的值。特別是該值0xbf0a8b1d是您一直試圖添加的值。您應該使用的是第三階段的值:

i=1 A= **0x8ef5328b** B= **0x600e18b6**
i=2 A= 0x64aa69d0 B= 0x384a0d6
i=3 A= 0x7a471ae8 B= 0xd5a140fa
...

所以現在,把你的明文單詞0x4b726970添加到0x8ef5328b中,你會得到所需的值0xda679b7b

i=1 A= **0xda679bfb** B= 0xd9198a23 # 在循環開始之前
i=2 A= 0x9637a9a8 B= 0x7e949194
i=3 A= 0x4ec0dda1 B= 0x299ed426
...

我遵循了 Rivest 關於 RC5 的論文,並根據 Python 實現仔細檢查了我的值。我們在這裡不做實現細節,但這應該可以解釋為什麼你無法匹配那個例子。

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