Lightning-Network

chacha20 流密碼和用於消息驗證碼的 poly1305 有什麼特別之處?

  • February 28, 2019

我目前正在嘗試剖析閃電網路的低級加密協議,我意識到在很多地方都在使用 chacha20。我嘗試在維基百科的文章中閱讀它,它說:

這為 Salsa20 和 ChaCha 提供了不同尋常的優勢,即使用者可以在恆定時間內有效地尋找密鑰流中的任何位置。Salsa20 在現代 x86 處理器上的軟體中提供每字節約 4-14 個週期的速度,以及合理的硬體性能。它沒有專利,Bernstein 編寫了幾個針對常見架構優化的公共領域實現。

雖然我看到後面關於許多架構沒有獲得專利和優化的部分很好,但我沒有得到引用的第一句話。可以在恆定時間內有效地尋找密鑰流中的任何位置是什麼意思?

chacha20 流密碼和用於消息驗證碼的 poly1305 有什麼特別之處?

這種組合併沒有什麼特別之處。它只是兩種結構的組合(ChaCha20 用於流密碼,Poly1305 用於 MAC),它們的設計目標相似:

  • 易於在軟體中編寫正確的實現
  • 針對在通用硬體上執行的軟體實現的性能進行了優化。這與許多針對硬體實現進行了優化但在軟體方面並不理想的密碼原語形成對比。這主要是由於ChaCha20中使用了整數加法運算。
  • 128 位安全級別。

此外,密鑰派生是非正式標準化的,允許使用單個密鑰進行加密和身份驗證。讓現實世界的構造(例如 OpenSSH)使用這種構造可以增強對安全性的信心。

可以在恆定時間內有效地尋找密鑰流中的任何位置是什麼意思?

假設您獲得了 n GiB 的傳入加密數據,但由於某種原因,您只對最後 1 MiB 感興趣。使用一些密碼,您需要做 O(n) 工作來“跳過”第一個 n GiB。與大多數流密碼一樣,ChaCha20 允許以相同的工作量解密任何一個 MiB,而不管其位置如何 - 本質上是為任意位置(至少與 64 字節邊界對齊)導出密碼輸出,其工作量與順序解碼一樣多。

引用自:https://bitcoin.stackexchange.com/questions/84953