Algorithm-Design
設計由 CSPRNG 參數化的流密碼是否有趣?
擁有設計由 CSPRNG 參數化的新流密碼會很有趣嗎?即,要實例化流密碼,您只需選擇並插入您選擇的任何 CSPRNG。
流密碼將密鑰和隨機數/IV 轉換為偽隨機比特流(“密鑰流”)。密鑰流可以與明文進行異或以產生密文(加密),或與密文進行異或以產生明文(解密)。因此,流密碼通常定義兩個操作,加密和解密(如果計算密鑰生成,三個操作)。
然而,CSPRNG 要復雜得多。它們維護一個內部狀態,並定義如下操作:
- 設置:根據一些秘密種子值(即熵的初始源)設置內部狀態
- Reseed:將新熵混合到生成器的內部狀態中
- 生成輸出:使用內部狀態產生一定數量的偽隨機位,然後更新內部狀態(使下一個輸出與本次無關)
現在,你的問題:
擁有設計由 CSPRNG 參數化的新流密碼會很有趣嗎?
我認為這會很有趣。我不確定它是否特別實用。
CSPRNG 是為一個非常不同的目的而設計的,它們的實現反映了這一點。回溯阻力和重新播種等功能與流密碼無關。流密碼通常是無狀態的,而 CSPRNG 保持內部狀態。等等。可以從 CSPRNG 創建流密碼,但它確實使設計過於復雜。
然而,CSPRNG 和流密碼確實有一些共同點:它們都將一個小的熵源擴展為偽隨機比特流。這可能是您問題的來源。事實上,由於這種相似性,流密碼和 CSPRNG 之間的想法存在顯著的交叉授粉:
- CTR_DRBG是一個 CSPRNG,它在計數器模式下使用分組密碼(例如 AES),就像如何使用計數器模式中的分組密碼來構造流密碼一樣。
- libsodium 包含一個基於 Salsa20 的 CSPRNG,它是 eSTREAM 流密碼競賽的獲勝者之一。