流密碼、XOF、種子擴展器、KDF 等之間的功能差異
這個問題是要求澄清術語。
- 在規範的 XOF 介面中,輸出可以根據需要進行擴展,但是輸入必須是可變長度還是在某些結構中可以是固定長度?
SHAKE{128|256} 是第一個眾所周知的標準化 XOF,在它之前有許多 ad-hoc 構造,例如 OAEP-MGF、AES-CTR、基於 RC4/ChaCha20 的 arc4random() 函式。
- 對於 AES-CTR 和 RC4/ChaCha20,它們在任何意義上也是 XOF 嗎?如果不是,他們嚴格來說是什麼?
- 播種機有什麼作用?它是否需要一個固定/可變長度的位串作為輸入並產生另一個固定/可變長度的位串作為輸出?
- XOF,Seed-Expander,(可選地提出KDF)之間究竟是什麼關係。
在我們開始回答子問題之前,讓我們提出一些背景知識。
海綿結構最初是由Keccak 團隊提出的,作為舊 RadioGatún 雜湊函式的安全證明中的橋接元素。在他們的網頁上,他們將其描述為雜湊函式(var->fix)和流密碼(fix->var)的泛化。
由於 SHAKE-128/256 直接基於海綿結構,我們暫時假設作者打算將 XOF 作為其商標產品 Sponge 的通用術語。
type input output stream cipher fixed-length key variable-length key-stream xof variable-length data variable-length data hash function variable-length data fixed-length digest
所以問題1可以這樣回答:不,這會違反XOF的定義。
問題2:沒有。它們是流密碼,其中兩個使用計數器構造。
如果您在 2018 年 2 月在 Bing 上搜尋“cryptographic seed-expander”,那麼與 Crypto.SE 無關的前幾個結果請參閱 NIST 的後量子密碼學頁面。故事是這樣的:
早在為比賽做準備的早期,NIST 就指定送出者使用 libc rand() 為其 keygen-signing-encrypt 函式獲取隨機源。官方郵件列表上的知名參與者對此提出了抗議。
經過討論,決定將有單獨的隨機性要求 1.) 生成足以滿足給定安全級別的少量密鑰材料,以及 2.) 將密鑰材料擴展為可以從中提取數學對象的更長的位串。
後者後來在 NIST 官方文件中被稱為“種子擴展器”,大致對應於 DRBG。
所以問題 3 可以這樣回答:它做 DRBG/PRNG 所做的事情。DRBG 的介面適用。
我想這樣回答問題4:比較它們是沒有意義的,因為它們的目的不同。而這種目的上的差異也使得它們的程式介面也不同。例如,XOF 函式的典型介面比 DRBG 的介面簡單得多,需要調整的參數也比 KDF 少得多。