您如何解釋這個非常簡單的加法/模非對稱加密?
我正在做一個針對沒有強大數學背景的開發人員(比如我)的展示文稿。我想解釋一下非對稱加密如何與一個非完全安全但有效的例子一起工作。
我在 Stackoverflow 上找到了一個基於加法和模數的:
- 給定範圍從 1 到 M
- 給定 a 和 b 其中 a+b = M
- a是公鑰,b是私鑰
- x 是明確的數據(只是一個數字)
- y 是加密數據
- y = (x + a) mod M
- x = (y + b) mod M
例子 :
M=10, a=3, b=7, x=4 y = (4+3) mod 10 = 7 (7 + 7) mod 10 = 4
假設對手知道算法和 a, y, M。
我們假設對手無法從 a 中猜出 b。
取模有多個結果:
4 mod 3 = 1 7 mod 3 = 1 13 mod 3 = 1
意味著對手無法輕易找到
x+a
從
(x+a) mod M
即使這真的很簡單,我“感覺”模數“環繞”我無論如何都找不到解釋為什麼這樣有效:
y = (x + a) mod M x = (y + b) mod M
有人可以嘗試向我解釋嗎?
如果您將數字 0-M 按從左到右遞增的順序繪製在一條水平直線上,您的消息將成為該線上的一個點。當您應用密鑰時,它會將消息移到 $ a $ 右邊的空格。模運算符意味著如果您的消息離行的右側太遠,那麼它會繞回行的左側。
如果您要應用密鑰 $ a $ 再次,您的密文消息將移過另一個 $ a $ 右邊的空格,假設一個適當的模數,意味著結果不會與原始明文消息對齊。
考慮到這一點,如果您要移動密文消息 $ b $ 向前空格,您最終會回到原始消息。
如果你想使用 $ a $ 作為對稱密鑰,您將改為使用對密文執行模減法 $ a $ . 基本上,對稱解密“反轉”轉換,而在非對稱加密的情況下,密文是通過前進解密的,而不是後退。這使我們能夠從不可逆函式建構公鑰加密——我們不反轉轉換,我們設計它使得“前進”(以特定方式)碰巧“排隊”並產生原始消息.
其他操作可用於創建這種不對稱效果,通常使用模數。正如@poncho 在評論中提到的那樣,乘法通常被用作展示“非對稱加密”的一種方式,但應該注意加法和乘法都不是“足夠強大”,通常:模冪是在實踐中用來實現的效果。
以下是使用您的範例的一些簡單圖表。我們將從數軸開始:
-----0-----1-----2-----3-----4-----5-----6-----7-----8-----9-----10-----
環境 $ a $ 在 3:
-----0-----1-----2-----a-----4-----5-----6-----7-----8-----9-----10-----
我們添加後 $ x $ (即 4)到 $ a $ (這是3);自從 $ a $ 已加密,我們將密文稱為 $ b $ (就像你做的那樣),它現在的價值是 $ 7 $ ; 加法將值移動到數軸的右側:
+x +-----------------------+ | v -----0-----1-----2-----a-----4-----5-----6-----b-----8-----9-----10-----
如果我們要添加 $ x $ 再次回到我們的密文,我們最終會在 $ 1 $ ( $ 11 \bmod 10 = 1 $ )
+x ... -------+ +------------------ ... v | -----0-----1-----2-----3-----4-----5-----6-----b-----8-----9-----10-----
這顯然會導致不正確的解密。要正確解密,我們可以添加對應的私鑰 $ y=6 $ ( $ x + y = 10 $ ) 使密文“前進”到正確的明文,記住當我們到達數字行的末尾時迴繞:
+y ... -------------------+ +------------------ ... v | -----0-----1-----2-----3-----4-----5-----6-----b-----8-----9-----10-----
**備註:**這裡 $ 10 $ 和 $ 0 $ 是相同的數字(因為 $ \mod 10 $ ) !