隨著互聯網的發展,網絡交易普及,在交易過程中經常會碰到數字簽名這個概念,當然區塊鏈中也通過數字簽名來驗證交易信息的可靠性,這裡簡單介紹下數字簽名的概念,如有理解不當的地方,請及時指正。
簽名:在現實社會中,簽名作為簽名者身份的一種證明,簽名代表對簽名文件的認可,不可抵賴。理論上簽名是可信、不可偽造的。每次你刷卡消費後,營業員肯定需要你對回執上進行簽名,這就是一種對消費交易的認可
數字簽名(又稱公鑰數字簽名、電子簽章):是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字信息的方法。一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證。就是隻有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。簡單證明 “我就是我”。
和傳統的簽名不一樣,互聯網的發展和數字簽名的出現,讓簽名認證這個概念應用到了更多的層面。
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。
順便提一句目前國密算法的中 M2算法也是基於該算法。
大致介紹了數字簽名和一些基本的數字簽名算法,簽名算法涉及到比較專業的數學知識,這裡大致就介紹了功能和過程。
閱讀更多 輕信區塊鏈 的文章