Stream-Cipher

如何在 Libsodium 中找出 Xchacha20 的塊大小?

  • January 6, 2021

我聽說 Xchacha20 的工作原理就像一個分組密碼,即使它想加密一個字節,它也會完成至少一個分組的工作。所以從技術上講,它的工作原理類似於計數器模式下的分組密碼。

我想知道這個塊的大小,它代表了Xchacha20可以做的最小工作量。

如何發現?特別是在 Libsodium。我想看到它(而不是盲目地相信它)。知道在哪裡看嗎?

TL;博士; ChaCha 的塊大小是 64 字節,即 512 位。


Xchacha20在不改變ChaCha20功能的情況下擴展了ChaCha20的nonce。Xchacha20 的目標是將 ChaCha20 的 128 位 nonce 大小擴展到 192 位,以便生成隨機 nonce 以在長壽命密鑰中安全使用,而不必擔心 nonce 衝突。

第 2.3 節中的RFC 7539明確提及。

2.3. ChaCha20 塊功能

ChaCha 塊函式通過執行多個四分之一輪來轉換 ChaCha 狀態。

ChaCha20 的輸入是:

  • 一個 256 位密鑰,被視為八個 32 位 little-endian 整數的串聯。
  • 一個 96 位隨機數,被視為三個 32 位小端整數的串聯。
  • 一個 32 位塊計數參數,被視為 32 位小端整數。

輸出是 64 個看起來隨機的字節。

ChaCha,Salsa20論文的變體;

本文假設讀者熟悉 Salsa20,重點介紹從 Salsa20 到 ChaCha 的變化

在介紹中

Salsa20/20 流密碼將 256 位密鑰擴展為 $ 2^{64} $ 隨機訪問的流,每個包含 $ 2^{64} $ 隨機訪問 $ 64 $ 字節塊。

The Salsa20 family of stream ciphers paper 寫得更清楚;

Salsa20 以 64 字節(512 位)塊生成流


關於這個的一些話

我聽說 Xchacha20 像分組密碼一樣工作

Salsa 和 ChaCha 都是基於偽隨機函式 (PRF) 的流密碼。

一個 PRF 定義在 $ (K,X,Y) $ : $$ F: K \times X \mapsto Y $$這樣就存在有效的算法來評估 $ F(k,x) $

他們使用 CTR 模式將 PRF 轉換為流密碼。CTR 模式是 Whitfield Diffie 和 Martin Hellman 在 1979 年為 PRF 設計的;

相比之下,分組密碼是一個排列家族,預計是一個偽隨機排列 (PRP)。一個 PRP 定義在 $ (K,X) $ : $$ E: K \times X \mapsto X $$ 這樣:

  1. 存在有效的算法來評估 $ E(k,x) $
  2. 功能 $ E( k, \cdot ) $ 是一對一的(因此是排列)
  3. 存在高效的反演算法 $ D(k,x) $

請注意,PRP 也是 PRF。

CTR 模式不需要函式的逆運算,因此可以使用更多範圍的函式。如果我們將輸出空間固定到 PRF 的相同空間中,則有 $ 2^{n^{2^n}} $ PRF 和 $ 2^n! $ PRP 來自 $ n $ -bit 輸入空間 $ n $ -位輸出空間。

如果您需要在 CTR 模式下使用 PRP,那麼您需要注意 PRF-PRF 切換引理。,貝拉爾等。al, 97 提供了安全界限。

與按時鐘輸出比特的傳統流密碼相比,Salsa 和 ChaCha 都通過設計在每次加密時產生長輸出,並且仍然是流密碼。

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