區(qū)塊鏈數(shù)字簽名技術(shù)的過程及原理介紹
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)交易普及,在交易過程中經(jīng)常會碰到數(shù)字簽名這個概念,當(dāng)然區(qū)塊鏈中也通過數(shù)字簽名來驗證交易信息的可靠性,這里簡單介紹下數(shù)字簽名的概念,如有理解不當(dāng)?shù)牡胤剑埣皶r指正。
簽名:在現(xiàn)實社會中,簽名作為簽名者身份的一種證明,簽名代表對簽名文件的認(rèn)可,不可抵賴。理論上簽名是可信、不可偽造的。每次你刷卡消費(fèi)后,營業(yè)員肯定需要你對回執(zhí)上進(jìn)行簽名,這就是一種對消費(fèi)交易的認(rèn)可
數(shù)字簽名(又稱公鑰數(shù)字簽名、電子簽章):是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領(lǐng)域的技術(shù)實現(xiàn),用于鑒別數(shù)字信息的方法。一套數(shù)字簽名通常定義兩種互補(bǔ)的運(yùn)算,一個用于簽名,另一個用于驗證。就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明。簡單證明“我就是我”。
和傳統(tǒng)的簽名不一樣,互聯(lián)網(wǎng)的發(fā)展和數(shù)字簽名的出現(xiàn),讓簽名認(rèn)證這個概念應(yīng)用到了更多的層面。
1.簽名認(rèn)證,數(shù)字簽名在網(wǎng)絡(luò)交易上和實際簽名一樣的認(rèn)可功能,不可抵賴,簽名放擁有私鑰,保證簽名只能自己操作,在出現(xiàn)簽名的環(huán)境下,使用私鑰驗證簽名的真?zhèn)巍?/p>
2.防篡改,這個通過網(wǎng)絡(luò)下載來說明最為直觀,你在網(wǎng)絡(luò)上下載一個文件,數(shù)字簽名和文件混合一個整體數(shù)據(jù)包,通過對數(shù)字簽名的驗證,保證文件在傳輸過程中未被篡改。
3.驗證數(shù)據(jù)的完整性,如2同理,如果文件有丟失,簽名將不完整,解開數(shù)字簽名和之前的比較就會出現(xiàn)不一致。保證文件的完整。
4.仲裁機(jī)制,數(shù)字簽名也可以認(rèn)為是一個數(shù)字身份,通過唯一私鑰生成,在網(wǎng)絡(luò)上交易互動時要求收到一個數(shù)字簽名的回文,保證過程的完整。如果對交互過程出現(xiàn)抵賴,那么用數(shù)字便于仲裁。
5.保密性,對于有安全級別要求文件,數(shù)字簽名加密后傳輸,保證數(shù)據(jù)在被中途截取后無法獲得其真實內(nèi)容。有利于數(shù)據(jù)的安全性。
6.防重放:在數(shù)字簽名中,如果采用了對簽名報文添加流水號、時戳等技術(shù),可以防止重放攻擊。
7.多重數(shù)字簽名,通過多次數(shù)字簽名,對文件數(shù)據(jù)進(jìn)行多人認(rèn)證。
數(shù)字簽名整個過程驗證簡單,只需要公鑰、私鑰進(jìn)行加解密的驗證,和傳統(tǒng)簽名不一致,一般都會看到電視劇中常出現(xiàn)簽名驗證的時候需要專業(yè)的筆記簽證專家,采用數(shù)字簽名節(jié)省了驗證流程和成本。
從數(shù)字簽名過程來簡單理解下原理。
所謂數(shù)字簽名就是附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作的密碼變換。這種數(shù)據(jù)或變換允許數(shù)據(jù)單元的接收者用以確認(rèn)數(shù)據(jù)單元的來源和數(shù)據(jù)單元的完整性并保護(hù)數(shù)據(jù),防止被人(例如接收者)進(jìn)行偽造。它是對電子形式的消息進(jìn)行簽名的一種方法,一個簽名消息能在一個通信網(wǎng)絡(luò)中傳輸。
1.一段需發(fā)送的數(shù)據(jù)經(jīng)過hash計算生成一份摘要。
2.摘要通過發(fā)送者私鑰進(jìn)行加密。
3.發(fā)送者將使用私鑰加密后的摘要和報文,生成一段待發(fā)送的數(shù)據(jù)包。數(shù)字簽名即為經(jīng)過私鑰加密后的加密摘要。
4.接收者使用之前一樣的hash算法對報文計算摘要。
5.接收者再通過發(fā)送者公鑰對摘要進(jìn)行加密計算D。
6.接收者通過發(fā)送者公鑰對數(shù)字簽名進(jìn)行解密D’。
7.兩者進(jìn)行比較即可驗證。
實現(xiàn)數(shù)字簽名有很多方法,數(shù)字簽名采用較多的是公鑰加密方式,如基于RSA Date Security 公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美國標(biāo)準(zhǔn)與技術(shù)協(xié)會公布了數(shù)字簽名標(biāo)準(zhǔn)而使公鑰加密技術(shù)廣泛應(yīng)用。公鑰加密系統(tǒng)采用的是非對稱加密算法。之前的文章對非對稱加密也有過說明,有興趣可以參考。它的主要方式是,報文的發(fā)送方從報文文本中生成一個128位的散列值(或報文摘要)。發(fā)送方用自己的私人密鑰對這個散列值進(jìn)行加密來形成發(fā)送方的數(shù)字簽名。然后,這個數(shù)字簽名將作為報文的附件和報文一起發(fā)送給報文的接收方。報文的接收方首先從接收到的原始報文中計算出128位的散列值(或報文摘要),接著再用發(fā)送方的公用密鑰來對報文附加的數(shù)字簽名進(jìn)行解密。如果兩個散列值相同、那么接收方就能確認(rèn)該數(shù)字簽名是發(fā)送方的。通過數(shù)字簽名能夠?qū)崿F(xiàn)對原始報文的鑒別。上文數(shù)字簽名步驟解釋的也就是一種公鑰加密簽名的模式。當(dāng)然還有對稱加密方式,現(xiàn)在常用為非對稱加密算法。
結(jié)合區(qū)塊鏈技術(shù)看下公鑰、私鑰、地址、簽名的概念。
上圖是公鑰、私鑰、地址的生成過程,有了這三個要素,然后通過上述數(shù)字簽名的從過程發(fā)送信息摘要和數(shù)字簽名,驗證一致性。區(qū)塊鏈中目前用到的是橢圓曲線算法。
橢圓曲線算法:橢圓曲線算法ECC來做非對稱加密基礎(chǔ)算法。ECC的210位算法難度就相當(dāng)于RSA 2048的難度,性能則是數(shù)量級的區(qū)別。這里涉及到一些專業(yè)的數(shù)學(xué)知識點,橢圓算法ECC其實就是利用乘法容易,而除法難的特點,設(shè)計一個乘法:K = k * G,其中大K是公鑰,小k是私鑰,G是生成點。由私鑰推導(dǎo)公鑰很容易,只需要k個G相加即可。但是從公鑰推導(dǎo)私鑰很難,也就是無法計算公鑰K除以G。如果有興趣可以參考下文:
順便提一句目前國密算法的中M2算法也是基于該算法。
大致介紹了數(shù)字簽名和一些基本的數(shù)字簽名算法,簽名算法涉及到比較專業(yè)的數(shù)學(xué)知識,這里大致就介紹了功能和過程。