Encryption

2way密碼學

  • July 17, 2017

想像一下 Alice 向 Bob 發送一條消息。他們的行為是這樣的:

  1. 愛麗絲用她的密鑰加密一條消息並將其發送給鮑勃。
  2. Bob 用他的密鑰再次加密消息並將其發送回 Alice。
  3. Alice 用她的密鑰解密消息。所以現在它是用 Bob 的密鑰加密的。愛麗絲將消息發回給鮑勃,鮑勃用他的密鑰對其進行解密,並顯示消息。

我被告知這不可能發生。但我用 python 編寫並測試了一個完全符合上述故事的腳本。

它是一個獨立的 exe 文件 (5.5MB)。有想分析密文或者測試程序的歡迎詢問,或者可以下載一個簡單的版本~~(s000.tinyupload.com/?file_id=03258436522243989466)~~.


編輯

理論很好,但是請有人在網路上解碼此消息:19894,19992,20504,20605 然後 2094064,2114056,2158273,2178878

然後是 21263,21466,21473,21678

如果它們被解密,我將收回我的算法。

但是我用 python 編寫並測試了一個腳本,它完全符合上面的故事。

是的,顯然它可能發生;但是,您必須要小心如何做到這一點才能真正安全。

這可能是您的 python 腳本所做的;它生成一個位串(基於密鑰),並將位串和明文異或在一起,生成密文(和解密完全相同)。

因此,如果我們將原始消息表示為 $ M $ ,Alice 的密鑰生成的位串為 $ A $ , Bob 的位串為 $ B $ , 那麼事情是這樣的:

愛麗絲加密 $ M $ (也就是說,她生成她的位串,並且異或的 $ M $ 用它)。她發送那個,那個,她發送:

$$ M \oplus A $$ Bob 得到這個結果,並用他的位串加密它;他轉達了,即:

$$ (M \oplus A) \oplus B $$ Alice 接受它並用她的位串解密它(這也只是對位串進行異或運算)。異或既是關聯的又是可交換的,所以結果(她發送)是:

$$ M \oplus B $$ Bob 收到並解密它,結果是 $ M $ .

所以,它奏效了;有什麼問題?

好吧,如果有人接收了通過網路發送的所有三個消息,並且將它們排他或將它們放在一起,他們會得到:

$$ (M \oplus A) \oplus (M \oplus A \oplus B) \oplus (M \oplus B) = M $$ 因此,即使您不知道 Alice 或 Bob 的密鑰,也很容易恢復原始消息。

現在,它可以安全地完成了;然而,這是更多的工作。在 Shamir 的三遍協議中,它是通過選擇一個值來完成的 $ g $ 和一個大素數 $ p $ ,並擁有 Alice 和 Bob 的密鑰 $ a, b $ 是相對質數的秘密指數 $ p-1 $ ; 的加密 $ M $ 愛麗絲的鑰匙是 $ M^a \bmod p $ ; 解密是 $ M^{a^{-1} \bmod p-1} \bmod p $ ; 你需要一點數論來證明加密和解密是互逆的。

所以,讓 Alice 發送消息 $ M $ ,顯示首先計算並發送:

$$ M^a \bmod p $$ 鮑勃回應

$$ (M^a \bmod p)^b \bmod p = M^{ab} \bmod p $$ 然後 Alice 解密這個消息,結果是:

$$ (M^{ab} \bmod p)^{a^{-1} \bmod p-1} \bmod p = M^b \bmod p $$ 然後 Bob 用他的密鑰解密,結果是:

$$ (M^b \bmod p)^{b^{-1} \bmod p-1} \bmod p = M $$ 這一切都有效,並且被認為是安全的(給出適當的選擇 $ p $ ),但是它與公鑰密碼學一樣多,因此比其他任何事情都更令人好奇。

如果這有效,取決於您使用的加密算法。它需要具有特殊屬性 $ Enc_{K_1}(Enc_{K_2}(M)) = Enc_{K_2}(Enc_{K_1}(M)) $ .

大多數傳統加密方案 (AES) 不具有此屬性,我所知道的唯一一種 RSA 對稱等價物。

編輯:流密碼,如果使用正確,也可以工作。

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