為何公鑰私鑰不可互相推導?

在數字簽名中,客戶B持有簽名方A的公鑰,可以解開A的簽名,得到正確的明文,那既然知道明文,知道密文,難道不能計算出A的私鑰嗎?類似的,B用A的公鑰加密了明文,難道卻不知道還原的辦法嗎?


如果講歐拉定理、費馬小定理之類的數學知識題主能夠明白,恐怕也不會來問這個問題了。

你知道模運算吧?

A mod B = C

7 mod 3 = 1

16 mod 3 = 1

如果你把A當成明文,B當成加密密鑰,C當成密文,那麼你會發現,如果告訴你加密密鑰和密文,你也無法計算出明文是什麼。同樣的,16 mod 3 = 1, 16 mod 5 = 1,你知道了明文和密文,同樣也無法推算出加密密鑰。

這個例子只是告訴你並不是所有運算都是可逆的,並不代表數字簽名背後的數學原理。

另外,通過公鑰並不是完全不能推算出私鑰。密碼學中一般表述為:通過公鑰推算私鑰在計算上是困難的。就是說理論上並不是完全不可行,在實踐上非常困難。


對於目前的非對稱演算法,私鑰可以推導出公鑰,而公鑰不能推導出私鑰,這是由數學難題決定的,RSA的對應數學難題是大數的因子分解。


推薦閱讀:

一個優秀的程序員應該學完哪些計算機理論的知識?
如何對集合中的數據進行壓縮?
谷歌從 Ingress 遊戲中搜集的地理數據有哪些用途,是否可能用于軍事?
該如何作一條已知曲線的等距曲線?
為什麼Python比C++慢很多?

TAG:演算法 | 加密 | 密碼學 |