是否有任何現有的密碼能夠從 1 位密鑰擴展到一次性密碼?
我們有處理少量熵的密碼,例如用於 AES 的 256 位密鑰;並且我們有一個時間墊用於加密 1:1 熵,例如一個 1GB 文件的 1GB 密鑰,如果你能收集到足夠好的隨機雜訊的話。
現在從理論上講,您會想像有一個通用的密碼類或模型可以從一點熵平滑地擴展到 1:1 的一次性密碼。
如果這樣的算法或密碼已經存在 - 它叫什麼?
一次性密碼與其他固定密鑰密碼非常不同。一次性墊只是一個異或(或模組化添加)它不會混淆任何東西或擴展密鑰,即使是一點點的密鑰重用也是非常有問題的。我們有流密碼,它採用密鑰並產生無限的偽隨機比特流。
也許您所要求的是具有任意密鑰大小的密碼,該密碼具有保證總消息長度小於密鑰大小的完美安全性以及合理密鑰大小的合理安全性。
我可以建議以下構造。獲取密鑰並通過連接複製它以產生天真的無限密鑰。使用每個密鑰塊來加密計數器,就像在 CTR 模式中一樣。
這本身並不能提供完美的保密性。然後,您可以使用以下關鍵塊對每個塊進行異或。當消息至少比密鑰少一個塊時,這將提供完美的保密性。或許可以做得更好。但是這種構造至少會提供安全的 AES CTR。
它被稱為流密碼,具有重新加密功能。如果您將流密碼視為 $ \operatorname{E}_k(m) $ , 簡單地設置 $ \frac{|k|}{|m|} $ 到你想要的比例。然後操作並重複重新鍵入時 $ k $ 用完了。因此,256 位密鑰可能會加密 1024 位消息(0.25 比率)。您甚至可以實現 1:1 的資訊論安全性(一次性完成)。它不是很漂亮,也不是很有效,但是可以工作並且距離無鹽鍵拉伸不到一百萬英里。顯然,您不希望關鍵拉伸算法的內在延遲。這種重新鍵入(重新播種)技術在許多 RNG 設計中很常見,例如 Intel 的 RDRAND 指令、Raspberry Pi 和類似於 *nix 的
/dev/urandom
等。這一切在數學上適用於任何 $ k $ 但請記住,無論 $ \frac{|k|}{|m|} $ 比率, $ |k| $ 實際上應該至少是 128 位。因此,無論輸出長度如何,密碼都需要至少 128 位的內部狀態。即使縮放有效,您也會冒著對較小的重新密鑰進行暴力攻擊的風險。就資訊論安全而言,這可能是誠實的,但會立即引出一個問題,即為什麼不簡單地擁有一個傳統意義上的小型 $ \frac{|k|}{|m|} $ 比率?我會把它掛起來…
但只是為了解決2019 年*“如果你能收集到足夠多的隨機雜訊”*:你可以使用 3000 歐元的商業 TRNG 在不到 10 分鐘內生成 1GB 的熵,並且可以盡可能快地寫入任何 SSD實驗室 TRNG。