Symmetric

我應該為每個客戶端使用獨立的對稱密鑰,我應該使用從主密鑰派生的密鑰嗎?

  • April 12, 2017

我有幾個客戶,我從一個中心位置與之通信。所有連接都使用在每個客戶端配置文件中硬編碼的靜態對稱密鑰進行加密。我為每個客戶端使用不同的密鑰,因為有人可能會訪問客戶端的密鑰。在這種情況下,我希望攻擊者無法訪問其他客戶端建立的連接。

到目前為止,我都是通過在鍵盤上隨機輸入字元來手動創建客戶端密鑰。我認為手動創建密鑰不是一個好主意,因為除了繁瑣之外,它還容易出錯並且有些不安全。所以剛才我正在編寫一個密鑰生成器程序,為我創建隨機密鑰。

但與此同時,另一個想法出現在我的腦海中:我可以只有一個主密鑰並從中派生所有客戶端密鑰!例如,假設我的主密鑰是“123456”,我可以像這樣導出第一個客戶端密鑰:

SHA256('123456'|'client1')

那樣行嗎?

是繼續編寫我的密鑰生成器程序並為每個客戶端使用單獨且完全獨立的密鑰,還是從主密鑰中派生所有密鑰更好?

無論我使用什麼方法,我都需要一個中央控制器位置的所有客戶端密鑰,因此如果攻擊者獲得對這個中央位置的訪問權,他無論如何都擁有所有密鑰,因此使用獨立隨機密鑰對我來說似乎沒有任何優勢。

PS:我的萬能鑰匙不是'123456’之類的東西;它真的/足夠強大!

是的,當然,您可以從主密鑰中派生密鑰。這通常用於使用對稱加密原語的方案。是的,包括客戶端的 ID 通常是執行此操作的方法。

SHA-256 不是一個非常安全的 KDF - 但總的來說它可以。不過,您最好使用真正的基於密鑰的密鑰派生函式。目前HKDF風靡一時,它在下面使用HMAC。HMAC 反過來可以使用諸如 SHA-256 之類的安全散列進行配置。

從安全主密鑰開始時,您可以在可用的情況下直接使用 HKDF-expand(跳過 HKDF-extract)。


請注意,運輸安全需要格外小心。通常,您可能希望在完美前向保密(臨時 Diffie-Hellman)或其他從您的客戶端密鑰創建會話密鑰的密鑰派生技術上加粗。您可能還需要一種使用 HMAC 或經過驗證的密碼(如 AES-GCM)的經過驗證的加密形式。

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