One-Time-Pad
“重複使用一次墊”是否可以安全地加密諸如“隨機數+ mod”之類的消息?
我想加密包含固定長度隨機數和長模式的消息。即1234564284(像這樣創建123456 +(123456 mod 9931))
我假設如果消息是純粹隨機的,那麼重複使用相同的密鑰不是問題,但是消息總是與 mod 一起給出的事實是否打開了一個洞來找到密鑰?
這是我對您所說的加密過程的理解:
- 你取一個隨機數 $ r $ , 併計算 $ t = r \bmod n $
- 你連接兩個數字 $ r $ 和 $ t $ ,並將連接表示為位串 $ u $
- 然後你對那個位串進行異或 $ u $ 帶有秘密位串 $ s $
你對兩個不同的隨機數做同樣的事情 $ r $ 和 $ r’ $ , 使用相同的值 $ n $ 和 $ s $ .
如果那是正確的,那麼這裡有一種方法可以讓擁有兩個加密字元串的人恢復一個可能的簡短列表 $ r, r’ $ 價值觀:
- 考慮所有可能 $ r $ 值(在您的範例中, $ r $ 是一個 6 位數字,所以這很簡單;不知道你能做多久 $ r $ 在實際情況下)
- 對於每一個這樣的 $ r $ ,計算相應的 $ t = r \bmod n $ , 並將它們組合起來形成位串 $ u $ .
- 異或 $ u $ 用第一個密文創建對應的位串 $ s $ .
- 驗證猜測 $ s $ 通過嘗試用它來解密第二個密文;恢復相應的 $ r’ $ , $ t’ $ 價值觀。如果 $ t’ = r’ \bmod n $ , 然後加 $ r, r’ $ 到合理值的列表。
在您給出的簡單範例中(並且在某種程度上取決於您如何將數字編碼為位串),這將為您提供大約 100 $ r, r’ $ 值,其中之一是正確的。給定 1 或 2 個以上的密文,可以僅將其列出為正確的值。
One time pad(使用秘密位串的地方 $ s $ only once) 是安全的,因為 while 可以重構 $ s $ (基於原始消息可能是什麼),您無法驗證任何可能的 $ s $ 價值。通過重用 $ s $ ,您提供了這樣一種方式,從而失去了您在使用時所擁有的安全保證 $ s $ 只有一次。
有可能設計出更有效的攻擊方法;但是,該方法可能取決於您如何將整數編碼為位串的詳細資訊