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