国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

數(shù)字簽名及其實現(xiàn)

2012-12-29 07:23朱文艷
關(guān)鍵詞:數(shù)字簽名公鑰校驗

朱文艷

(勝利石油管理局 海洋鉆井公司,山東 東營 257000)

數(shù)字簽名及其實現(xiàn)

朱文艷

(勝利石油管理局 海洋鉆井公司,山東 東營 257000)

隨著計算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)以及其他高科技技術(shù)的發(fā)展,信息的安全性、數(shù)據(jù)的保密性也越來越重要。以Visual C++6.0為開發(fā)工具,開發(fā)數(shù)字簽名的簽名和認(rèn)證程序。結(jié)果表明,開發(fā)的程序能夠?qū)ξ谋旧傻臄?shù)字摘要通過簽名算法進(jìn)行簽名,并對簽名值利用認(rèn)證算法進(jìn)行認(rèn)證,判斷簽名的有效性,保證數(shù)據(jù)的完整性、發(fā)送信息的不可否認(rèn)性和身份的確定性。

數(shù)字簽名;數(shù)字摘要;簽名算法;認(rèn)證

1 研究目的

隨著油田協(xié)同辦公平臺研究的不斷深入,領(lǐng)導(dǎo)簽批業(yè)務(wù)呈擴(kuò)大化的趨勢,網(wǎng)上簽批作為其中重要的一環(huán),如果解決不好勢必影響整個辦公系統(tǒng)的效率,將先進(jìn)的網(wǎng)上簽批技術(shù)融合到協(xié)同辦公系統(tǒng),能夠提高網(wǎng)上審批的安全性和權(quán)威性,拓展辦公系統(tǒng)現(xiàn)有網(wǎng)上審批功能,提高辦公效率,逐步深入實現(xiàn)數(shù)字化辦公。因此需要對網(wǎng)絡(luò)簽批業(yè)務(wù)進(jìn)行整體規(guī)劃,實現(xiàn)統(tǒng)一簽批模式、統(tǒng)一安全認(rèn)證。為此,一種用來保證信息完整性的安全技術(shù)——數(shù)字簽名技術(shù)成為人們非常關(guān)心的話題。本文在數(shù)字簽名技術(shù)的原理和數(shù)字簽名中的簽名和認(rèn)證過程的基礎(chǔ)上,以Visual C++6.0為開發(fā)工具,實現(xiàn)數(shù)字簽名的簽名和認(rèn)證程序,對文本生成的數(shù)字摘要通過簽名算法進(jìn)行簽名,并對簽名值利用認(rèn)證算法進(jìn)行認(rèn)證,判斷簽名的有效性。

2 數(shù)字簽名的理論知識

數(shù)字簽名是通過一個單向函數(shù)對要傳送的報文進(jìn)行處理得到的用以認(rèn)證報文來源并核實報文是否發(fā)生變化的一個字母數(shù)字串[1]。

在傳統(tǒng)的辦公系統(tǒng)中,通常都利用書面文件的親筆簽名或印章來規(guī)定契約性的責(zé)任,在協(xié)同辦公平臺中,傳送的文件是通過電子簽名證明當(dāng)事人身份與數(shù)據(jù)真實性的,數(shù)據(jù)加密是保護(hù)數(shù)據(jù)的最基本方法,但也只能防止第三者獲得真實數(shù)據(jù)。電子簽名則可以解決否認(rèn)、偽造、篡改及冒充等問題,具體要求:發(fā)送者事后不能否認(rèn)發(fā)送的報文簽名、接收者能夠核實發(fā)送者發(fā)送的報文簽名、接收者不能偽造發(fā)送者的報文簽名、接收者不能對發(fā)送者的報文進(jìn)行部分篡改、網(wǎng)絡(luò)中的某一用戶不能冒充另一用戶作為發(fā)送者或接收者。

3 數(shù)字簽名相關(guān)技術(shù)

實現(xiàn)數(shù)字簽名有很多方法,目前數(shù)字簽名采用較多的是公鑰加密技術(shù),如基于RSA Date Security公司的 PKCS(public key cryptography standards)、Digital Signature Algorithm、x.509、PGP(pretty good privacy)。1994年美國標(biāo)準(zhǔn)與技術(shù)協(xié)會公布了數(shù)字簽名標(biāo)準(zhǔn)(DSS)而使公鑰加密技術(shù)廣泛應(yīng)用。&127公鑰加密系統(tǒng)采用的是非對稱加密算法。

3.1 用非對稱加密算法進(jìn)行數(shù)字簽名

3.1.1 算法的含義

此算法使用兩個密鑰:公開密鑰(public key)和私有密鑰(private key),&127;分別用于對數(shù)據(jù)的加密和解密,即如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私有密鑰才能進(jìn)行解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,則只有用對應(yīng)的公開密鑰才能解密。

3.1.2 簽名和驗證過程

(1)發(fā)送方首先用公開的單向函數(shù)對報文進(jìn)行一次變換,得到數(shù)字簽名,然后利用私有密鑰對數(shù)字簽名進(jìn)行加密后附在報文之后一同發(fā)出。

(2)接收方用發(fā)送方的公開密鑰對數(shù)字簽名進(jìn)行解密變換,得到一個數(shù)字簽名的明文。發(fā)送方的公鑰是由一個可信賴的技術(shù)管理機(jī)構(gòu)即驗證機(jī)構(gòu)(CA:certification authority)發(fā)布的。

(3)接收方將得到的明文通過單向函數(shù)進(jìn)行計算,同樣得到一個數(shù)字簽名,再將兩個數(shù)字簽名進(jìn)行對比,如果相同,則證明簽名有效,否則無效。

這種方法使任何擁有發(fā)送方公開密鑰的人都可以驗證數(shù)字簽名的正確性。由于發(fā)送方私有密鑰的保密性,使得接收方既可以根據(jù)驗證結(jié)果來拒收該報文,也能使其無法偽造報文簽名及對報文進(jìn)行修改,原因是數(shù)字簽名是對整個報文進(jìn)行的,是一組代表報文特征的定長代碼,同一個人對不同的報文將產(chǎn)生不同的數(shù)字簽名。

3.2 用對稱加密算法進(jìn)行數(shù)字簽名

3.2.1 算法的含義

對稱加密算法所用的加密密鑰和解密密鑰通常是相同的,即使不同也可以很容易地由其中的任意一個推導(dǎo)出另一個。在此算法中,加、解密雙方所用的密鑰都要保守秘密。由于計算速度快而廣泛應(yīng)用于對大量數(shù)據(jù)如文件的加密過程中,如RD4和DES。

3.2.2 簽名和驗證過程

Lamport發(fā)明了稱為Lamport-Diffie的對稱加密算法:利用一組長度是報文的比特數(shù)(n)兩倍的密鑰A,來產(chǎn)生對簽名的驗證信息,即隨機(jī)選擇2n個數(shù)B,由簽名密鑰對這2n個數(shù)B進(jìn)行一次加密變換,得到另一組2n個數(shù)C。

(1)發(fā)送方從報文分組M的第一位開始,依次檢查M的第i位,若為0時,取密鑰A的第i位,若為1則取密鑰A的第i+1位;直至報文全部檢查完畢。所選取的n個密鑰位形成了最后的簽名。

(2)接收方對簽名進(jìn)行驗證時,也是首先從第一位開始依次檢查報文M,如果M的第i位為0時,它就認(rèn)為簽名中的第I組信息是密鑰A的第i位,若為1則為密鑰A的第i+1位;直至報文全部驗證完畢后,就得到了n個密鑰,由于接收方具有發(fā)送方的驗證信息C,所以可以利用得到的n個密鑰檢驗驗證信息,從而確認(rèn)報文是否是由發(fā)送方所發(fā)送[1]。

這種方法是逐位進(jìn)行簽名的,只要有一位被改動過,接收方就得不到正確的數(shù)字簽名,因此其安全性較好,其缺點是簽名太長,對報文先進(jìn)行壓縮再簽名,可以減少簽名的長度。另外,簽名密鑰及相應(yīng)的驗證信息不能重復(fù)使用,否則極不安全。

3.3 認(rèn)證產(chǎn)品

認(rèn)證產(chǎn)品可分兩大類:一是用戶認(rèn)證,主要是通過單獨(dú)簽名訪問網(wǎng)絡(luò)資源;二是對象認(rèn)證,即判定傳遞信息和文件的認(rèn)證及其真實性。數(shù)字簽名技術(shù)就主要用于信息、文件以及其他存儲在網(wǎng)上的傳輸對象的認(rèn)證。AT&T Government Market的Secret Agent便通過將數(shù)字簽發(fā)的文檔作為E-mail消息的文件附件來發(fā)表的形式,將現(xiàn)有客戶機(jī)運(yùn)行的環(huán)境E-mail系統(tǒng) 、Web瀏覽器等應(yīng)用密切地結(jié)合在一起;Regnoc Software的Signature使用OLE 2.0可對Windows下的任何文本作數(shù)字簽名;ViaCrypt的ViaCrypt PGP可從傳遞信息的應(yīng)用中切割文本至Windows或Macintosh裁剪板,在那里對它進(jìn)行數(shù)字簽名后將它粘貼到傳遞信息中。

4 加密驗證算法

數(shù)字簽名的算法很多,應(yīng)用最為廣泛的三種是:Hash簽名、DSS簽名、RSA簽名。

4.1 Hash簽名

Hash簽名不屬于強(qiáng)計算密集型算法,應(yīng)用較廣泛。很多少量現(xiàn)金付款系統(tǒng),如DEC的Millicent和Cyber Cash的Cyber Coin等都使用Hash簽名。使用較快的算法,可以降低服務(wù)器資源的消耗,減輕中央服務(wù)器的負(fù)荷。Hash的主要局限是接收方必須持有用戶密鑰的副本以檢驗簽名,因為雙方都知道生成簽名的密鑰,較容易攻破,存在偽造簽名的可能。如果中央或用戶計算機(jī)中有一個被攻破,那么其安全性就受到了威脅[2]。

4.2 DSS和RSA簽名

DSS和RSA采用了公鑰算法,不存在Hash的局限性。RSA是最流行的一種加密標(biāo)準(zhǔn),許多產(chǎn)品的內(nèi)核中都有RSA的軟件和類庫,早在Web飛速發(fā)展之前,RSA數(shù)據(jù)安全公司就負(fù)責(zé)數(shù)字簽名軟件與Macintosh操作系統(tǒng)的集成,在Apple的協(xié)作軟件Power Talk上還增加了簽名拖放功能,用戶只要把需要加密的數(shù)據(jù)拖到相應(yīng)的圖標(biāo)上,就完成了電子形式的數(shù)字簽名。RSA與 Microsoft、IBM、Sun和Digital都簽訂了許可協(xié)議,使在其生產(chǎn)線上加入了類似的簽名特性。與DSS不同,RSA既可以用來加密數(shù)據(jù),也可以用于身份認(rèn)證。和Hash簽名相比,在公鑰系統(tǒng)中,由于生成簽名的密鑰只存儲于用戶的計算機(jī)中,安全系數(shù)大一些。

數(shù)字簽名的保密性很大程度上依賴于公開密鑰。數(shù)字認(rèn)證是基于安全標(biāo)準(zhǔn)、協(xié)議和密碼技術(shù)的電子證書,用以確立一個人或服務(wù)器的身份,它把一對用于信息加密和簽名的電子密鑰捆綁在一起,保證了這對密鑰真正屬于指定的個人和機(jī)構(gòu)。數(shù)字認(rèn)證由驗證機(jī)構(gòu)CA進(jìn)行電子化發(fā)布或撤消公鑰驗證,信息接收方可以從CA Web站點上下載發(fā)送方的驗證信息。

JSR-105 API可以完成上節(jié)所述的簽名及其校驗,所有這些功能都封裝在了六個Java API包中。概括起來,每種簽名都要有以下這幾個步驟:

步驟1:加載一個XMLSignatureFactory對象,后面我們創(chuàng)建Reference元素對象、SignedInfo元素對象、KeyInfo元素對象、XMLSignature元素對象都要直接或者間接用到這個工廠類對象。其典型的創(chuàng)建語句為:

XMLSignatureFactory fac=XMLSignatureFactory.getInstance(“DOM”);

步驟2:使用前一步驟得到的工廠類對象創(chuàng)建Reference對象,給它指定計算摘要的算法。其典型創(chuàng)建語句(以下為創(chuàng)建Enveloping簽名的做法)為:

Referenceref=fac.new Reference(“#object”,

fac.new Digest Method(Digest Method.SHA1,null));

步驟3:使用第1步得到的工廠類實例創(chuàng)建SignedInfo對象,給它指定正規(guī)化算法和簽名的算法。其典型的創(chuàng)建語句為:

SignedInfo si=fac.new SignedInfo(

fac.new Canonicalization Method(

Canonicalization Method.INCLUSIVE_WITH COMMENTS, (C14NMethodParameterSpec)null),

fac.newSignature Method(Signature Method.RSASHA1,null),Collections.singleton List(ref));

步驟4:創(chuàng)建KeyInfo對象,給他設(shè)置簽名算法的公鑰以作驗證之用。其典型的創(chuàng)建語句為:

KeyInfo

ki=kif.new KeyInfo(Collections.singleton List(kv));

步驟5:使用第1步得到的工廠類實例創(chuàng)建XMLSignature對象。其典型的創(chuàng)建語句為:

XMLSignature

signature = fac.new XMLSignature(si,ki,Collections.singleton List(obj),null,null);

步驟6:創(chuàng)建簽名上下文對象DOMSignContext,設(shè)置簽名用的私鑰。其典型的創(chuàng)建語句為:

DOMSignContext signContext=

new DOMSignContext(kp.getPrivate(),doc);

步驟7:簽名。其典型的執(zhí)行語句為:

signature.sign(signContext);

對于三種簽名,它們都要執(zhí)行上面的步驟,所不同的是在設(shè)置簽名數(shù)據(jù)來源上,只要把Reference對象構(gòu)造成具有不同數(shù)據(jù)來源的情況就可以了。

簽名的校驗過程與簽名過程類似,也有幾個必經(jīng)步驟。

步驟1:讀入要校驗的XML文件,解析,找到文件中的簽名元素。

步驟2:加載一個XMLSignatureFactory對象,后面各步驟中將用到這個對象。

步驟3:創(chuàng)建一個DOMValidateContext對象,給他指定密鑰選擇器和解析得到的XML文檔中的簽名元素。其典型的創(chuàng)建語句為:

DOMValidateContext valContext=

new DOMValidateContext(new

Key ValueKeySelector(),nl.item(0));

步驟4:根據(jù)校驗上下文的信息利用第2步得到的工廠對象重新安排XML簽名,得到一個可以用來校驗的XMLSignature對象。其典型的執(zhí)行語句為:

XMLSignature

signature=fac.unmarshal XMLSignature(val-Context);

步驟5:根據(jù)當(dāng)前的校驗上下文信息執(zhí)行核心校驗。其典型的執(zhí)行語句為:

Boolean core Validity=signature.validate

(valContext);

4.3 JSR-105 API的應(yīng)用方案及其實現(xiàn)基本數(shù)字簽名

XML數(shù)字簽名可以實現(xiàn)網(wǎng)絡(luò)環(huán)境中對特定URI的數(shù)據(jù)資源的簽名,也可以對XML文檔簽名,還可以對放入XML文檔里面的數(shù)據(jù)元素來簽名,因而以XML文檔來組織數(shù)據(jù)進(jìn)行交換將具有較高安全可靠性。因此網(wǎng)絡(luò)中的數(shù)據(jù)資源在被傳播、擴(kuò)散的過程中可以用XML數(shù)字簽名與校驗的方式來提高其有效性,從而提高網(wǎng)絡(luò)數(shù)據(jù)的可信任度。

這里實現(xiàn)了一個應(yīng)用程序?qū)τ脩糁付ǖ牡木W(wǎng)上文件進(jìn)行簽名及校驗,對現(xiàn)有的XML文件進(jìn)行簽名與校驗,還可以對其他即時數(shù)據(jù)進(jìn)行簽名(圖1)。

圖1 XML數(shù)字簽名的實現(xiàn)

盲簽名:盲簽名是指消息擁有者的目的是讓簽名人對該消息簽字,但不讓簽名者知道消息的具體內(nèi)容,簽名保證在某一時刻以公證人的資格證實這個消息的存在。盲簽名包括盲化消息、簽名、對簽名去盲、驗證簽名有效性幾個步驟,這里只討論一種利用XML數(shù)字簽名機(jī)制實現(xiàn)的盲簽名如何用現(xiàn)有的XML數(shù)字簽名實現(xiàn)(以下假定Alice為消息擁有者,Bob為簽名者)[3]。

利用XML數(shù)字簽名機(jī)制實現(xiàn)的盲簽名:Alice選擇隨機(jī)大數(shù)n和待簽名的消息M∈Z*n,隨機(jī)數(shù)r,∈Zn,計算m′=Mr mod n,將m′傳給Bob。

Bob對盲信息進(jìn)行XML數(shù)字簽名(采用RSA-SHA1算法)并將XML簽名產(chǎn)生的文件傳給Alice。Alice將M與XML文件一并作為簽名。

驗證:驗證者從Alice那里得到r和n,計算出盲信息m′,將它與XML文件中被簽名信息比較,若相等則繼續(xù)進(jìn)行XML數(shù)字簽名核心驗證,若核心驗證通過則最后對信息M的數(shù)字簽名驗證通過,否則簽名驗證失敗。

驗證階段需要向消息擁有者詢問盲信息產(chǎn)生所需的隨機(jī)數(shù)r和n。因此消息擁有者每次讓簽名者簽名完成之后要保留r和n,因而,這是受到很多限制的盲簽名。由于XML數(shù)字簽名簽名時要對所簽信息利用指定的算法轉(zhuǎn)化,因而使得XML數(shù)字簽名并不像普通方式下的數(shù)字簽名那么單純。要實現(xiàn)更加復(fù)雜的簽名方式必須對XML數(shù)字簽名的很多細(xì)節(jié)很清楚(圖2)。

圖2 XML盲簽名的實現(xiàn)

5 數(shù)字簽名的發(fā)展前景展望

生成和驗證數(shù)字簽名的工具需要完善,只有廣泛使用SSL(安全套接層)建立安全鏈接的 Web瀏覽器,才可能頻繁用到數(shù)字簽名技術(shù)。基于數(shù)字簽名技術(shù)來提升業(yè)務(wù)辦理信息化水平,保障領(lǐng)導(dǎo)、職能部門網(wǎng)上簽批的安全性和信息傳輸?shù)耐暾裕荒軌蛟谟吞飬f(xié)同辦公平臺的流程審批、費(fèi)用簽批以及文件下發(fā)流轉(zhuǎn)中得到應(yīng)用。

[1] 張先紅.數(shù)字簽名原理與技術(shù)[M].北京:機(jī)械工業(yè)出版社,2004:19-28.

[2] 朱少彰.信息安全概論[M].北京:北京郵電大學(xué)出版社,2006:116-120.

[3] 袁曉宇,張其善.基于ECDSA的電子簽章系統(tǒng)研究[J].計算機(jī)工程與設(shè)計,2005,26(5):1233-1235.

TP309.2 < class="emphasis_bold">[文獻(xiàn)標(biāo)識碼]A[文章編號]

1673-5935(2012)01-0027-04

2011-11-14

朱文艷(1979-),女,山東臨沂人,勝利石油管理局海洋鉆井公司經(jīng)濟(jì)師,主要從事計算機(jī)應(yīng)用開發(fā)研究。

[責(zé)任編輯] 劉 穎

猜你喜歡
數(shù)字簽名公鑰校驗
使用Excel朗讀功能校驗工作表中的數(shù)據(jù)
基于正交拉丁方理論的數(shù)字簽名分組批量驗證
案例教學(xué)法在公鑰密碼體制難點教學(xué)中的應(yīng)用——以ssh服務(wù)中雙向認(rèn)證為例
交通運(yùn)輸行業(yè)數(shù)字簽名系統(tǒng)的設(shè)計與實現(xiàn)分析
淺析計算機(jī)安全防護(hù)中數(shù)字簽名技術(shù)的應(yīng)用
神奇的公鑰密碼
爐溫均勻性校驗在鑄鍛企業(yè)的應(yīng)用
國密SM2密碼算法的C語言實現(xiàn)
P2X7 receptor antagonism in amyotrophic lateral sclerosis
電子式互感器校驗方式研究
新田县| 青海省| 龙岩市| 资溪县| 海原县| 揭西县| 高碑店市| 噶尔县| 洞头县| 罗江县| 乌兰察布市| 乌什县| 博罗县| 措美县| 紫阳县| 晋城| 临汾市| 天台县| 襄垣县| 玛多县| 色达县| 南安市| 闸北区| 民丰县| 武宣县| 石首市| 峨边| 南安市| 织金县| 阳新县| 温泉县| 连江县| 米泉市| 青田县| 禄丰县| 东乌珠穆沁旗| 宜章县| 湖口县| 苏州市| 陈巴尔虎旗| 虎林市|