Diffie-Hellman

X25519+XSalsa20+Poly1305的組成

  • May 21, 2022

在正確的實現中X25519+XSalsa20+Poly1305,我認為Poly1305消息認證碼是密鑰+明文的函式,我認為我的理解是正確的。

有了這樣的結構,在接收方,是否需要提供一些額外的秘密來檢查 MAC/標籤的有效性?

我想我的問題源於使用其他原語,例如HMAC SHA-256,在哪裡驗證經過身份驗證的雜湊,您需要共享一個額外的秘密。

在 的情況下X25519+XSalsa20+Poly1305,是否只需要解密並簡單地驗證X25519ECDH 密鑰協議的結果(即沒有額外的 MAC 秘密)?

Poly1305 本身要求其密鑰只能用於為單個消息生成標籤。這意味著當按預期使用 Poly1305-AES(或其他基於 Poly1305 的認證加密算法)時,即使重複使用密鑰,每條消息的 Poly1305 認證密鑰也會不同。

但是,只要不為給定密鑰重複使用相同的隨機數,各種基於 Poly1305 的經過身份驗證的加密算法(比如 Poly1305-*)就支持密鑰重用。nonce 是一個非秘密(一次性)值,因此可以與密文一起發送。

Poly1305-* 為每條新消息生成一個新的 Poly1305(身份驗證)密鑰。它通過使用(經過身份驗證的加密)密鑰和每個消息的隨機數來派生一次性 Poly1305 密鑰來實現這一點。只要發送方和接收方都使用相同的密鑰和相同的隨機數,雙方就有可能派生出一個商定的每條消息 Poly1305(身份驗證)密鑰。

在 Poly1305-AES 中,該密鑰基本上是通過提取 AES CTR 模式密鑰流的前 16 個字節得出的。隨後的密鑰流塊與明文進行異或。請注意,用於每個消息 Poly1305(身份驗證)密鑰的位和用於消息加密的位是密鑰流的非重疊部分。因為密鑰流是偽隨機的,所以每個消息派生的 Poly1305 預計是唯一的。

因為這是發送方和接收方就每個消息密鑰達成一致的安全方式,所以不需要 API 向使用 API 的程序員公開每個消息密鑰。他們只看到一個鍵和隨機數的參數。


(API 甚至可以進一步抽像出隨機數,每次呼叫加密函式時隨機生成一個隨機數,並將其與密文和 MAC 標記靜默連接。相應的解密函式也可以靜默地從其預期位置讀取隨機數組合隨機數/密文/標籤字元串,除了共享密鑰、組合密文和明文外,從不向程序員公開任何內容。)

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