導(dǎo)讀:在現(xiàn)實社會中菲驴,簽名作為簽名者身份的一種證明,簽名代表對簽名文件的認(rèn)可骑冗,不可抵賴赊瞬。理論上簽名是可信、不可偽造的≡羯現(xiàn)在網(wǎng)絡(luò)環(huán)境越來越廣泛巧涧,有大量的信息通過網(wǎng)絡(luò)傳播,并且會保存在上面遥倦。這些電子數(shù)據(jù)顯然無法人工簽名谤绳,數(shù)字簽名就孕育而生占锯。本文將介紹什么是數(shù)字簽名、數(shù)字簽名的特性與相關(guān)技術(shù)缩筛。
什么是數(shù)字簽名
數(shù)字簽名(又稱公鑰數(shù)字簽名消略、電子簽章):是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領(lǐng)域的技術(shù)實現(xiàn)瞎抛,用于鑒別數(shù)字信息的方法艺演。一套數(shù)字簽名通常定義兩種互補(bǔ)的運(yùn)算,一個用于簽名桐臊,另一個用于驗證胎撤。就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明断凶。在區(qū)塊鏈技術(shù)中伤提,數(shù)字簽名涉及到公鑰、私鑰和錢包等工具认烁,它有兩個作用:一是證明消息確實是由信息發(fā)送方簽名并發(fā)出來的肿男,二是確定消息的完整性,沒有被篡改過砚著。
公鑰(Public Key)與私鑰(Private Key)
公鑰(Public Key)與私鑰(Private Key)是通過一種算法得到的一個密鑰對(即一個公鑰和一個私鑰)次伶,公鑰是密鑰對中公開的部分,私鑰則是非公開的部分稽穆。公鑰通常用于加密會話密鑰冠王、驗證數(shù)字簽名,或加密可以用相應(yīng)的私鑰解密的數(shù)據(jù)舌镶。通過這種算法得到的密鑰對能保證在世界范圍內(nèi)是唯一的柱彻。使用這個密鑰對的時候,如果用其中一個密鑰加密一段數(shù)據(jù)餐胀,必須用另一個密鑰解密哟楷。比如用公鑰加密數(shù)據(jù)就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密否灾,否則解密將不會成功卖擅。
數(shù)字簽名流程
假如Alice想給Bob傳遞一個署名的消息的話,那么她可以為她的消息計算一個散列值(Message digest)墨技,然后用她的私鑰“加密”(這個散列值并將這個“署名”加在消息的后面惩阶。這個消息只有用她的公鑰才能被解密。Bob獲得這個消息后可以用Alice的公鑰“解密”(如同前面“解密消息”的步驟)這個散列值扣汪,然后將這個數(shù)據(jù)與他自己為這個消息計算的散列值相比較断楷。假如兩者相符的話,那么Bob就可以知道發(fā)信人持有Alice的私鑰崭别,以及這個消息在傳播路徑上沒有被篡改過冬筒。
1恐锣、生成公鑰和私鑰對
2、通過發(fā)送者的私鑰對消息的哈希值進(jìn)行加密舞痰,生成簽名信息土榴。
3、把加密后的哈希值和待發(fā)送的信息連同公鑰一起發(fā)給接受者匀奏。
4鞭衩、接收者通過發(fā)送方的公鑰對加密的哈希值進(jìn)行解密学搜,還原出哈希值娃善。
5、對簽名信息進(jìn)行驗證瑞佩。
數(shù)字簽名技術(shù)實現(xiàn)
數(shù)字簽名算法依靠公鑰加密技術(shù)來實現(xiàn)的聚磺。在公鑰加密技術(shù)里,每一個使用者有一對密鑰:一把公鑰和一把私鑰炬丸。公鑰可以自由發(fā)布瘫寝,但私鑰則秘密保存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現(xiàn)稠炬。普通的數(shù)字簽名算法包括三種算法:
1焕阿、一種密碼生成算法
2、標(biāo)記算法
3首启、驗證算法
數(shù)字簽名算法
常見的數(shù)字簽名算法主要有RSA暮屡、DSA、ECDSA三種毅桃。
1. RSA數(shù)字簽名算法
RSA是目前計算機(jī)密碼學(xué)中最經(jīng)典算法褒纲,也是目前為止使用最廣泛的數(shù)字簽名算法,RSA數(shù)字簽名算法的密鑰實現(xiàn)與RSA的加密算法是一樣的钥飞,算法的名稱都叫RSA莺掠。密鑰的產(chǎn)生和轉(zhuǎn)換都是一樣的,包括在售的所有SSL數(shù)字證書读宙、代碼簽名證書彻秆、文檔簽名以及郵件簽名大多都采用RSA算法進(jìn)行加密。
RSA數(shù)字簽名算法主要包括MD和SHA兩種算法结闸,例如我們熟知的MD5和SHA-256即是這兩種算法中的一類唇兑。
2. DSA數(shù)字簽名算法
DSA全稱Digital Signature Algorithm,DSA只是一種算法膀估,和RSA不同之處在于它不能用作加密和解密幔亥,也不能進(jìn)行密鑰交換,只用于簽名察纯,所以它比RSA要快很多帕棉,其安全性與RSA相比差不多针肥。DSA的一個重要特點(diǎn)是兩個素數(shù)公開,這樣香伴,當(dāng)使用別人的p和q時慰枕,即使不知道私鑰,你也能確認(rèn)它們是否是隨機(jī)產(chǎn)生的即纲,還是作了手腳具帮。RSA算法卻做不到。
DSA的整個簽名算法流程如下:
a. 發(fā)送方使用SHA-1和SHA-2編碼將發(fā)送內(nèi)容加密產(chǎn)生的數(shù)字摘要低斋;
b. 發(fā)送方用自己的專用密鑰對摘要進(jìn)行再次加密得到數(shù)字簽名蜂厅;
c. 發(fā)送方將原文和加密后的摘要傳給接收方;
d. 接收方使用發(fā)送方提供的密鑰對進(jìn)行解密 膊畴,同時對收到的內(nèi)容用SHA-1/SHA-2編碼加密產(chǎn)生同樣的摘要掘猿;
e. 接收方再將解密后的摘要和d步驟中加密產(chǎn)生的摘要進(jìn)行比對,如果兩者一至唇跨,則說明傳輸過程的信息沒有被破壞和篡改稠通,否則傳輸信息則不安全。
3. ECDSA橢圓曲線數(shù)字簽名算法
ECDSA是用于數(shù)字簽名买猖,是ECC與DSA的結(jié)合改橘,整個簽名過程與DSA類似,所不一樣的是簽名中采取的算法為ECC玉控,最后簽名出來的值也是分為r,s飞主。而ECC(全稱Elliptic Curves Cryptography)是一種橢圓曲線密碼編碼學(xué)。
ECDH每次用一個固定的DH key奸远,導(dǎo)致不能向前保密(forward secrecy)既棺,所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH則是基于ECC的DH( Diffie-Hellman)密鑰交換算法懒叛。
ECC與RSA 相比丸冕,有以下的優(yōu)點(diǎn):
a. 相同密鑰長度下,安全性能更高薛窥,如160位ECC已經(jīng)與1024位RSA胖烛、DSA有相同的安全強(qiáng)度。
b. 計算量小诅迷,處理速度快佩番,在私鑰的處理速度上(解密和簽名),ECC遠(yuǎn) 比RSA罢杉、DSA快得多趟畏。
c. 存儲空間占用小 ECC的密鑰尺寸和系統(tǒng)參數(shù)與RSA、DSA相比要小得多滩租, 所以占用的存儲空間小得多赋秀。
d. 帶寬要求低使得ECC具有廣泛得應(yīng)用前景利朵。