在閱讀《精通比特幣》的過程中,我發(fā)現比特幣系統(tǒng)中有兩個重要的概念需要利用非對稱加密技術:
比特幣地址的生成
交易合法性的驗證
因此,我用了幾天時間學習了密碼學基礎知識,尤其是非對稱加密技術的原理。這里加以整理總結,本文只求通俗,必需涉及數學公式才能解釋的部分只給出優(yōu)質教程的鏈接,根據需求選擇學習就好。
本文以一個一臉懵逼的新手視角進行介紹:
想了解非對稱加密,那么對稱加密是什么?
非對稱加密又是什么??
非對稱加密技術能做什么???
如果想深入了解非對稱加密算法原理看哪些資料????
想了解非對稱加密,不妨先解釋對稱加密是什么
對稱加密,全稱應該是對稱密鑰加密
(Symmetric-key algorithm),是密碼學中的一類基本的加密算法。這類算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰。
而在密碼學中,密鑰
(key)是指某個用來完成加密、解密、完整性驗證等密碼學應用的秘密信息。
一個密鑰大概長這樣“A56FDJK3 dj2slh345dhi”,一般以一定長度的字母和數字組成的字符串來表達,具體長度和使用的字母由具體的加密算法規(guī)定,沒有統(tǒng)一規(guī)定。
下面用例子和圖來直觀解釋對稱密鑰加密,有請出密碼學中出鏡率最高的兩個人:Alice和Bob
假設Alice正在利用網絡向Bob發(fā)送一條消息“Alice已向Bob轉賬1BTC,請查收?!?
因此Alice和Bob商量使用對稱加密方法對消息進行。
為了安全,兩人私下確定了使用的加密規(guī)則(例如對稱加密算法DES),以及密鑰(例如“AliceBobKey”)
于是新的通信過程如下圖所示:
于是,即使現在存在第三方劫持了Alice發(fā)送的消息,也無法得知消息的具體內容,安全性得到的一定程度的保證。
事實上,這組密鑰成為了Alice和Bob的共同秘密,以便維持專屬的通信聯系,任何一方都不能將密鑰泄露。
對稱加密的過程非常好理解,在很多場合都需要這種技術,也有著很多優(yōu)點(比如速度快)。
但與非對稱加密相比,要求雙方獲取相同的密鑰是對稱密鑰加密的主要缺點之一。在某些特殊的場景下,這種加密技術就會有局限性,比如它無法用于身份驗證,因為你不能將密鑰提供給其他人。
下面就來說說非對稱加密
非對稱加密(asymmetric cryptography),也稱為公開密鑰加密(Public-key cryptography),是密碼學的一種算法,它需要兩個密鑰,一個是公開密鑰,另一個是私有密鑰。顧名思義,公鑰可以任意對外發(fā)布;而私鑰必須由用戶自行嚴格秘密保管,絕不透過任何途徑向任何人提供,也不會透露給要通信的另一方,即使他被信任。
非對稱加密的重要性質:
1.加密的雙向性。
加密具有雙向性,即公鑰和私鑰中的任一個均可用作加密,此時另一個則用作解密。
2.公鑰無法推導出私鑰
必須確保使用公鑰無法推導出私鑰,至少妄想使用公鑰推導私鑰必須在計算上是不可行的,否則安全性將不復存在。
雖然兩個密鑰在數學上相關,但如果知道了公鑰,并不能憑此計算出私鑰;因此公鑰可以公開,任意向外發(fā)布;而私鑰不公開,絕不透過任何途徑向任何人提供。
注1:任何一種實現上面兩條性質的不同方法,便是一種新的非對稱加密算法。例如RSA算法和橢圓曲線算法,其背后原理大不相同,但都滿足這兩個重要性質或者說定義。這就好像好比歐式距離,馬氏距離都滿足了范數的定義,因此都是一種具體的范數。
注2:如果你第一次接觸非對稱加密,你可能會和我一樣對上面兩條性質如何實現深感好奇,但目前你不必深陷于此,其背后的數學原理還是需要耐心鉆研上幾天的?,F在僅僅牢記這兩個性質就好,文末提供了一些優(yōu)質的材料以供進一步學習。
了解了非對稱加密大致是什么,這小節(jié)來說說它能夠做什么?
前面已經知道,非對稱加密具有雙向性,即公鑰和私鑰中的任一個均可用作加密,此時另一個則用作解密。于是不同加密方向便產生了不同的應用。
|明文|->公鑰加密->|密文|->私鑰解密->|明文|
這種加密路徑用于和他人進行加密通信,作用等同于對稱加密。
我們回到Alice和Bob的例子來看下。
如果Bob想利用非對稱加密算法私密的接收他人向他發(fā)送的信息,步驟是這樣的。
1.首先Bob需要使用具體約定的算法(例如RSA)生成密鑰和公鑰,密鑰自己保留,公鑰對外公布。
2.Alice拿到Bob的公鑰后,便可以對想要發(fā)送的消息“Alice已向Bob轉賬1BTC,請查收?!边M行加密。
3.然后Alice將密文(例如是“FH39ggJ shi3djifg35”)發(fā)送給Bob。
4.Bob收到消息后,用自己的私鑰進行解密,還原出消息原文“Alice已向Bob轉賬1BTC,請查收?!?/p>
用圖來表示便是下面的過程:
如果反過來,先用私鑰加密呢?這便誕生了非對稱加密的另一個重要應用:數字簽名
我們回到Alice和Bob的例子來看下。
在比特幣系統(tǒng)中,類似“Alice已向Bob轉賬1BTC,請查收。”這樣的消息最終會被礦工記錄在賬本上,是與轉賬雙方利益相關的。這樣一條消息的受益方是Bob,我們腹黑一點想,如果Bob一直向網絡中廣播Alice給他轉賬的消息呢?
Bob:“Alice已向Bob轉賬1BTC”
Bob:“Alice已向Bob轉賬2BTC”
Bob:“Alice已向Bob轉賬3BTC”
…
因此,我們需要一種機制來證明Alice是“自愿”的,也就是消息是Alice親自發(fā)出的。步驟是這樣的:
1.Alice需要使用具體約定的算法(例如RSA)生成密鑰和公鑰,密鑰自己保留,公鑰對外公布。
2.當Alice想要發(fā)送消息 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:“gh3giPGFN2jgh3sF”。 時,Alice使用自己的私鑰對消息進行加密,假設加密后的密文是 SHG356g3T4 dh4fh,現在這個密文可以看作Alice的數字簽名。
3.Alice將消息明文和數字簽名放到一起并發(fā)送到網絡中
發(fā)送的消息類似這樣的形式 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:“gh3giPGFN2jgh3sF”。| 簽名:“SHG356g3T4 dh4fh”
4.網絡中的所有人接收到消息后,都可以進行如下操作完成驗證:
收到消息 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:“gh3giPGFN2jgh3sF”。| 簽名:“SHG356g3T4 dh4fh”
使用Alice在消息中提供的公鑰 gh3giPGFN2jgh3sF對私鑰簽署的數字簽名SHG356g3T4 dh4fh進行解密
將解密結果與消息明文 Alice已向Bob轉賬1BTC,請查收。| 我的公鑰是:“gh3giPGFN2jgh3sF”進行對比
如果一致,說明消息是Alice親自發(fā)送的,因為只有Alice本人擁有Alice的密鑰
如果不一致,則說明消息不是Alice發(fā)送的,或者雖然消息是Alice發(fā)送的但已遭到他人篡改
5.于是,通過4中描述的方法,Bob確認了Alice給他了一筆價值1BTC的轉賬。
網絡中其他人(礦工)均成功驗證了這條消息的真實性,并為Bob作證他的賬戶新增了1個BTC,Alice的賬戶減少了1個BTC。
整個過程可以被下圖描述:
注2:此外,上述介紹的數字簽名簡略版本是存在被第三方攻擊的漏洞的。你能想到問題以及如何解決嗎?[提示:相同內容的消息、時間戳]
注3:如果你覺得對數字簽名的理解還不夠清晰,不妨再讀讀What is a Digital Signature?
數字證書是非對稱加密的又一個重要應用,由于與區(qū)塊鏈的學習的關系相對不那么密切,這里就先放一邊了。
大家有興趣可以看這篇文章數字證書原理,講的很清晰
讀到現在,你應該對非對稱加密的步驟非常了解了
但你不清晰的地方是背后的數學原理,其實還是圍繞非對稱加密的兩條性質來的:
加密-解密的過程到底是如何實現的?
為什么公鑰無法推導出私鑰?
如果你想進一步探索,不妨讀讀下面這些資料:
橢圓曲線算法可以用來進行秘密的共享以及數字簽名,實際上其具體步驟和本文介紹的還是略有差異的,如果想詳細了解原理,不妨看看下面這些文章:
聯系客服