區塊鏈解讀——數字簽名

買賣虛擬貨幣

隨著網際網路的發展,網路交易普及,在交易過程中經常會碰到數字簽名這個概念,當然區塊鏈中也透過數字簽名來驗證交易資訊的可靠性,這裡簡單介紹下數字簽名的概念,如有理解不當的地方,請及時指正。

簽名:在現實社會中,簽名作為簽名者身份的一種證明,簽名代表對簽名檔案的認可,不可抵賴。理論上簽名是可信、不可偽造的。每次你刷卡消費後,營業員肯定需要你對回執上進行簽名,這就是一種對消費交易的認可

數字簽名(又稱公鑰數字簽名、電子簽章):是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證。就是隻有資訊的傳送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對資訊的傳送者傳送資訊真實性的一個有效證明。簡單證明“我就是我”。


和傳統的簽名不一樣,網際網路的發展和數字簽名的出現,讓簽名認證這個概念應用到了更多的層面。

1.簽名認證,數字簽名在網路交易上和實際簽名一樣的認可功能,不可抵賴,簽名放擁有私鑰,保證簽名只能自己操作,在出現簽名的環境下,使用私鑰驗證簽名的真偽。

2.防篡改,這個透過網路下載來說明最為直觀,你在網路上下載一個檔案,數字簽名和檔案混合一個整體資料包,透過對數字簽名的驗證,保證檔案在傳輸過程中未被篡改。

3.驗證資料的完整性,如2同理,如果檔案有丟失,簽名將不完整,解開數字簽名和之前的比較就會出現不一致。保證檔案的完整。

4.仲裁機制,數字簽名也可以認為是一個數字身份,透過唯一私鑰生成,在網路上交易互動時要求收到一個數字簽名的迴文,保證過程的完整。如果對互動過程出現抵賴,那麼用數字便於仲裁。

5.保密性,對於有安全級別要求檔案,數字簽名加密後傳輸,保證資料在被中途擷取後無法獲得其真實內容。有利於資料的安全性。

6.防重放:在數字簽名中,如果採用了對簽名報文新增流水號、時戳等技術,可以防止重放攻擊。

7.多重數字簽名,透過多次數字簽名,對檔案資料進行多人認證。

數字簽名整個過程驗證簡單,只需要公鑰、私鑰進行加解密的驗證,和傳統簽名不一致,一般都會看到電視劇中常出現簽名驗證的時候需要專業的筆記簽證專家,採用數字簽名節省了驗證流程和成本。

從數字簽名過程來簡單理解下原理。

所謂數字簽名就是附加在資料單元上的一些資料,或是對資料單元所作的密碼變換。這種資料或變換允許資料單元的接收者用以確認資料單元的來源和資料單元的完整性並保護資料,防止被人(例如接收者)進行偽造。它是對電子形式的訊息進行簽名的一種方法,一個簽名訊息能在一個通訊網路中傳輸。

1.一段需傳送的資料經過hash計算生成一份摘要。

2.摘要透過傳送者私鑰進行加密。

3.傳送者將使用私鑰加密後的摘要和報文,生成一段待傳送的資料包。數字簽名即為經過私鑰加密後的加密摘要。

4.接收者使用之前一樣的hash演算法對報文計算摘要。

5.接收者再透過傳送者公鑰對摘要進行加密計算D。

6.接收者透過傳送者公鑰對數字簽名進行解密D’。

7.兩者進行比較即可驗證。

實現數字簽名有很多方法,數字簽名採用較多的是公鑰加密方式,如基於RSA Date Security 公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美國標準與技術協會公佈了數字簽名標準而使公鑰加密技術廣泛應用。公鑰加密系統採用的是非對稱加密演算法。之前的文章對非對稱加密也有過說明,有興趣可以參考。它的主要方式是,報文的傳送方從報文文字中生成一個128位的雜湊值(或報文摘要)。傳送方用自己的私人金鑰對這個雜湊值進行加密來形成傳送方的數字簽名。然後,這個數字簽名將作為報文的附件和報文一起傳送給報文的接收方。報文的接收方首先從接收到的原始報文中計算出128位的雜湊值(或報文摘要),接著再用傳送方的公用金鑰來對報文附加的數字簽名進行解密。如果兩個雜湊值相同、那麼接收方就能確認該數字簽名是傳送方的。透過數字簽名能夠實現對原始報文的鑑別。上文數字簽名步驟解釋的也就是一種公鑰加密簽名的模式。當然還有對稱加密方式,現在常用為非對稱加密演算法。

結合區塊鏈技術看下公鑰、私鑰、地址、簽名的概念。

上圖是公鑰、私鑰、地址的生成過程,有了這三個要素,然後透過上述數字簽名的從過程傳送資訊摘要和數字簽名,驗證一致性。區塊鏈中目前用到的是橢圓曲線演算法。

橢圓曲線演算法:橢圓曲線演算法ECC來做非對稱加密基礎演算法。ECC的210位演算法難度就相當於RSA 2048的難度,效能則是數量級的區別。這裡涉及到一些專業的數學知識點,橢圓演算法ECC其實就是利用乘法容易,而除法難的特點,設計一個乘法:K = k * G,其中大K是公鑰,小k是私鑰,G是生成點。由私鑰推導公鑰很容易,只需要k個G相加即可。但是從公鑰推導私鑰很難,也就是無法計算公鑰K除以G。如果有興趣可以參考下文:

http://rdc.hundsun.com/portal/article/750.html

順便提一句目前國密演算法的中M2演算法也是基於該演算法。

大致介紹了數字簽名和一些基本的數字簽名演算法,簽名演算法涉及到比較專業的數學知識,這裡大致就介紹了功能和過程。

免責聲明:

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

推荐阅读

;