Authenticated-Encryption
為什麼 NaCl 的 xsalsa20-poly1305 的 crypto_secretbox 要求前 32 個字節為零?
NaCl 網站說這是 API 的要求,但它似乎不僅僅是 API 問題。這意味著第一個 salsa20 塊的前 32 個字節被有效地忽略。我在文件中沒有看到任何解釋此原因的內容。
忽略第一個 salsa20 塊的前 32 個字節是否會以某種方式提高安全性?
XSalsa20 輸出的前 32 個字節用作一次性 MAC Poly1305 的密鑰。Poly 1305 需要為每條消息創建一個新的 32 字節密鑰,使用部分密鑰流是獲取這些密鑰的自然方式。
要求這些空字節使 API 的實現更容易。實現者只需在零填充輸入緩衝區上呼叫 XSalsa20 一次,接收 Poly1305 密鑰並加密消息。
如果沒有填充輸入,則必須將對 XSalsa20 的呼叫拆分為多個呼叫,一個到 HSalsa,兩個到 Salsa20 和一些複製。這有點煩人,並且會對性能造成輕微影響。
IMO 要求零填充是糟糕的 API 設計。這是一個不應向使用者公開的實現細節。API 的設計應該考慮到消費者,而不是實現者。