一個密碼來統治他們所有人?
我從 Dan Boneh 的課程中了解到,許多加密原語(prngs、流密碼、雜湊、hmac、密鑰派生函式)可以僅從一個分組密碼或 PRF 建構。
例如,sha-1散列基於可用於製作分組密碼 SHACAL-1 的壓縮函式。更一般地說,來自使用 Davies-Meyer 構造的分組密碼的雜湊。
有一個問題SHACAL-2 與 AES 作為安全雜湊(又名 SHA-256)的底層分組密碼,它解釋了為什麼 AES 不適合作為雜湊基礎的一些要點。
**我的問題是:**是否有適合構造其他原始性的單個分組密碼或 PRF(或其他基本原語)?
為此,我查看了 simon 和 spec ciphers (PDF),但他們說:
我們沒有努力防範開放密鑰模型中的攻擊,Simon 和 Speck 也沒有被評估用作雜湊值。
這個問題是基於意見。至少有點。但是可以選擇的變體是相當多的。
至於一般構造,海綿構造(如 Keccak / SHA-3 使用)非常通用,可用於多種用途,例如散列、身份驗證(=“MAC’ing”)、經過身份驗證的加密(參見“通用概述First Round CAESAR Candidates for Authenticated Encryption”,Farzaneh Abed、Christian Forler 和 Stefan Lucks 於 2015 年 3 月 14 日版本)。
當然,也可以使用這樣的構造或已經存在的構造來構造其餘部分,PRNG 可能在某些時候使用散列,流密碼可以是反模式的散列,HMAC 可以使用基於海綿的散列,KDF 可以基於海綿-基於散列函式,使用任意輸出大小並調整其他參數的輸入。
現在,如果您正在專門尋找一種可以在各種模式下輕鬆使用的密碼/雜湊函式,我認為(以及其他人以及評論建議),Threefish是選擇的密碼。Threefish 被設計為雜湊函式的建構塊,這意味著考慮了所有已知的攻擊場景,例如標準攻擊和相關密鑰攻擊。Threefish 及其相關的散列函式 Skein 也可以用於多種模式:
- Threefish 當然可以用作標準分組密碼。(也許將調整設置為 $ 0 $ ?)
- Skein 是一種圍繞 Threefish 的輕量級結構,可用作標準散列函式。
- Skein-MAC 是 Skein 的一種操作模式,是一種可證明安全的 MAC(如 HMAC)。
- Skein-HMAC,Skein 當然也可以在標準 HMAC 結構中執行。
- Skein-KDF 是 Skein 的一種操作模式,是 Skein 的一種高度可定制的變體,利用 Skein 可以輸出任意大小的摘要這一事實。
- 三魚流密碼。Threfish 可用作 CTR 模式下的標準流密碼。
- 絞線流密碼。Skein 有一種操作模式,允許其輸出用作流密碼板。
- Skein-PRNG 是在原始 Skein 論文中提出的。我建議不要使用它,而是在 Fortuna 中使用 Skein 和 Threefish,而不是 AES 和 SHA-256。
- Skein-PBKDF 是一種類似於 PBKDF2 的 Skein 操作模式。我建議不要使用它,而是使用 scrypt、bcrypt 或任何 PHC 獲獎者(待宣布)。一些決賽選手允許使用任意散列函式,其中可以使用 Skein。
- Threefish 認證加密有點棘手,但有一些方案使用可調整的分組密碼(如 Threefish)來建構快速 AEAD 密碼。