一、數字簽名的原理
數字簽名算法依靠公(gong)鑰(yao)(yao)加(jia)密技術(shu)來實現(xian)的。在公(gong)鑰(yao)(yao)加(jia)密技術(shu)里,每一(yi)個使用者有(you)一(yi)對(dui)密鑰(yao)(yao):一(yi)把公(gong)鑰(yao)(yao)和(he)一(yi)把私鑰(yao)(yao)。公(gong)鑰(yao)(yao)可(ke)以自由發布(bu),但私鑰(yao)(yao)則秘密保存;還(huan)有(you)一(yi)個要求就是要讓通過公(gong)鑰(yao)(yao)推算出私鑰(yao)(yao)的做法不可(ke)能實現(xian)。
普通的數字簽名算法包括三種算法:1、密碼生成算法(fa)。2、標記算(suan)法。3、驗(yan)證算法。
數(shu)字(zi)簽名技(ji)術(shu)大多基(ji)于哈(ha)希摘要(yao)和非對稱密(mi)(mi)鑰加(jia)密(mi)(mi)體制來實現。如(ru)果簽名者(zhe)想要(yao)對某個(ge)文件進行(xing)數(shu)字(zi)簽名,他(ta)必須(xu)首先從可信的第三(san)方機構(gou)(數(shu)字(zi)證書認(ren)證中心CA)取得私鑰和公鑰,這需要(yao)用(yong)到PKI技(ji)術(shu)。
1、有哈希算法(fa)的數(shu)字(zi)簽(qian)名與驗(yan)證
哈(ha)(ha)(ha)希(xi)(xi)函(han)(han)數(shu)(shu)(shu)(shu)是一(yi)種“壓縮函(han)(han)數(shu)(shu)(shu)(shu)”,利用(yong)哈(ha)(ha)(ha)希(xi)(xi)函(han)(han)數(shu)(shu)(shu)(shu)可以把任意長度的(de)(de)(de)輸(shu)入經(jing)由散列函(han)(han)數(shu)(shu)(shu)(shu)算法(fa)變換成(cheng)固(gu)定(ding)長度的(de)(de)(de)輸(shu)出,該輸(shu)出的(de)(de)(de)哈(ha)(ha)(ha)希(xi)(xi)值就(jiu)是消(xiao)息(xi)(xi)(xi)摘(zhai)要(yao),也稱數(shu)(shu)(shu)(shu)字(zi)(zi)(zi)摘(zhai)要(yao)。在(zai)正式的(de)(de)(de)數(shu)(shu)(shu)(shu)字(zi)(zi)(zi)簽(qian)名中,發(fa)(fa)送(song)方(fang)首先(xian)對(dui)(dui)發(fa)(fa)送(song)文(wen)件采用(yong)哈(ha)(ha)(ha)希(xi)(xi)算法(fa),得到一(yi)個(ge)(ge)固(gu)定(ding)長度的(de)(de)(de)消(xiao)息(xi)(xi)(xi)摘(zhai)要(yao)(Message Digest);再用(yong)自己的(de)(de)(de)私鑰(yao)(Secret key,SK)對(dui)(dui)消(xiao)息(xi)(xi)(xi)摘(zhai)要(yao)進(jin)(jin)行簽(qian)名,形成(cheng)發(fa)(fa)送(song)方(fang)的(de)(de)(de)數(shu)(shu)(shu)(shu)字(zi)(zi)(zi)簽(qian)名。數(shu)(shu)(shu)(shu)字(zi)(zi)(zi)簽(qian)名將作為(wei)隊件和原文(wen)一(yi)起發(fa)(fa)送(song)給接收(shou)方(fang);接收(shou)方(fang)首先(xian)用(yong)發(fa)(fa)送(song)方(fang)的(de)(de)(de)公鑰(yao)對(dui)(dui)數(shu)(shu)(shu)(shu)字(zi)(zi)(zi)簽(qian)名進(jin)(jin)行解密(mi)得到發(fa)(fa)送(song)方(fang)的(de)(de)(de)數(shu)(shu)(shu)(shu)字(zi)(zi)(zi)摘(zhai)要(yao),然后(hou)用(yong)相同(tong)的(de)(de)(de)哈(ha)(ha)(ha)希(xi)(xi)函(han)(han)數(shu)(shu)(shu)(shu)對(dui)(dui)原文(wen)進(jin)(jin)行哈(ha)(ha)(ha)希(xi)(xi)計算,得到一(yi)個(ge)(ge)新的(de)(de)(de)消(xiao)息(xi)(xi)(xi)摘(zhai)要(yao),最(zui)后(hou)將消(xiao)息(xi)(xi)(xi)摘(zhai)要(yao)與收(shou)到的(de)(de)(de)消(xiao)息(xi)(xi)(xi)摘(zhai)要(yao)做比較。
2、基于非(fei)對稱密(mi)鑰加(jia)密(mi)體(ti)制的數字(zi)簽名與驗證
發送方(fang)(fang)首先將原(yuan)(yuan)文用(yong)自己的(de)(de)私鑰加密得到數字(zi)(zi)簽名(ming),然后(hou)將原(yuan)(yuan)文和(he)數字(zi)(zi)簽名(ming)一起(qi)發送給接收(shou)方(fang)(fang)。接收(shou)方(fang)(fang)用(yong)發送方(fang)(fang)的(de)(de)公鑰對數字(zi)(zi)簽名(ming)進(jin)行解密,最后(hou)與(yu)原(yuan)(yuan)文進(jin)行比較,這(zhe)種(zhong)是(shi)電(dian)(dian)子商務(wu)、電(dian)(dian)子政務(wu)中應用(yong)普遍、技(ji)(ji)術成熟、可操作性(xing)強的(de)(de)一種(zhong)電(dian)(dian)子簽名(ming)方(fang)(fang)法。它采用(yong)了規范化的(de)(de)程序和(he)科學(xue)化的(de)(de)方(fang)(fang)法,用(yong)于鑒(jian)定簽名(ming)人(ren)的(de)(de)身(shen)份以及(ji)對一項電(dian)(dian)子數據內容的(de)(de)認可。使(shi)用(yong)數字(zi)(zi)簽名(ming)技(ji)(ji)術能夠驗證(zheng)文件的(de)(de)原(yuan)(yuan)文在傳輸(shu)過程中有無變(bian)動,確保傳輸(shu)電(dian)(dian)子文件的(de)(de)完整性(xing)、真實性(xing)和(he)不可抵賴性(xing)。
二、數字簽名的特點
每個(ge)人都(dou)有(you)一對“鑰(yao)匙”(數(shu)字(zi)身(shen)份(fen)),其中一個(ge)只有(you)她/他本人知道(私鑰(yao)),另一個(ge)公(gong)開的(de)(公(gong)鑰(yao))。簽名的(de)時(shi)候(hou)用私鑰(yao),驗證(zheng)(zheng)(zheng)簽名的(de)時(shi)候(hou)用公(gong)鑰(yao)。又因為任何人都(dou)可(ke)以落款聲稱她/他就(jiu)是(shi)你(ni),因此公(gong)鑰(yao)必須向接受者(zhe)信(xin)任的(de)人(身(shen)份(fen)認證(zheng)(zheng)(zheng)機構)來(lai)注(zhu)冊。注(zhu)冊后(hou)身(shen)份(fen)認證(zheng)(zheng)(zheng)機構給你(ni)發一數(shu)字(zi)證(zheng)(zheng)(zheng)書。對文件(jian)(jian)簽名后(hou),你(ni)把(ba)此數(shu)字(zi)證(zheng)(zheng)(zheng)書連同文件(jian)(jian)及簽名一起發給接受者(zhe),接受者(zhe)向身(shen)份(fen)認證(zheng)(zheng)(zheng)機構求(qiu)證(zheng)(zheng)(zheng)是(shi)否(fou)真地是(shi)用你(ni)的(de)密鑰(yao)簽發的(de)文件(jian)(jian)。
在通訊中使用數字簽名一(yi)般具(ju)有(you)以(yi)下特點:
1、鑒權
公(gong)鑰(yao)加密(mi)系(xi)統允許任何人在(zai)發送信(xin)(xin)息時使(shi)用公(gong)鑰(yao)進行加密(mi),接收信(xin)(xin)息時使(shi)用私鑰(yao)解密(mi)。當然,接收者不(bu)可能百分之百確(que)信(xin)(xin)發送者的(de)真實身份,而只能在(zai)密(mi)碼(ma)系(xi)統未被破(po)譯的(de)情況下才有(you)理由(you)確(que)信(xin)(xin)。
鑒權的(de)(de)(de)(de)重要性在財務數(shu)據上表現(xian)得尤(you)為(wei)突出。舉個例(li)子,假設一家銀行將指(zhi)令由它的(de)(de)(de)(de)分行傳(chuan)(chuan)輸(shu)到它的(de)(de)(de)(de)中央管理系統,指(zhi)令的(de)(de)(de)(de)格(ge)式是(shi)(a,b),其中a是(shi)賬戶(hu)的(de)(de)(de)(de)賬號,而b是(shi)賬戶(hu)的(de)(de)(de)(de)現(xian)有金額(e)。這(zhe)時一位遠程客戶(hu)可以先存入100元,觀(guan)察傳(chuan)(chuan)輸(shu)的(de)(de)(de)(de)結果,然后(hou)接二連三的(de)(de)(de)(de)發送格(ge)式為(wei)(a,b)的(de)(de)(de)(de)指(zhi)令。這(zhe)種方法被稱作重放攻擊(ji)。
2、完整性
傳輸數(shu)據(ju)的(de)雙方(fang)(fang)都總希望確認消息未在(zai)傳輸的(de)過程中被修(xiu)改(gai)。加密使得第(di)三方(fang)(fang)想要讀取數(shu)據(ju)十分困難,然(ran)(ran)而第(di)三方(fang)(fang)仍然(ran)(ran)能采取可(ke)(ke)行(xing)的(de)方(fang)(fang)法在(zai)傳輸的(de)過程中修(xiu)改(gai)數(shu)據(ju)。一個通(tong)俗(su)的(de)例子就是同形攻擊:回想一下,還是上面的(de)那家(jia)銀行(xing)從(cong)它(ta)的(de)分行(xing)向(xiang)它(ta)的(de)中央管(guan)理系統發送格式為(a,b)的(de)指(zhi)令,其(qi)中a是賬號,而b是賬戶中的(de)金額。一個遠(yuan)程客(ke)戶可(ke)(ke)以先存100元,然(ran)(ran)后攔截傳輸結果,再(zai)傳輸(a,b),這樣(yang)他就立刻變成百萬富(fu)翁了。
3、不可抵賴
在密文背景下,抵賴這個詞指的是不承認與消息有關的舉動(即聲稱消息來自第三方)。消息的接收方可以通過數字簽名來(lai)防止所有后續的抵賴行(xing)為(wei),因為(wei)接收方可以出(chu)示簽名(ming)給別人(ren)看(kan)來(lai)證明信息的來(lai)源。