序:這篇文章我用了近壹周的時間完成,其中涉及到的RSA算法已經在上壹篇《公鑰密碼體系》中詳細的介紹過,目前數字簽名中人們使用很多的還是512位與1024位的RSA算法。
摘要: 數字簽字和認證機構是電子商務的核心技術。數字簽名作為目前Internet中電子商務重要的技術,不斷地進行改進,標準化。本文從數字簽名的意義出發,詳細介紹了數字簽名中涉及到的內容與算法,並自行結合進行改進。
關鍵詞:Internet 公鑰加密 Hash函數 電子商務 加密 數字簽名
數字簽名簡介
我們對加解密算法已經有了壹定理解,可以進壹步討論"數字簽名"(註意不要與數字認證混淆)的問題了,即如何給壹個計算機文件進行簽字。數字簽字可以用對稱算法實現,也可以用公鑰算法實現。但前者除了文件簽字者和文件接受者雙方,還需要第三方認證,較麻煩;通過公鑰加密算法的實現方法,由於用秘密密鑰加密的文件,需要靠公開密鑰來解密,因此這可以作為數字簽名,簽名者用秘密密鑰加密壹個簽名(可以包括姓名、證件號碼、短信息等信息),接收人可以用公開的、自己的公開密鑰來解密,如果成功,就能確保信息來自該公開密鑰的所有人。
公鑰密碼體制實現數字簽名的基本原理很簡單,假設A要發送壹個電子文件給B,A、B雙方只需經過下面三個步驟即可:
1. A用其私鑰加密文件,這便是簽字過程
2. A將加密的文件送到B
3. B用A的公鑰解開A送來的文件
這樣的簽名方法是符合可靠性原則的。即:
簽字是可以被確認的,
簽字是無法被偽造的,
簽字是無法重復使用的,
文件被簽字以後是無法被篡改的,
簽字具有無可否認性,
數字簽名就是通過壹個單向函數對要傳送的報文進行處理得到的用以認證報文來源並核實報文是否發生變化的壹個字母數字串。用這幾個字符串來代替書寫簽名或印章,起到與書寫簽名或印章同樣的法律效用。國際社會已開始制定相應的法律、法規,把數字簽名作為執法的依據。
數字簽名的實現方法
實現數字簽名有很多方法,目前數字簽名采用較多的是公鑰加密技術,如基於RSA Data Security公司的PKCS(Public Key Cryptography Standards)、DSA(Digital Signature Algorithm)、x.509、PGP(Pretty Good Privacy)。1994年美國標準與技術協會公布了數字簽名標準(DSS)而使公鑰加密技術廣泛應用。同時應用散列算法(Hash)也是實現數字簽名的壹種方法。
非對稱密鑰密碼算法進行數字簽名
算法的含義:
非對稱密鑰密碼算法使用兩個密鑰:公開密鑰和私有密鑰,分別用於對數據的加密和解密,即如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能進行解密;如果用私有密鑰對數據進行加密,則只有用對應的公開密鑰才能解密。
使用公鑰密碼算法進行數字簽名通用的加密標準有: RSA,DSA,Diffie-Hellman等。
簽名和驗證過程:
發送方(甲)首先用公開的單向函數對報文進行壹次變換,得到數字簽名,然後利用私有密鑰對數字簽名進行加密後附在報文之後壹同發出。
接收方(乙)用發送方的公開密鑰對數字簽名進行解密交換,得到壹個數字簽名的明文。發送方的公鑰可以由壹個可信賴的技術管理機構即認證中心(CA)發布的。
接收方將得到的明文通過單向函數進行計算,同樣得到壹個數字簽名,再將兩個數字簽名進行對比,如果相同,則證明簽名有效,否則無效。
這種方法使任何擁有發送方公開密鑰的人都可以驗證數字簽名的正確性。由於發送方私有密鑰的保密性,使得接受方既可以根據結果來拒收該報文,也能使其無法偽造報文簽名及對報文進行修改,原因是數字簽名是對整個報文進行的,是壹組代表報文特征的定長代碼,同壹個人對不同的報文將產生不同的數字簽名。這就解決了銀行通過網絡傳送壹張支票,而接收方可能對支票數額進行改動的問題,也避免了發送方逃避責任的可能性。
對稱密鑰密碼算法進行數字簽名
算法含義
對稱密鑰密碼算法所用的加密密鑰和解密密鑰通常是相同的,即使不同也可以很容易地由其中的任意壹個推導出另壹個。在此算法中,加、解密雙方所用的密鑰都要保守秘密。由於計算機速度而廣泛應用於大量數據如文件的加密過程中,如RD4和DES,用IDEA作數字簽名是不提倡的。
使用分組密碼算法數字簽名通用的加密標準有:DES,Tripl-DES,RC2,RC4,CAST等。
簽名和驗證過程
Lamport發明了稱為Lamport-Diffle的對稱算法:利用壹組長度是報文的比特數(n)兩倍的密鑰A,來產生對簽名的驗證信息,即隨機選擇2n個數B,由簽名密鑰對這2n個數B進行壹次加密交換,得到另壹組2n個數C。
發送方從報文分組M的第壹位開始,依次檢查M的第I位,若為0時,取密鑰A的第i位,若為1則取密鑰A的第i+1位;直至報文全部檢查完畢。所選取的n個密鑰位形成了最後的簽名。
接受方對簽名進行驗證時,也是首先從第壹位開始依次檢查報文M,如果M的第i位為0時,它就認為簽名中的第i組信息是密鑰A的第i位,若為1則為密鑰A的第i+1位;直至報文全部驗證完畢後,就得到了n個密鑰,由於接受方具有發送方的驗證信息C,所以可以利用得到的n個密鑰檢驗驗證信息,從而確認報文是否是由發送方所發送。
這種方法由於它是逐位進行簽名的,只有有壹位被改動過,接受方就得不到正確的數字簽名,因此其安全性較好,其缺點是:簽名太長(對報文先進行壓縮再簽名,可以減少簽名的長度);簽名密鑰及相應的驗證信息不能重復使用,否則極不安全。
結合對稱與非對稱算法的改進
對稱算法與非對稱算法各有利弊,所以結合各自的優缺點進行改進,可以用下面的模塊進行說明:
Hash算法進行數字簽名
Hash算法也稱作散列算法或報文摘要,Hash算法將在數字簽名算法中詳細說明。
Hash算法數字簽字通用的加密標準有: SHA-1,MD5等。
數字簽名算法
數字簽名的算法很多,應用最為廣泛的三種是: Hash簽名、DSS簽名、RSA簽名。這三種算法可單獨使用,也可綜合在壹起使用。數字簽名是通過密碼算法對數據進行加、解密變換實現的,常用的HASH算法有MD2、MD5、SHA-1,用DES算法、RSA算法都可實現數字簽名。但或多或少都有缺陷,或者沒有成熟的標準。
Hash簽名
Hash簽名是最主要的數字簽名方法,也稱之為數字摘要法(digital digest)、數字指紋法(digital finger print)。它與RSA數字簽名是單獨的簽名不同,該數字簽名方法是將數字簽名與要發送的信息緊密聯系在壹起,它更適合於電子商務活動。將壹個商務合同的個體內容與簽名結合在壹起,比合同和簽名分開傳遞,更增加了可信度和安全性。下面我們將詳細介紹Hash簽名中的函數與算法。