摘要:計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展使信息化成為現(xiàn)實(shí)的同時(shí),也引入了信息安全問題。數(shù)字簽名技術(shù)在身份認(rèn)證、數(shù)據(jù)完整性等方面具有其它技術(shù)所無法替代的作用,在信息安全領(lǐng)域得到廣泛的應(yīng)用。本文先介紹了數(shù)字簽名技術(shù)的相關(guān)背景,接著系統(tǒng)介紹了數(shù)字簽名的原理及其相關(guān)技術(shù),最后通過數(shù)字簽名的實(shí)現(xiàn)例子使讀者能深刻理解其實(shí)現(xiàn)原理和過程。
關(guān)鍵詞:數(shù)字簽名;加密技術(shù);認(rèn)證安全
中圖分類號:TP309.7文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2009)14-3638-03
The Principle and Implement for Digital Signature
LI Sha, ZOU Yong-jun
(Shanxi Radio TV University, Xi'an 710068, China)
Abstract: The information era has arrived with the quick development of computer and network technologies. Thus, the security problem of information has become the fundamental matter. The digital signatures have many applications in a lot of field for it cannot be substituted by other techniques in information security, including authentication, data integrity, and non-repudiation.
First, this paper introduces the research background of the digital signature. Then it introduces systematically the principle of the digital signature and relevant technology. At last, it demonstrated an simulation to understand the course of the digital signature more profound.
Key words: digital signature; encrypt technologies; certification security
1 引言
一直以來,人們對紙質(zhì)文件主要是通過手寫簽名或印章來驗(yàn)證其有效性。但隨著IT技術(shù)的發(fā)展,電子文檔將逐步代替紙質(zhì)的文件成為信息交流的主體。證明某一個電子文件是某作者所作的有效辦法是模擬普通的手寫簽名在電子文檔上進(jìn)行電子簽名,作者可以通過數(shù)字簽名表明目己的身份,讀者可以通過數(shù)字簽名驗(yàn)證作者的身份。
電子郵件是互聯(lián)網(wǎng)上最重要的應(yīng)用之一,傳統(tǒng)的電子郵件都是明文傳輸,并且發(fā)送方可以輕松地偽造自己的身份。隨著電子郵件的應(yīng)用擴(kuò)展到各種信息敏感領(lǐng)域,電子郵件的內(nèi)容保密和發(fā)送方身份確認(rèn)的重要性便逐步凸現(xiàn)出來。數(shù)字簽名能很好地解決電子郵件的身份確認(rèn)問題。
電子商務(wù)是互聯(lián)網(wǎng)上發(fā)展最快的應(yīng)用方向,而重要的商務(wù)信息具有敏感性和保密性,所以通常的商務(wù)信息在傳輸中要進(jìn)行加密,同時(shí),為了進(jìn)一步防止欺騙性的篡改,數(shù)字簽名是必不可少的。
2 數(shù)字簽名原理及作用
數(shù)字簽名是指附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作的密碼變換,這種數(shù)據(jù)或變換能使數(shù)據(jù)單元的接收者確認(rèn)數(shù)據(jù)單元的來源和數(shù)據(jù)的完整性,并保護(hù)數(shù)據(jù),防止被人進(jìn)行偽造。簽名機(jī)制的本質(zhì)特征是該簽名只有通過簽名者的私有信息才能產(chǎn)生,也就是說,一個簽名者的簽名只能唯一地由他自己產(chǎn)生。
數(shù)字簽名方案由簽署算法和驗(yàn)證算法組成,可以用五元組[P,A,K,S,V]表示。其中,P表示一切可能的消息;A表示一切可能的簽名集合;K表示有限密鑰空間;S表示簽名算法;V表示驗(yàn)證算法。
簽署流程:對于給定的k,有Sigk∈S,Sigk:P->A,對于任意x∈P,有s=Sigk(x),其中(x,s)發(fā)給簽名驗(yàn)證者。
驗(yàn)證流程:驗(yàn)證方有驗(yàn)證算法Verk,V滿足Verk:P->{真,假};收到(x,s)后計(jì)算Verk(x,y),若y=Sigk(x),則Verk(x,y)為真,否則為假。
其中:任意k∈K,Sigk和Verk多項(xiàng)式時(shí)間函數(shù);Verk為公開的函數(shù),Sigk為私密函數(shù)。
公鑰體系加密和數(shù)字簽名的差異:
1) 公鑰加密,發(fā)送方用接收方的公鑰進(jìn)行信息加密;接收方用其私鑰進(jìn)行信息解密;
2) 數(shù)字簽名:發(fā)送方用其私鑰對信息進(jìn)行加密;接收方用發(fā)送方的公鑰進(jìn)行信息解密,從而確認(rèn)信息的發(fā)送者身份。
數(shù)字簽名提供了一種安全的保障數(shù)據(jù)完整性和真實(shí)性的機(jī)制,可以檢驗(yàn)數(shù)據(jù)從數(shù)據(jù)源到目的地的傳輸過程中是否被篡改以及數(shù)據(jù)的真實(shí)來源。因此,它能夠下面的問題:
1) 身份認(rèn)證:收方通過發(fā)送方的數(shù)字簽名確認(rèn)發(fā)送方的身份;
2) 保密性:保證信息不被第三方知曉;
3) 完整性:保證信息無法被篡改;
4) 不可抵賴:簽發(fā)人一旦簽發(fā),就不能再否認(rèn)。
3 簽名算法
由于公鑰體系受計(jì)算速度的制約,直接使用公鑰體制對大文件進(jìn)行數(shù)字簽名是不可行的,通常的辦法是引入摘要函數(shù)(如Hash函數(shù)、散列函數(shù)),下面對幾種常用數(shù)字簽名算法進(jìn)行論述并比較。
1) RSA數(shù)字簽名算法
產(chǎn)生簽名與驗(yàn)證參數(shù):
a) 簽名人A選擇兩個大素?cái)?shù)p、q,計(jì)算n=pq及fi(n)=(p-1)(q-1);
b) 尋找e、d屬于Zn使?jié)M足(e,fi(n)=1及ed=1(mod fi(n));
c) 公開驗(yàn)證參數(shù){n,e}, A保存{p,q,d,fi(n)}作為秘密的簽名參數(shù);
d) 選用一通用的散列函數(shù)h( )。
簽名算法:
a) A將需簽名的文件m(含接收人、內(nèi)容、簽名人、日期等)編碼后映射成h(m);
b) 計(jì)算c1=(h(m))的d次方 mod p, c2=(h(m))的d次方mod q及簽名Sa(m)=(c1q1q+c2p1p) mod n,其中q1q=1 mod p,p1p=1 mod q;
c) 將{m, Sa(m)}發(fā)送至文件接收人B或仲裁人T(A、 B、T的含義下同)。
驗(yàn)證算法:
B(或T)檢驗(yàn)(Sa(m))的e次方=h(m) mod n是否成立,若成立則接收此文件及簽名,否則拒絕接收或宣布無效。
2) Rabin數(shù)字簽名算法
產(chǎn)生簽名與驗(yàn)證參數(shù):
a) A選擇兩個大素?cái)?shù)p、q,并計(jì)算n=pq;
b) 公開驗(yàn)證參數(shù)n,A保存{p,q}作為秘密的簽名參數(shù);
c) 選用一通用的散列函數(shù)h()。
簽名算法:
a) A將需簽名的文件m編碼后映射成h(m),選取a=bh(m)使?jié)M足(a/p)=(b/q)=1, b屬于{1,-1,2,-2},其中(/)為Legendre符號;
b) 計(jì)算c1=+a的(p+1)/4次方mod p,c2=+a的(q+1)/4次方mod q及簽名Sa(m)=(c1q1q+c2p1p) mod n。其中c1、c2固定一種取法,p1、p2滿足q1q=1 mod p,p1p= 1 mod q;
c) 將{m,Sa(m),b}發(fā)送至B或T。
驗(yàn)證算法:
B(或T)檢驗(yàn)(Sa(m))的二次方=bh(m) mod n是否成立,若成立則接收此文件及簽名,否則拒絕接收或宣布無效。
3) DSS數(shù)字簽名算法
產(chǎn)生簽名與驗(yàn)證參數(shù):
a) A選擇一個大素?cái)?shù)p, p-1應(yīng)具有大素?cái)?shù)因子q,選擇一個g屬于Zp使g的次數(shù)為q,選擇一個x屬于Zp,并計(jì)算y=g的x次方mod p;
b) 公開驗(yàn)證參數(shù){p,q,g,y), A保存{x}作為秘密的簽名參數(shù);
c) 選用一通用的散列函數(shù)h()。
簽名算法:
a) A將需簽名的文件m編碼后映射成h(m),任意選擇k屬于Zp,計(jì)算k的-1次方使k的-1次方k=1 mod q;
b) 計(jì)算r=(g的k次方mod p) mod q及s=k的-1次方(h(m)+xr) mod q;
c) 將{m,r,s)發(fā)送至B或T。
驗(yàn)證算法:
a) B(或T)先計(jì)算u=h(m)s的-1次方 mod q及v=rs的-1 次方mod q;
b) 檢驗(yàn)(g的u次方y(tǒng)的v次方mod p) mod q=r是否成立,若成立則接收此文件及簽名,否則拒絕接收或宣布無效。
4 數(shù)字簽名的實(shí)現(xiàn)
利用微軟的數(shù)字簽名工具可以實(shí)現(xiàn)測試版本的數(shù)字簽名,對正式對外頒發(fā)的軟件進(jìn)行數(shù)字簽名首先要向證書頒發(fā)機(jī)構(gòu)提出請求并獲得軟件發(fā)行證書。為此,必須生成一個密匙對并向證書頒發(fā)機(jī)構(gòu)提供標(biāo)識信息(如名字、地址和公匙),同時(shí)還必須作出在法律上具有約束力的保證,保證不能也不會分發(fā)含有病毒或?qū)⒁云渌绞綈阂鈸p害用戶的計(jì)算機(jī)或代碼的軟件。
在命令行模式下,微軟數(shù)字簽名工具使用方法如下:
1) 創(chuàng)建用于數(shù)字簽名的公鑰和私鑰對,并將其存儲在證書文件中。
輸入命令 “makecert -sv Test.pvk -n \"CN=Tester\" -ss My -r -b 01/01/1900 -e 01/01/9999”
其中:
-sv Test.pvk私匙文件名 Test.pvk;
-n \"CN= Tester \"其中的\" Tester \"就是簽名中顯示的證書所有人的名字;
-ss My指定生成后的證書保存在個人證書中;
-r證書是自己頒發(fā)給自己的;
-b/-e 證書的有效期,格式為 月/日/年,最低為1900年;
2) 創(chuàng)建發(fā)行者證書 (SPC)
輸入命令:“cert2spc c:\est.cer c:\est.spc”,在C:盤生成證書文件
發(fā)行者證書測試工具通過一個或多個 X.509 證書創(chuàng)建發(fā)行者證書 (SPC)。Cert2spc.exe 僅用于測試目的??梢詮淖C書頒發(fā)機(jī)構(gòu)(如 VeriSign 或 Thawte)獲得有效的 SPC。
3) 對文件進(jìn)行簽名
輸入命令:“signcode /spc c:\est.spc /k TEST c:\\Test.exe”,已經(jīng)成功對Test.exe文件簽名??梢酝ㄟ^文件的屬性查看數(shù)字簽名。
5 結(jié)束語
本文首先簡要介紹了數(shù)字簽名的原理、過程及相關(guān)技術(shù),在此基礎(chǔ)上介紹了微軟數(shù)字簽名工具的使用并實(shí)現(xiàn)簽名系統(tǒng)。隨著Internet技術(shù)和安全技術(shù)的發(fā)展和完善,數(shù)字簽名作為信息安全的一項(xiàng)重要技術(shù)將得到越來越廣泛的應(yīng)用。
參考文獻(xiàn):
[1] 張先紅.數(shù)字簽名原理及技術(shù)[M].北京:機(jī)械工業(yè)出版社,2004.
[2] 王尚平,王育民,張亞玲,等.基于DSA及RSA的證實(shí)數(shù)字簽名方案[J].軟件學(xué)報(bào),2003,14(3):588.
[3] Stallings W.密碼編碼學(xué)與網(wǎng)絡(luò)安全:原理與實(shí)踐[M].3版.北京:電子工業(yè)出版社,2004.
[4] Atreya M.數(shù)字簽名[M].賀軍,譯.北京:清華大學(xué)出版社,2003.