Encryption

將 PRNG 用於流密碼而不是專用算法

  • May 1, 2017

我知道,可以使用一些確定性的 PRNG(如 HASH_DRBG 或 CTR_DRBG)以良好的密鑰材料作為種子來建構流密碼。

與通用 PRNG 相比,使用專門建構的流密碼算法(如 Salsa20 或 RC4 之前過時)有什麼優勢?

我在我的 python 模組中使用 HMAC-DRBG 作為沒有安裝“真正”加密包時的備份。python 2 標準庫提供加密雜湊和 HMAC,但沒有加密原語。

與 AES-CTR/ChaCha 之類的東西相比,HMAC-DRBG 的優勢在於它比在純 python 中實現“真實”設計要簡單得多,而且速度也更快。這是因為加密呼叫的核心是在 C 中執行的,並且只是通過 python 分派 - 在 C 中執行的對 sha512 的兩個呼叫比在純 python 中執行的 AES + 操作模式更簡單、更快。

此外,如果您已經在使用 HMAC-DRBG,那麼創建一個支持經過身份驗證的額外數據的經過身份驗證的方案只需要稍作修改。

雖然它顯然不是最理想的設置,當然也不適合生產使用,但在沒有其他可用的情況下,它可以作為一種糟糕的人工加密算法。由於它不是用於加密數據的官方規定或經過驗證的技術,如果您使用這種技術,密碼學家可能會對您搖擺不定,特別是如果有一天它會導致問題。

它也會相對緩慢。問題是雜湊被設計成在很短的時間內吃掉大量的輸入數據。它們不一定被設計為在短時間內產生大量輸出數據(儘管使用 sha-3 和操作模式,這可能不再一定是正確的;我假設你沒有 sha-3 和它提供的操作模式,否則您將使用它)。

如果您有其他選擇,您可能應該使用它們 - 如果後者可用,則使用替代品(HMAC-DRBG 流密碼)而不是真正的交易(即 AES-CTR)並不是一個明智的決定。

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