科普 | 公開金鑰加密

買賣虛擬貨幣

當代密碼學的核心是“公開金鑰加密”( Public-key cryptography )。我們先來聊聊公開金鑰加密的定義,然後介紹一下它的兩大應用,最後簡要介紹一下兩個公開金鑰加密的演算法。本文的目的是梳理清楚學習密碼學的大思路,以便在後續文章中,遇到橢圓曲線,RSA ,加密通訊,數字簽名這些術語的時候,起碼知道它們的大致歸屬。

定義

先來聊公開金鑰加密的定義。公開金鑰加密也稱為”非對稱加密“,加密和解密的時候使用不同的秘鑰,也就是 key ,其中一個是公鑰,是可以公開出去的,另外一個是私鑰,要嚴格保密。

但是公開金鑰加密的應用其實不侷限於加密。公開金鑰加密要實現的功能有兩個:一個是保密,傳送者用接收者的公鑰去加密資訊,接收者就用自己的私鑰去解密資訊。另外一個功能就是認證,發出資訊的人用自己的私鑰去進行數字簽名來簽署資訊,這樣任何人拿到公鑰之後都可以去確認資訊是不是由私鑰持有人發出的。總之,公開金鑰加密有兩個應用,一個是加密通訊,另外一個是數字簽名。

公開金鑰加密的安全性基於基本的數學原理。公鑰和私鑰首先應該是有數學聯絡的,不然所謂的解密和簽名操作也就不可能實現了,但是同時不能由公鑰去算出私鑰,如果可以算出來,那麼安全性就喪失了。所以加密演算法都是基於一些目前無解的數學問題,或者叫單向函式,例如整數分解或者離散對數。具體的演算法有 RSA 和 ECC 等。什麼叫單向函式呢?8616460799 是兩個數相乘得到的,給這兩個數,可以很容易算出結果,但是如果給出結果,要分解出兩個乘數,就是一個數學上還沒有解決的問題,叫做”整數分解“問題。換句話說,如果有一天整數分解問題解決了,攻擊者就可以把公鑰分解,那麼私鑰就很容易被算出來了,基於整數分解的加密演算法也就失效了。

稍微總結一下,公開金鑰加密的應用方向有兩個,一個是加密通訊,另外一個是數字簽名。公開金鑰加密之所以可行,底層源於數學原理。

應用

接下來,我們聊聊加密通訊和數字簽名的基本原理。

先說加密通訊。Bob 需要先在自己的機器上生成公鑰和私鑰,然後把自己的公鑰傳送給 Alice 。這樣,Alice 就可以給 Bob 發資訊了。Alice 會用 Bob 的公鑰把資訊加密得到密文,密文傳輸過程中如果被截獲是不用擔心的,因為只有 Bob ,或者說只有私鑰才能解密密文。這就是加密通訊的基本過程。使用一個形象的比喻,Alice 要給 Bob 寫信,首先需要知道 Bob 家的地址,而公鑰就是地址。Alice 的信送到 Bob 的郵箱裡之後,只有 Bob 用自己的郵箱鑰匙,才能拿到信,所以私鑰就是郵箱鑰匙。

再說數字簽名。Alice 要在網上籤署一份合同,所以她就用私鑰去簽署合同,這樣能生成一段資料,這個資料就是數字簽名了。然後 Alice 把公鑰公佈給所有人,這樣任何人都可以用公鑰去解密數字簽名,解密成功,也就證明了這份合同的確是 Alice 簽署的。同時,如果有人篡改了這份合同,那麼解密過程也會失敗,所以說數字簽名還有防止篡改的功能。要注意,數字簽名過程中,合同本身並沒有被加密。我們也來做一個形象的比喻。Alice 寫一封信給家裡人,寫好之後,用自己的印章給信封加上蠟封。家人收到信之後,根據蠟封上的圖案就能判斷信是 Alice 寫的,同時蠟封沒有損壞,表示信沒有被拆開篡改過。數字簽名就相當於這個蠟封。

這就是公開金鑰加密的兩大應用了,加密通訊和數字簽名。

主要演算法

最後我們來聊聊公開金鑰加密的具體演算法的誕生,最知名的演算法有兩個,一個是 RSA 演算法,一個是 ECC 演算法。

RSA 演算法是開山鼻祖。1970 年,一位英國密碼學家預見了“無秘密加密”的可能性,公鑰加密思想產生了。公鑰加密的比對稱加密有明顯優勢,因為通訊之前,雙方不用傳遞密碼,只需要傳遞公鑰即可,而公鑰不是秘密,被截獲也不會影響通訊安全。之後幾年,人們開發了 RSA 演算法,第一次真正實現了這個想法。RSA 演算法標誌著公開金鑰加密真正誕生了。RSA 演算法的安全性基於整數分解問題,具體來說就是根據大素數相乘的結果,不可能被反向分解的數學原理。RSA 的詳細內容,後續文章中會有介紹。

後來,人們發明了另外一種加密演算法叫做 ECC ,也就是橢圓曲線演算法。世界上不可解的數學問題並不是只有整數分解一個,ECC 就是基於另外一個問題:離散對數。一個加密演算法的安全性取決於,由公鑰去運算私鑰的難度。畢竟私鑰的位數是有限的,所以即使用暴力搜尋的方式,也肯定是能夠算出來的。而且各種單向函式雖然無解,但是不代表不能縮小求解範圍,所以不同的演算法其實安全性還是有差別的。而 ECC 用離散對數原理,同樣的 Key 長度,安全性比 RSA 更高。比特幣就是用 ECC 來生成地址和私鑰。這裡你可能會有疑問,為何不能把私鑰位數儘量弄長一些呢?的確,越長就越安全,但是同時執行效率也低,所以實際使用中還是要保證一種平衡的。

這裡我們要記住的是,加密演算法很多,但是最重要的就是 RSA 和 ECC 兩個,同時加密演算法跟雜湊演算法是兩個東西,所以 SHA1 ,MD5 這些雜湊演算法跟 RSA 和 ECC 根本不是一類運算,不要弄混淆。

總結

公開金鑰加密的簡單介紹就是這些了。要記住的是:首先公開金鑰加密是基於單向函式的數學原理開發出來的,主要由兩個應用,一個是加密通訊,一個是數字簽名。最著名的公開金鑰加密的演算法有兩個,一個是 RSA 一個是 ECC 。

參考:

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;