區塊鏈100篇之第三篇——數字簽名

數字簽名類似於我們現實世界中的文件簽名,我們把名字寫在一個文件上,就代表了我們認可了這份文件,並且說明了這份文件是

真是可靠的,那麼問題是如果文件的署名被偽造了怎麼辦?在現實世界中,我們一般會找當事人直接驗證這份文件是否是親自簽署的而不是被人假冒的,而在計算機世界中,保證數字簽名不被偽造是通過數字摘要和非對稱加密實現的,舉個比特幣中交易的例子:假如現在Alice發起一筆比特幣轉賬,需要先將該交易進行數字摘要,縮短成一段字符串,然後用自己的私鑰對摘要進行加密,形成數字簽名。完成後,需要將交易信息(包括收款方的地址)和數字簽名一起廣播給記錄“賬本的人”也就是礦工。礦工用Alice的公鑰進行驗證,如果驗證成功,說明該筆交易確實是Alice發出的,且信息未被更改,是完整的。

下面就來詳細講解這數字摘要和非對稱加密技術,講完之後再回過頭來看這個例子就明白了。

數字摘要

數字摘要技術用於對所要傳輸的數據進行運算生成信息摘要,它並不是一種加密機制,但卻能產生信息的數字”指紋”,它的目的是為了確保數據沒有被修改或變化,保證信息的完整性不被破壞。說直白點就是將數據進行hash編碼。它在數字簽名中的作用就是增加被偽造的難度,就好比有些人故意把字要寫的龍鳳鳳舞,目的就是很難讓他人偽造。

非對稱加密

講到非對稱加密我們需要了解一下什麼是對稱加密,舉個例子:現在你(未成年)跟你朋友想聊一個比較敏感的話題(比如…),但是你怕你老媽會翻看你手機,要是讓她知道你跟別人聊這種話題肯定會捱罵,於是你就跟你的朋友約定好你將中文先翻譯成英文再發過去,然後他那邊可以使用微信翻譯將英文翻譯成中文,這樣即使老媽看到了也無所謂,因為她根本看不懂英語,於是你跟你的朋友便聊了起來:

  • 你:The XiaoHua in the class are so beautiful that I want to chase her.(班裡的小花好漂亮,我想追她)
  • 你朋友:I also think she’s pretty.(我也覺得她好漂亮)
  • ……

這裡的“班裡的小花好漂亮,我想追她”就是明文,而“The XiaoHua in the class are so beautiful that I want to chase her.”就是密文,而密鑰就是將“班裡的小花好漂亮,我想追她”轉化成“The XiaoHua in the class are so beautiful that I want to chase her.”這麼一個規則,講到這大概就清楚了什麼是對稱加密了吧,可以這麼理解:

  • 一方通過密鑰將信息加密後,把密文傳給另一方,另一方通過這個相同的密鑰將密文解密,轉換成可以理解的明文。他們之間的關係: 明文 密鑰 密文

理解了什麼是對稱加密後你可能有一個疑問,那如果老媽使用了微信翻譯將發送出去的英文翻譯成中文她不就看懂了嗎?對的,這就是對稱加密的缺陷,一旦被人拿到了密鑰(在對稱加密中,密鑰就是加解密的規則),那麼你發送出去的密文將輕而易舉被人破解,那麼有什麼方法做到即使一個人的密鑰被盜竊了,最起碼保證你給其他人發送密文不被破解?就是說即使你老媽獲取到了你的密鑰,但她仍然無法破解你發送出去的信息,只有你的朋友才能查看你發送給他的信息。這個就是我們要講的非對稱加密。

在非對稱加密中,不管是信息的發送方還是信息的接收方都有一對屬於自己的公鑰和密鑰,公鑰顧名思義就是可以公開,而私鑰就是隻能自己看,不能給別人拿到。接著發送方會將信息進行數字摘要並使用接收方的公鑰進行加密,然後再使用自己的私鑰對數字摘要進行加密,接收方收到加密後的信息跟加密串,用 發送方的公鑰(因為公鑰是公開的)來解密加密串,得到原始的數字摘要,然後對使用自己的私鑰進行解密的信息進行摘要後的結果進行比對。如果一致,說明該文件確實是該發送方發過來的,並且文件內容沒有被修改過。

還是上面那個例子,你使用你朋友(暫且稱為A)的公鑰對你的信息進行加密,並且對信息進行數字摘要,然後使用你自己的私鑰對摘要進行加密,即數字簽名,然後將數字簽名和加密後的信息一起發送給A,A接收到信息後,先使用你的公鑰對數字簽名進行解密,證明該信息確實是你發送過來的而不是別人發送過來的,然後再使用自己的私鑰對加密後的信息進行解密(注意這裡只有A的私鑰才能解密信息,其他人都不可以,即使是你本人也不能解密,所以就算是你老媽拿到了你的私鑰也沒辦法破解該信息),然後對該信息使用同樣的算法進行數字摘要,如果得到的摘要跟你發送過來的摘要一致,則說明信息在傳遞的過程中沒有被修改過。

好了,到這裡基本上是講完了,其他的如果有興趣自行上網蒐集材料學習。


分享到:


相關文章: