Stream-Cipher

Salsa20 是否保護完整性?

  • November 11, 2017

我正在閱讀分組密碼和流密碼之間的區別。讓我感到震驚的一件事是,像 RC4 這樣的流密碼往往容易受到比特翻轉攻擊,其中在密文中翻轉一點可以預測地改變明文,允許知道明文的攻擊者以任何方式改變它/她希望,在安全的分組密碼中,攻擊者不能在密文中稍微翻轉一點,並可以預測地更改明文塊。

Salsa20 作為一種廣泛使用且安全的流密碼,如果有的話,如何防止這些攻擊?如果沒有,Salsa20-Poly1305 如何保護已知明文的完整性?

Salsa20 本身並不能保護完整性。

Poly1305 保護完整性,因為它是消息驗證碼 (MAC)。MAC 獲取密鑰和消息,並輸出認證標籤。對消息的任何更改都會導致生成的標籤不匹配。只有擁有密鑰的人才能生成標籤,這意味著攻擊者不應該能夠在未檢測到的情況下翻轉比特。

在非常高的層次上,Poly1305 接受一條消息和一個兩部分的密鑰,並將其轉換為一個非常大的多項式(以一個大素數為模)。

$ MAC=(m_{1}r^{n}+m_{2}r^{n-1}\ldots+m_{n}r^{1}+k)\mod p $ , 在哪裡 $ m_1 $ , $ m_2 $ 等是消息的塊,而 r & k 是關鍵。

在 Poly1305 的情況下,質數 p 是 $ 2^{130}-5 $ .

對消息進行編碼 $ M $ 從消息中取出 16 個字節到塊中,將 1 個字節附加到末尾,然後將 17 個字節視為小端數(此過程確保檢測到尾隨零)。

也有一些限制如何 $ r $ 被選中。

不知道 r 和 k 的攻擊者很難計算最終結果,即使他們知道消息的明文。

Loup Valliant 對 Poly1305 的實際工作原理有一個很好的解釋。1當然,DJB 的論文提供了更多細節,儘管它更難理解。2

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