Encryption

PRG 是否比 AES 或任何其他加密標準更昂貴?

  • February 6, 2021

我知道有許多加密標準需要一個密鑰,有時是一個 IV 來生成密文(最突出的是 AES)。這些標准通常涉及多輪加法和乘法。但是,使用 OTP 比這容易得多。你用你的墊子對明文進行異或,這是計算方面的唯一要求。但是,OTP 帶有與明文一樣長的密鑰流的問題。這個密鑰流應該是隨機的。我的問題是,這種隨機性是否比正在使用的加密標準更昂貴?為什麼我們不在每種情況下都使用 OTP?缺點是什麼?

假設我負擔不起使用加密算法的費用,但我有一個幾乎是隨機的數據流。如果我將其用作 OTP(我知道這不是完全隨機的),我會犧牲什麼作為回報?可以做些什麼來從這個任意數據流中獲得最佳的偽隨機特徵,使其盡可能地成為 OTP?

一次性填充需要一個真正的隨機序列,該序列與您要加密的材料一樣長。如果你有一個隨機序列,那麼你就沒有一次性密碼:你有一個流密碼。如果您有一個“幾乎隨機”的數據流,那麼您沒有一次性填充,您有一個損壞的流密碼。

具體來說,如果近乎隨機的序列不均勻,則意味著存在偏差:某些位的排列比某些其他的更有可能。每當這些排列與明文中的模式對齊時——例如,英文文本包含E多於J,大多數語言中的文本包含的空格比任何其他字元都多,HTML 往往在每個字元>之後都有一個<,……——明文中的模式變得明顯在密文中。因此,某些模式在密文中出現的頻率高於偶然性,它們將揭示明文中的模式。

要從不完全一致的隨機源生成密碼安全的隨機序列,您需要將此隨機源傳遞給密碼安全的偽隨機生成器。建構偽隨機生成器最便宜的技術之一是在稱為CTR_DRBG的結構中使用加密算法,例如 AES 。如果您只想加密一條消息,那麼使用 AES-CTR 加密消息比使用 AES-CTR_DRBG 建構密鑰流並使用該密鑰流加密消息更簡單、更便宜。

此外,一次性便箋無助於消息的真實性。如果消息在傳輸過程中被修改,則無法檢測到它。加密算法可以和認證算法結合使用,兩者一起做的成本低於完全獨立做兩者的成本。計算成本僅略少,但程式碼大小或門數的成本要少得多。例如,一旦你有了 AES 分組密碼,只需要一點額外的工作就可以建構一個經過身份驗證的加密模式,例如 GCM 或 CCM。

將您的問題提煉為以下兩個要點:-

為什麼我們不在每種情況下都使用 OTP,有什麼缺點?

直接導致為什麼不是每個人都使用一次性密碼本進行加密?我不會增加混亂,但這個問題可能會提供一些見解。它還處理身份驗證/延展性問題。

我有一個幾乎隨機的數據流

然後用它來播種 CSPRNG。為什麼一次性密匙的密鑰分配必須是真正隨機的,為什麼一次性密匙的密鑰必須均勻分佈?說明為什麼你不應該使用它。如果你的系統有能力儲存一個大的 one time pad,它可能有足夠的計算能力來執行某種形式的 CSPRNG。有ChaCha派生的實現將執行在 Arduino 級別。只需確保您的原始熵足夠,通常為 128 位或更多。這可能需要對原始數據進行一些壓縮/折疊,以適應您應該使用的 CSPRNG 的種子大小。

在許多方面,這是您面臨的最困難的部分,因為數據的準確熵測量很棘手。您顯然希望避免 1kbit 數據流僅具有幾位熵的情況,因為它是純算術生成的。

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