如何理解非對稱密碼學?
在非對稱加密課程的任何地方都解釋了加密和消息傳遞的過程,但我對非對稱加密算法本身感興趣。到目前為止,我唯一意識到的是,這種加密的全部意義在於使用
mod
. 但是如何創建自己的原始非對稱加密算法?
這種加密的重點是使用 mod 的數學運算
這不是重點,模運算只是有用的幾個原因。其中之一是它促進了逆元素的存在,可以用來撤銷相關操作。找到一種生成元素的方法,並且它是逆元素,其他人很難從元素生成逆元素,這可以構成陷門樣式算法的密鑰生成算法的基礎。
非對稱加密和解密算法的基本(不安全)範例使用諸如加法或乘法模運算之類的運算。
- 給定一個公共模數 $ N $
- 生成加密密鑰 $ k_e $ 通過選擇一個值之間 $ [1, N] $
- 假設我們將使用加法運算符,生成一個解密密鑰 $ k_d $ 通過計算 $ N - k_e $
加密消息 $ m $ :
- 計算 $ c = m + k_e \bmod N $
解密密文 $ c $ :
- 計算 $ m = c + k_d \bmod N $
自從 $ k_e \neq k_d $ (很有可能),在一個密鑰用於一個操作而另一個用於逆操作的意義上,該算法被認為是非對稱的。由於各種原因,它是完全不安全的,但它展示了一些*非對稱算法的本質:
- 您生成兩個鍵,其中一個可用於反轉另一個鍵的操作,而不是通過“撤消它”,而是通過在您撤消操作時前進到等效結果。我們沒有減去 $ k_e $ ,我們反而添加了一些其他的 $ k_d $ 這恰好產生與減去相同的結果 $ k_e $ 會產生。
您可以將上面範例中的運算符更改為乘法而不是加法,並相應地生成逆運算。然而,由於各種原因,這仍然是不安全的。尋找合適的運營商是開發此類系統所面臨的挑戰的一部分。
給定 $ k_e, N $ ,它必須是不可行的 $ k_d $ .
- 通常更容易生成 $ k_d $ 首先並生成 $ k_e $ 從中。對於基本的加法和乘法,給定 $ k_e, N $ , 恢復逆很簡單 $ k_d $ . 部分挑戰是找到一種方法來生成 $ k_e $ 這樣發現 $ k_d $ 給予時 $ k_e, N $ 很難。
一個很好的例子
您可以在RSA中看到這些點的範例。為了恢復 $ d $ 從 $ e, N $ ,它需要你首先考慮 $ N $ ,這(被認為是)很難。事實是 $ {m^e}^d \equiv m \bmod N $ 是什麼使解密。注意 $ d \neq e $ ,我們使用 $ d $ 取冪 $ m^e \bmod N $ 再次回到 $ m $ .
*密鑰協議風格算法
諸如 Diffie-Hellman 之類的密鑰協商算法不需要計算逆運算,也不一定需要您反轉任何內容。當給定一個組結構時,經典的 Diffie-Hellman實際上是一個通用配方(在功能正確性的意義上)。嘈雜的 Diffie-Hellman提供了近似的密鑰協議,但或多或少是完全不同的野獸。