Key-Derivation
簡單的 RC4 密鑰生成方案
我想詢問您對以下組合主密鑰和隨機數並將結果擴展到完整的 256 字節 RC4 密鑰的方案的意見。
- 主密鑰 $ K_m $ 是長度的預共享秘密 $ M $ 字節
- 隨機數 $ K_n $ 未加密發送並且有長度 $ N $ 字節
- 兩個都 $ K_m $ 和 $ K_n $ 被選為高熵字元串
- 這 $ i $ - 結果密鑰的第一個字節將是 $ K[i] = (K_m[i \bmod M] + K_n[i \bmod N]) \bmod 256 $
字元串的周期 $ K $ 是 $ LCM(M,N) $ ,所以我會選擇 $ M $ 和 $ N $ 這樣 $ LCM(M,N) \ge 256 $ .
這個方案有什麼明顯的問題嗎?
PS:此方案將用於 8 位微控制器嵌入式系統。有限的速度/記憶體使我無法使用更標準的方法。
我不認為這是一個好主意。我不知道有誰仔細分析過它,但它基本上是依靠 RC4 來抵禦一種特定類型的相關密鑰攻擊(可能沒有太多研究過)。
我們知道,通常RC4的密鑰調度算法對相關密鑰攻擊的抵抗力不是很強。例如,連接主密鑰和隨機數並將其用作 RC4 密鑰是一個壞主意。在這種情況下,RC4 並不安全。例如,這正是在 WEP 中造成如此毀滅性安全漏洞的錯誤。我知道這不是你所提議的,但你所提議的讓我想起了那場慘敗,讓我覺得你的提議是有風險的。我想這可能沒問題,但需要大量詳細分析才能確定這一點,我對此表示懷疑。
相反,如果您想在這種情況下使用 RC4,我建議您使用偽隨機函式 (PRF) 來推導密鑰:生成 k = PRF(Km,Nonce),並使用 k 作為該數據包的 RC4 密鑰。但是,這確實需要一個單獨的 PRF 函式:例如,AES-CMAC、SHA1-HMAC 等。我意識到這在 8 位嵌入式微控制器上可能會出現問題。
鑑於您使用的是 8 位微控制器,我懷疑您可能最好不要使用 RC4,而是使用適合嵌入式系統的分組密碼(例如,Skipjack、RC5 等)。在此站點上搜尋,您可以找到有關此類事情的更多資訊。