區塊鏈技術系列(1) - 數字簽名

導讀:在現實社會中,簽名作爲簽名者身份的一種證明,簽名代表對簽名文件的認可,不可抵賴。理論上簽名是可信、不可僞造的。現在網絡環境越來越廣泛,有大量的信息通過網絡傳播,並且會保存在上面。這些電子數據顯然無法人工簽名,數字簽名就孕育而生。本文將介紹什麼是數字簽名、數字簽名的特性與相關技術。

對於區塊鏈方面多技術,我還是建議大家多看英文文檔,多利用Google來搜索技術文章。  

怎麼搭建自己專屬V-P-N來訪問Google,請看我之前發的文章: 新人如何快速搭建自己的個人網站以及自己專屬V-P-N代理

什麼是數字簽名

數字簽名(又稱公鑰數字簽名、電子簽章):是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字信息的方法。一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證。就是隻有信息的發送者才能產生的別人無法僞造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。在區塊鏈技術中,數字簽名涉及到公鑰、私鑰和錢包等工具,它有兩個作用:一是證明消息確實是由信息發送方簽名並發出來的,二是確定消息的完整性,沒有被篡改過。

公鑰(Public Key)與私鑰(Private Key)

公鑰(Public Key)與私鑰(Private Key)是通過一種算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,私鑰則是非公開的部分。公鑰通常用於加密會話密鑰、驗證數字簽名,或加密可以用相應的私鑰解密的數據。通過這種算法得到的密鑰對能保證在世界範圍內是唯一的。使用這個密鑰對的時候,如果用其中一個密鑰加密一段數據,必須用另一個密鑰解密。比如用公鑰加密數據就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密,否則解密將不會成功。

數字簽名流程

假如Alice想給Bob傳遞一個署名的消息的話,那麼她可以爲她的消息計算一個散列值(Message digest),然後用她的私鑰“加密”(這個散列值並將這個“署名”加在消息的後面。這個消息只有用她的公鑰才能被解密。Bob獲得這個消息後可以用Alice的公鑰“解密”(如同前面“解密消息”的步驟)這個散列值,然後將這個數據與他自己爲這個消息計算的散列值相比較。假如兩者相符的話,那麼Bob就可以知道發信人持有Alice的私鑰,以及這個消息在傳播路徑上沒有被篡改過。

數字簽名的流程圖

1、生成公鑰和私鑰對

2、通過發送者的私鑰對消息的哈希值進行加密,生成簽名信息。

3、把加密後的哈希值和待發送的信息連同公鑰一起發給接受者。

4、接收者通過發送方的公鑰對加密的哈希值進行解密,還原出哈希值。

5、對簽名信息進行驗證。


數字簽名的簽名過程和驗證過程

數字簽名技術實現

數字簽名算法依靠公鑰加密技術來實現的。在公鑰加密技術裏,每一個使用者有一對密鑰:一把公鑰和一把私鑰。公鑰可以自由發佈,但私鑰則祕密保存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現。普通的數字簽名算法包括三種算法:

1、一種密碼生成算法

2、標記算法

3、驗證算法

數字簽名算法

常見的數字簽名算法主要有RSA、DSA、ECDSA三種。

1. RSA數字簽名算法

RSA是目前計算機密碼學中最經典算法,也是目前爲止使用最廣泛的數字簽名算法,RSA數字簽名算法的密鑰實現與RSA的加密算法是一樣的,算法的名稱都叫RSA。密鑰的產生和轉換都是一樣的,包括在售的所有SSL數字證書、代碼簽名證書、文檔簽名以及郵件簽名大多都採用RSA算法進行加密。

RSA數字簽名算法主要包括MD和SHA兩種算法,例如我們熟知的MD5和SHA-256即是這兩種算法中的一類。

2. DSA數字簽名算法

DSA全稱Digital Signature Algorithm,DSA只是一種算法,和RSA不同之處在於它不能用作加密和解密,也不能進行密鑰交換,只用於簽名,所以它比RSA要快很多,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。RSA算法卻做不到。

DSA的整個簽名算法流程如下:

a. 發送方使用SHA-1和SHA-2編碼將發送內容加密產生的數字摘要;

b. 發送方用自己的專用密鑰對摘要進行再次加密得到數字簽名;

c. 發送方將原文和加密後的摘要傳給接收方;

d. 接收方使用發送方提供的密鑰對進行解密 ,同時對收到的內容用SHA-1/SHA-2編碼加密產生同樣的摘要;

e. 接收方再將解密後的摘要和d步驟中加密產生的摘要進行比對,如果兩者一至,則說明傳輸過程的信息沒有被破壞和篡改,否則傳輸信息則不安全。

3. ECDSA橢圓曲線數字簽名算法

ECDSA是用於數字簽名,是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中採取的算法爲ECC,最後簽名出來的值也是分爲r,s。而ECC(全稱Elliptic Curves Cryptography)是一種橢圓曲線密碼編碼學。

ECDH每次用一個固定的DH key,導致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH則是基於ECC的DH( Diffie-Hellman)密鑰交換算法。

ECC與RSA 相比,有以下的優點:

a. 相同密鑰長度下,安全性能更高,如160位ECC已經與1024位RSA、DSA有相同的安全強度。

b. 計算量小,處理速度快,在私鑰的處理速度上(解密和簽名),ECC遠 比RSA、DSA快得多。

c. 存儲空間佔用小 ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多, 所以佔用的存儲空間小得多。

d. 帶寬要求低使得ECC具有廣泛得應用前景。


對於區塊鏈方面多技術,我還是建議大家多看英文文檔,多利用Google來搜索技術文章。  

怎麼搭建自己專屬V-P-N來訪問Google,請看我之前發的文章: 新人如何快速搭建自己的個人網站以及自己專屬V-P-N代理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章