nagle算法_數(shù)字簽名算法分析與Hash簽名
本文關(guān)鍵詞:數(shù)字簽名算法,由筆耕文化傳播整理發(fā)布。
數(shù)字簽名簡介
我們對加解密算法已經(jīng)有了一定理解,可以進(jìn)一步討論"數(shù)字簽名"(注意不要與數(shù)字認(rèn)證混淆)的問題了,即如何給一個計算機(jī)文件進(jìn)行簽字。數(shù)字簽字可以用對稱算法實現(xiàn),也可以用公鑰算法實現(xiàn)。但前者除了文件簽字者和文件接受者雙方,還需要第三方認(rèn)證,較麻煩;通過公鑰加密算法的實現(xiàn)方法,由于用秘密密鑰加密的文件,需要靠公開密鑰來解密,因此這可以作為數(shù)字簽名,簽名者用秘密密鑰加密一個簽名(可以包括姓名、證件號碼、短信息等信息),接收人可以用公開的、自己的公開密鑰來解密,如果成功,就能確保信息來自該公開密鑰的所有人。
公鑰密碼體制實現(xiàn)數(shù)字簽名的基本原理很簡單,假設(shè)A要發(fā)送一個電子文件給B,A、B雙方只需經(jīng)過下面三個步驟即可:
1. A用其私鑰加密文件,這便是簽字過程
2. A將加密的文件送到B
3. B用A的公鑰解開A送來的文件
這樣的簽名方法是符合可靠性原則的。即:
簽字是可以被確認(rèn)的,
簽字是無法被偽造的,
簽字是無法重復(fù)使用的,
文件被簽字以后是無法被篡改的,
簽字具有無可否認(rèn)性,
數(shù)字簽名就是通過一個單向函數(shù)對要傳送的報文進(jìn)行處理得到的用以認(rèn)證報文來源并核實報文是否發(fā)生變化的一個字母數(shù)字串。用這幾個字符串來代替書寫簽名或印章,起到與書寫簽名或印章同樣的法律效用。國際社會已開始制定相應(yīng)的法律、法規(guī),把數(shù)字簽名作為執(zhí)法的依據(jù)。
數(shù)字簽名的實現(xiàn)方法
實現(xiàn)數(shù)字簽名有很多方法,目前數(shù)字簽名采用較多的是公鑰加密技術(shù),如基于RSA Data Security公司的PKCS(Public Key Cryptography Standards)、DSA(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)用。同時應(yīng)用散列算法(Hash)也是實現(xiàn)數(shù)字簽名的一種方法。
非對稱密鑰密碼算法進(jìn)行數(shù)字簽名
算法的含義:
非對稱密鑰密碼算法使用兩個密鑰:公開密鑰和私有密鑰,分別用于對數(shù)據(jù)的加密和解密,即如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私有密鑰才能進(jìn)行解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,則只有用對應(yīng)的公開密鑰才能解密。
使用公鑰密碼算法進(jìn)行數(shù)字簽名通用的加密標(biāo)準(zhǔn)有: RSA,DSA,Diffie-Hellman等。
簽名和驗證過程:
發(fā)送方(甲)首先用公開的單向函數(shù)對報文進(jìn)行一次變換,得到數(shù)字簽名,然后利用私有密鑰對數(shù)字簽名進(jìn)行加密后附在報文之后一同發(fā)出。
接收方(乙)用發(fā)送方的公開密鑰對數(shù)字簽名進(jìn)行解密交換,得到一個數(shù)字簽名的明文。發(fā)送方的公鑰可以由一個可信賴的技術(shù)管理機(jī)構(gòu)即認(rèn)證中心(CA)發(fā)布的。
接收方將得到的明文通過單向函數(shù)進(jìn)行計算,同樣得到一個數(shù)字簽名,再將兩個數(shù)字簽名進(jìn)行對比,如果相同,則證明簽名有效,否則無效。
這種方法使任何擁有發(fā)送方公開密鑰的人都可以驗證數(shù)字簽名的正確性。由于發(fā)送方私有密鑰的保密性,使得接受方既可以根據(jù)結(jié)果來拒收該報文,也能使其無法偽造報文簽名及對報文進(jìn)行修改,原因是數(shù)字簽名是對整個報文進(jìn)行的,是一組代表報文特征的定長代碼,同一個人對不同的報文將產(chǎn)生不同的數(shù)字簽名。這就解決了銀行通過網(wǎng)絡(luò)傳送一張支票,而接收方可能對支票數(shù)額進(jìn)行改動的問題,也避免了發(fā)送方逃避責(zé)任的可能性。
對稱密鑰密碼算法進(jìn)行數(shù)字簽名
算法含義
對稱密鑰密碼算法所用的加密密鑰和解密密鑰通常是相同的,即使不同也可以很容易地由其中的任意一個推導(dǎo)出另一個。在此算法中,加、解密雙方所用的密鑰都要保守秘密。由于計算機(jī)速度而廣泛應(yīng)用于大量數(shù)據(jù)如文件的加密過程中,如RD4和DES,用IDEA作數(shù)字簽名是不提倡的。
使用分組密碼算法數(shù)字簽名通用的加密標(biāo)準(zhǔn)有:DES,Tripl-DES,RC2,RC4,CAST等。
簽名和驗證過程
Lamport發(fā)明了稱為Lamport-Diffle的對稱算法:利用一組長度是報文的比特數(shù)(n)兩倍的密鑰A,來產(chǎn)生對簽名的驗證信息,即隨機(jī)選擇2n個數(shù)B,由簽名密鑰對這2n個數(shù)B進(jìn)行一次加密交換,得到另一組2n個數(shù)C。
發(fā)送方從報文分組M的第一位開始,依次檢查M的第I位,若為0時,取密鑰A的第i位,若為1則取密鑰A的第i+1位;直至報文全部檢查完畢。所選取的n個密鑰位形成了最后的簽名。
接受方對簽名進(jìn)行驗證時,也是首先從第一位開始依次檢查報文M,如果M的第i位為0時,它就認(rèn)為簽名中的第i組信息是密鑰A的第i位,若為1則為密鑰A的第i+1位;直至報文全部驗證完畢后,就得到了n個密鑰,由于接受方具有發(fā)送方的驗證信息C,所以可以利用得到的n個密鑰檢驗驗證信息,從而確認(rèn)報文是否是由發(fā)送方所發(fā)送。
這種方法由于它是逐位進(jìn)行簽名的,只有有一位被改動過,接受方就得不到正確的數(shù)字簽名,因此其安全性較好,其缺點是:簽名太長(對報文先進(jìn)行壓縮再簽名,可以減少簽名的長度);簽名密鑰及相應(yīng)的驗證信息不能重復(fù)使用,否則極不安全。
結(jié)合對稱與非對稱算法的改進(jìn)
對稱算法與非對稱算法各有利弊,所以結(jié)合各自的優(yōu)缺點進(jìn)行改進(jìn),可以用下面的模塊進(jìn)行說明:
Hash算法進(jìn)行數(shù)字簽名
Hash算法也稱作散列算法或報文摘要,Hash算法將在數(shù)字簽名算法中詳細(xì)說明。
Hash算法數(shù)字簽字通用的加密標(biāo)準(zhǔn)有: SHA-1,MD5等。
數(shù)字簽名算法
數(shù)字簽名的算法很多,應(yīng)用最為廣泛的三種是: Hash簽名、DSS簽名、RSA簽名。這三種算法可單獨使用,也可綜合在一起使用。數(shù)字簽名是通過密碼算法對數(shù)據(jù)進(jìn)行加、解密變換實現(xiàn)的,常用的HASH算法有MD2、MD5、SHA-1,用DES算法、RSA算法都可實現(xiàn)數(shù)字簽名。但或多或少都有缺陷,或者沒有成熟的標(biāo)準(zhǔn)。
Hash簽名
Hash簽名是最主要的數(shù)字簽名方法,也稱之為數(shù)字摘要法(digital digest)、數(shù)字指紋法(digital finger print)。它與RSA數(shù)字簽名是單獨的簽名不同,該數(shù)字簽名方法是將數(shù)字簽名與要發(fā)送的信息緊密聯(lián)系在一起,它更適合于電子商務(wù)活動。將一個商務(wù)合同的個體內(nèi)容與簽名結(jié)合在一起,比合同和簽名分開傳遞,更增加了可信度和安全性。下面我們將詳細(xì)介紹Hash簽名中的函數(shù)與算法。
單向函數(shù)
單向函數(shù)的概念是公開密鑰密碼的核心。盡管它本身并不是一個協(xié)議,但對大多數(shù)協(xié)議來說卻是一個基本結(jié)構(gòu)模塊。
單向函數(shù)的概念是計算起來相對容易,但求逆卻非常困難。也就是說,已知x,我們很容易計算f(x)。但已知f(x),卻難于計算出x。在這里,"難"定義成:即使世界上所有的計算機(jī)都用來計算,從f(x)計算出x也要花費數(shù)百萬年的時間。
打碎盤子就是一個很好的單向函數(shù)的例子。把盤子打碎成數(shù)千片碎片是很容易的事情,然而,要把所有這些碎片再拼成為一個完整的盤子,卻是非常困難的事情。
這聽起來很好,但事實上卻不能證實它的真實性。如果嚴(yán)格地按數(shù)學(xué)定義,我們不能證明單向函數(shù)的存在性,同時也還沒有實際的證據(jù)能夠構(gòu)造出單向函數(shù)。即使這樣,還是有很多函數(shù)看起來和感覺像單向函數(shù):我們能夠有效地計算它們,且至今還不知道有什么辦法能容易地求出它們的逆。例如,在有限域中x2是很容易計算的,但計算x1/2卻難得多。所以我們假定也盡量構(gòu)造單向函數(shù)存在。
陷門單向函數(shù)是有一個秘密陷門的一類特殊單向函數(shù)。它在一個方向上易于計算而反方向卻難于計算。但是,如果你知道那個秘密,你也能很容易在另一個方向計算這個函數(shù)。也就是說, 已知x,易于計算f(x),而已知f(x),卻難于計算x。然而,有一些秘密信息y,一旦給出f(x)和y,就很容易計算x。
拆開表是很好的單向陷門函數(shù)的例子。很容易把表拆成數(shù)百片小片,把這些小片組裝成能夠工作的表是非常困難的。然而,通過秘密信息(表的裝配指令),就很容易把表還原。
單向Hash函數(shù)
單向Hash函數(shù)有很多名字:壓縮函數(shù)、縮短函數(shù)、消息摘要、指紋、密碼校驗和、信息完整性檢驗(DIC)、操作檢驗碼(MDC)。不管你怎么叫,它是現(xiàn)代密碼學(xué)的中心。單向Hash函數(shù)是許多協(xié)議的另一個結(jié)構(gòu)模塊。
Hash函數(shù)長期以來一直在計算機(jī)科學(xué)中使用,無論從數(shù)學(xué)上或別的角度看,Hash函數(shù)就是把可變輸入長度串(叫做預(yù)映射,Pre-image)轉(zhuǎn)換成固定長度(經(jīng)常更短)輸出串(叫做hash值)的一種函數(shù)。簡單的Hash函數(shù)就是對預(yù)映射的處理,并且返回由所有輸入字節(jié)異或組成的一字節(jié)。
這兒的關(guān)鍵就是采集預(yù)映射的指紋:產(chǎn)生一個值,這個值能夠指出候選預(yù)映射是否與真實的預(yù)映射有相同的值。因為Hash函數(shù)是典型的多到一的函數(shù),我們不能用它們來確定兩個串一定相同,但我們可用它來得到準(zhǔn)確性的合理保證。
本文關(guān)鍵詞:數(shù)字簽名算法,由筆耕文化傳播整理發(fā)布。
,本文編號:129870
本文鏈接:http://sikaile.net/wenshubaike/xingzhengshiwu/129870.html