4.2 一把鎖配兩把鑰匙——奇特的非對稱加密
要進行數字簽名,小明首先要學習一種新的加密方法,其為非對稱加密。在通常的加密方法中,密鑰只有一個,這個密鑰既用來加密信息,也用來解密信息,這叫作對稱加密。就好比一把鎖有一把鑰匙,既可以用這把鑰匙把鎖鎖住,也可以用這把鑰匙把鎖打開。例如小明有一個密鑰6666,他用這個密鑰加密自己的情書,他的情書就和密鑰6666混在一起進行了某種數學計算,變成一堆誰也看不懂的亂碼。翠花收到亂碼情書后,也用密鑰6666進行解密,于是情書又變成了小明寫出來的原文,如圖4.2所示。對稱加密雖然方便,但是存在以下兩個缺點。
(1)小明需要在網上把密鑰傳輸給翠花,二黑很有可能在網上截獲這個密鑰,這樣二黑還是可以解密小明的情書并進行篡改。
(2)假如小明是個花心男,除了翠花外,還有金花、銀花、茉莉花等紅顏知己。那么他需要為每一個紅顏知己準備一個密鑰,要安全地在網上傳輸以及保存這么多密鑰,也是一件麻煩的事情。
圖4.2│對稱加密對信息進行加解密的過程
因此,密碼學家們想出了更好的加密方法,也就是非對稱加密。比特幣系統所使用的加密算法,就是一種稱為橢圓曲線加密算法(Elliptic Curve Cryptography,ECC)的非對稱加密算法。這種非對稱加密算法的特點在于,它不遵守一把鑰匙開一把鎖的“套路”,它有兩把鑰匙,即兩個密鑰,一個稱為公鑰,另一個稱為私鑰。公鑰與私鑰是一對,公鑰可以向所有人公開,即使二黑知道了也沒關系,私鑰則必須由本人機密保管。公鑰和私鑰都是一串數字,且這一對公鑰和私鑰有如下特點。
(1)用私鑰可以生成公鑰,但從公鑰無法推算出私鑰。
(2)如果用公鑰對數據進行加密,那么只有用對應的私鑰才能解密;如果用私鑰對數據進行加密,那么只有用對應的公鑰才能解密。
通過這種辦法,就可以很方便地管理密鑰了。因為小明只需要保存自己的私鑰,并且把公鑰向所有人公開,這樣任何人要向他發送信息時都可以用公鑰加密,并且只有小明才可以用私鑰解密這些信息。