【密碼學(xué)】 一篇文章講透數(shù)字簽名
數(shù)字簽名介紹
?? 數(shù)字簽名(又稱公鑰數(shù)字簽名)是只有信息的發(fā)送者才能產(chǎn)生的別人無(wú)法偽造的一段數(shù)字串,這段數(shù)字串同時(shí)也是對(duì)信息的發(fā)送者發(fā)送信息真實(shí)性的一個(gè)有效證明。它是一種類似寫在紙上的普通的物理簽名,但是在使用了公鑰加密領(lǐng)域的技術(shù)來(lái)實(shí)現(xiàn)的,用于鑒別數(shù)字信息的方法。一套數(shù)字簽名通常定義兩種互補(bǔ)的運(yùn)算,一個(gè)用于簽名,另一個(gè)用于驗(yàn)證。數(shù)字簽名是非對(duì)稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用。
?? 數(shù)字簽名可以識(shí)別消息是否被篡改, 并驗(yàn)證消息的可靠性, 也可以防止否認(rèn)。 在之前的博客文章中,我們介紹過(guò)消息認(rèn)證碼,它也可以防止消息被篡改,驗(yàn)證消息可靠性。 而數(shù)字簽名與消息認(rèn)證碼的最大不同在于, 數(shù)字簽名算法可以防止否認(rèn), 因?yàn)樗借€只有簽名者持有, 而消息認(rèn)證碼中的密鑰由雙方共享。常用的數(shù)字簽名方法有三種,分別是RSA、 DSA和ECDSA。
數(shù)字簽名原理
數(shù)字簽名類似于現(xiàn)實(shí)世界中的蓋章和簽字, 它具有以下四大特征:
- 可驗(yàn)證性——接收者可以驗(yàn)證發(fā)送者簽名的真實(shí)性和有效性;
- 不可偽造性——除簽名者之外, 任何人不可偽造簽名;
- 不可否認(rèn)性——發(fā)送方不能否認(rèn)自己所發(fā)送的簽名;
- 數(shù)據(jù)完整性——能夠提供對(duì)所簽消息的完整性檢驗(yàn)。
下面通過(guò)一個(gè)示例來(lái)說(shuō)明數(shù)字簽名是如何防止否認(rèn)的:
Alice通過(guò)密鑰生成算法生成密鑰對(duì);
2) Alice將公鑰發(fā)送給Bob, 私鑰自己保留;
3) Alice使用單向數(shù)列函數(shù)計(jì)算出合同的摘要值;
4) Alice使用私鑰對(duì)消息摘要值進(jìn)行簽名;
5) Alice將合同和簽名值分別發(fā)送至Bob;
6) Bob使用單向散列函數(shù)計(jì)算出合同的消息摘要值;
7) Bob使用Alice的公鑰對(duì)簽名進(jìn)行驗(yàn)證, 若驗(yàn)證通過(guò)則說(shuō)明合同內(nèi)容完整且來(lái)自于Alice。
??從本應(yīng)用場(chǎng)景中可以看出, 雖然數(shù)字簽名的工作模式與消息認(rèn)證碼較為相似, 但不同的是數(shù)字簽名可防止否認(rèn)。 消息認(rèn)證碼使用的密鑰為對(duì)稱密鑰, 如果基于消息認(rèn)證碼完成消息的認(rèn)證過(guò)程, 一旦Alice否認(rèn)曾經(jīng)向Bob發(fā)送過(guò)預(yù)訂合同, 那么Bob將無(wú)法對(duì)Alice進(jìn)行指控。 而數(shù)字簽名算法中私鑰只有Alice持有, 其他人無(wú)法對(duì)簽名進(jìn)行偽造, 這一特點(diǎn)也使得Alice無(wú)法對(duì)這一過(guò)程進(jìn)行否認(rèn)。
RSA數(shù)字簽名算法
??RSA數(shù)字簽名算法基于RSA密鑰系統(tǒng)實(shí)現(xiàn), 在第8章中已經(jīng)詳細(xì)介紹了RSA算法。 RSA數(shù)字簽名過(guò)程與RSA加解密過(guò)程較為相似, 但公鑰和私鑰的使用方法卻存在明顯區(qū)別。為了方便描述RSA數(shù)字簽名過(guò)程, 此處依然借助假想場(chǎng)景加以說(shuō)明, 在假想場(chǎng)景中:
1) Alice通過(guò)RSA密鑰生成算法生成密鑰對(duì);
2) Alice將公鑰發(fā)送給Bob, 私鑰自己保留;
3) Alice使用RSA私鑰對(duì)消息進(jìn)行加密操作, 并將消息和簽名結(jié)果分別發(fā)送給Bob;
4) Bob使用RSA公鑰對(duì)簽名進(jìn)行解密操作, 判斷解密結(jié)果和消
息是否一致。
??此處Alice使用私鑰對(duì)消息執(zhí)行加密操作, 該加密操作可理解為對(duì)消息進(jìn)行數(shù)字簽名, 該私鑰可稱為簽名密鑰; Bob收到消息之后使用Alice的公鑰執(zhí)行解密操作, 該解密操作可理解為對(duì)消息執(zhí)行數(shù)字簽名驗(yàn)證, 該公鑰可稱為驗(yàn)證密鑰。 總之, 在RSA數(shù)字簽名中, 私鑰用于加密消息, 公鑰用于解密消息; 而在RSA加密中, 公鑰用于加密消息, 而私鑰用于解密消息。 無(wú)論如何, 公鑰總是可以公開的, 而私鑰卻不能泄露。
RSA數(shù)字簽名詳細(xì)說(shuō)明
RSA簽名
RSA數(shù)字簽名和RSA加密過(guò)程恰好相反, 簽名過(guò)程使用私鑰對(duì)數(shù)據(jù)執(zhí)行加密操作, RSA數(shù)字簽名表達(dá)式如下, 其中s為簽名結(jié)果, m為消息(消息可以是明文也可以是消息摘要) 。
s ≡ mdmod n
###RSA驗(yàn)證簽名
??同樣, 驗(yàn)證簽名過(guò)程使用公鑰對(duì)簽名數(shù)據(jù)進(jìn)行解密, RSA驗(yàn)證簽名表達(dá)式如下, 其中s為簽名結(jié)果, m’為解密結(jié)果。 驗(yàn)證簽名過(guò)程判斷m’≡mmod n, 成立則為有效簽名, 不成立則簽名無(wú)效。
m' ≡ semod n
?? 由于參數(shù)e的值遠(yuǎn)小于參數(shù)d, 所以RSA驗(yàn)證簽名的計(jì)算量小于RSA簽名, 也就說(shuō)RSA驗(yàn)證簽名速度快于簽名速度。
ECDSA數(shù)字簽名
??ECDSA算法基于橢圓曲線離散對(duì)數(shù)問題, 使用較短的密鑰長(zhǎng)度便可提供與RSA簽名算法或DSA算法等同的安全等級(jí), 密鑰長(zhǎng)度為160256位的橢圓曲線算法與密鑰長(zhǎng)度為10243072位的非橢圓曲線算法安全性相同。 橢圓曲線的基礎(chǔ)知識(shí)可以參考我之前的博客。
??ECDSA數(shù)字簽名算法和DSA算法在概念上有緊密聯(lián)系, 但其計(jì)算過(guò)程是在橢圓曲線群上完成的, 所以計(jì)算過(guò)程相差較大。 ECDSA算法與DSA算法相似, 該算法只能提供數(shù)字簽名功能, 而不能用于加密或密鑰交換。
ECDSA生成簽名
??ECDSA的簽名結(jié)果由兩部分構(gòu)成: r和s。 其中r和s的長(zhǎng)度與n相同, 例如在secp256r1曲線中, n的長(zhǎng)度為256比特, r和s也分別為256比特, 不使用任何編碼方式的情況下簽名總長(zhǎng)度為512比特。 假設(shè)消息為M, 單向散列函數(shù)為HASH()。 使用ECDSA對(duì)消息進(jìn)行簽名的計(jì)
算過(guò)程如下:
1) 選擇一個(gè)隨機(jī)數(shù)k, 滿足條件0<k<n;
2) 計(jì)算R=k·G;
3) 計(jì)算z=HASH(M);
4) 設(shè)置r=xR, xR為點(diǎn)R的橫坐標(biāo);
5) 計(jì)算s≡(z+d·r)k-1mod n;
6) 得到簽名(r,s)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-738376.html
ECDSA驗(yàn)證簽名
在驗(yàn)證簽名之前需確保已經(jīng)得到簽名者的公鑰、 消息以及簽名信息(r,s)。 驗(yàn)證簽名的過(guò)程如下:
1) 計(jì)算w≡s-1mod n;
2) 計(jì)算z=HASH(M);
3) 計(jì)算u1≡(wz)mod n;
4) 計(jì)算u2≡(wr)mod n;
5) 計(jì)算P=u1·g+u2·Q;
6) 如果xP≡r mod n, 則簽名有效, 否則簽名無(wú)效, 其中xP為點(diǎn)P的橫坐標(biāo)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-738376.html
到了這里,關(guān)于【密碼學(xué)】 一篇文章講透數(shù)字簽名的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!