Probabilistic-Encryption

如果使用機率加密算法,解密如何返回正確的消息?

  • June 8, 2018

給定一把鑰匙 $ k $ 和一個明文 $ p $ ,確定性加密算法將返回密文 $ c_1 $ . 在第二次試驗中,我執行相同的密鑰和明文 $ p $ 通過加密算法得到密文 $ c_2 $ 從一審開始。 $ c_1 $ 和 $ c_2 $ 是等價的,所以執行解密算法 $ c_1 $ 和 $ c_2 $ 兩者都返回 $ p $ .

但是,如果使用機率加密代替加密 $ p $ ,算法會執行兩次,返回兩個不同的密文 $ c_1 $ 和 $ c_2 $ .

如何 $ Dec(c_1) = p $ 和 $ Dec(c_2) = p $ ?? 如果 $ c_1 $ 和 $ c_2 $ 不同,解密應該返回不同的結果嗎?

在機率加密方案中,對於每個明文都有不止一個可能的密文。

這是一個例子——省略了很多與你的問題無關的細節,所以不要拿這些剪刀,試著在家裡用這個來跑!

收件人知道秘密 ~256 位數字 $ r $ 基點的倍數 $ B $ 必須添加到自身以產生公共點 $ R = B + B + \cdots + B = [r]B $ 在一些標準橢圓曲線上,比如 Curve25519。(計算的捷徑 $ [r]B $ 所以你只需要做幾千次算術運算,而不是一個令人難以置信的難以想像的數字。)

隱藏消息 $ m $ 使用公共點 $ R $ , 發件人:

  1. 選擇一個秘密的 ~256 位數字 $ s $ 均勻隨機;
  2. 添加 $ B $ 對自己 $ s $ 次獲得 $ S = [s]B $ ;
  3. 添加 $ R $ 對自己 $ s $ 次獲得 $ [s]R $ ;
  4. 計算 $ k = H([s]R) $ ,密鑰;
  5. 計算 $ c = \operatorname{crypto_secretbox_xsalsa20poly1305}(k, 0, m) $ , 對稱密鑰下的認證密文 $ k $ 和隨機數 0;和
  6. 傳輸 $ (S, c) $ 給收件人。

收件人,在收到 $ (S, c) $ , 然後:

  1. 計算 $ [r]S = [r\cdot s]B = [s\cdot r]B = [s]R $ ;
  2. 計算 $ k = H([r]S) = H([s]R) $ ,與發送方導出的密鑰相同;
  3. 計算 $ m = \operatorname{crypto_secretbox_xsalsa20poly1305_open}(k, 0, c) $ ,或者如果偽造則拒絕。

大致有 $ 2^{256} $ 可能的發件人秘密 $ s $ 可用於加密消息,它們都適用於任何消息 $ m $ ,所以在這個密碼系統中,對於任何消息 $ m $ 大約有 $ 2^{256} $ 不同的密文有 $ m $ 作為對應的明文。

這不僅僅是一個人為的例子。 為了滿足公鑰加密的安全標準概念,自適應選擇密文攻擊下的不可區分性,對於任何給定的明文,必須有許多密文,由發送者隨機選擇。 否則,不知道私有解密密鑰的對手可以很容易地判斷挑戰密文是否隱藏了兩個(或三個,或 $ n $ ) 通過加密候選明文並將生成的密文與挑戰進行比較來獲得可能的明文。這意味著每個明文的不同密文最小數量必須在 $ 2^{192} $ 對多目標攻擊的安全性給予信心

還有機率對稱密碼,例如 AES-CBC 隨機選擇的 IV 附加到密文,或 crypto_secretbox_xsalsa20poly1305 隨機選擇的隨機數附加到密文。在這種情況下,隨機化的作用是防止相同的消息內容在不同的時間導致相同的密文,並使攻擊者能夠辨識重複的消息。

在對稱設置中,隨機化本身並不總是必要的:例如,確定性地保持 crypto_secretbox_xsalsa20poly1305 的狀態並傳輸每個連續消息併計算到目前為止發送的消息數就足夠了。但在某些情況下,如 AES-CBC,它是強制性的——儘管您當然可以使用消息序列號的秘密偽隨機函式,例如 $ \operatorname{AES}_k(\mathit{seqno}) $ , 選擇 AES-CBC IV。

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