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