One-Time-Pad
如何使這個密碼變得強大?
假設我有一個任意的 256 位數 $ m $ 另一個秘密號碼 $ k $ 具有相同的位長,然後我將它們都以 256 位素數為模相乘 $ p $ 要得到 $ c $ 如下: $$ c = (m\cdot k) \mod p $$ 有什麼辦法可以得到 $ m $ 不知不覺回來 $ k $ ?
任何人都可以對此進行更多澄清,還請向我解釋為什麼我的範例可以被攻擊者破壞?
密碼系統加密明文 $ m $ 作為密文 $ c \gets (m\cdot k) \bmod p $ 在哪裡 $ k $ 是密鑰,並且 $ p $ 是一個素數。(默默地)假設 $ 0<m<p $ 和 $ k\bmod p\ne 0 $ ; 否則解密 $ m \gets (c\cdot k^{-1}) \bmod p $ 不可能。沒有被告知,最重要的是:是 $ k $ 只用過一次,還是重複使用?
- 曾經:系統在理論上是資訊安全的,這是它所能得到的最好的,但不是學術和實際定義的密碼。它就像一個一次性鍵盤,從傳輸密鑰的角度來看很不方便,之後使用起來也很不方便。
- 重用:系統是一個密碼,但很容易找到(一個有效的等價物 $ \hat k $ 的) $ k $ 從一個已知的對 $ (m,c) $ , 每 $ \hat k \gets (c\cdot m^{-1}) \bmod p $ ; 然後破譯其餘的。這低於至少自Kerckhoffs以來對良好加密貨幣的預期。
沒有無法改進的糟糕加密:如果我們使用RSA 中的OAEP 填充將消息轉換為 $ m $ ,並在解密時撤消它,我相信該組合成為可證明安全的 IND-CPA(可能是 IND-CCA2)對稱密碼。但是我們有更簡單和更有效的方法。