引言
RSA密碼系統是較早提出的壹種公開鑰密碼系統。1978年,美國麻省理工學院(MIT)的Rivest,Shamir和Adleman在題為《獲得數字簽名和公開鑰密碼系統的方法》的論文中提出了基於數論的非對稱(公開鑰)密碼體制,稱為RSA密碼體制。RSA是建立在“大整數的素因子分解是困難問題”基礎上的,是壹種分組密碼體制。
對文件進行加密只解決了傳送信息的保密問題,而防止他人對傳輸的文件進行破壞,以及如何確定發信人的身份還需要采取其它的手段,這壹手段就是數字簽名。在電子商務安全保密系統中,數字簽名技術有著特別重要的地位,在電子商務安全服務中的源鑒別、完整性服務、不可否認服務中,都要用到數字簽名技術。在電子商務中,完善的數字簽名應具備簽字方不能抵賴、他人不能偽造、在公證人面前能夠驗證真偽的能力。
實現數字簽名有很多方法,目前數字簽名采用較多的是公鑰加密技術,如基於RSA Date Security 公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美國標準與技術協會公布了數字簽名標準而使公鑰加密技術廣泛應用。公鑰加密系統采用的是非對稱加密算法。
目前的數字簽名是建立在公***密鑰體制基礎上,它是公用密鑰加密技術的另壹類應用。它的主要方式是,報文的發送方從報文文本中生成壹個128位的散列值(或報文摘要)。發送方用自己的私人密鑰對這個散列值進行加密來形成發送方的數字簽名。然後,這個數字簽名將作為報文的附件和報文壹起發送給報文的接收方。報文的接收方首先從接收到的原始報文中計算出128位的散列值(或報文摘要),接著再用發送方的公用密鑰來對報文附加的數字簽名進行解密。如果兩個散列值相同、那麽接收方就能確認該數字簽名是發送方的。通過數字簽名能夠實現對原始報文的鑒別。
在書面文件上簽名是確認文件的壹種手段,其作用有兩點:第壹,因為自己的簽名難以否認,從而確認了文件已簽署這壹事實;第二,因為簽名不易仿冒,從而確定了文件是真的這壹事實。
數字簽名與書面文件簽名有相同之處,采用數字簽名,也能確認以下兩點:第壹,信息是由簽名者發送的;第二,信息自簽發後到收到為止未曾作過任何修改。這樣數字簽名就可用來防止電子信息因易被修改而有人作偽,或冒用別人名義發送信息。或發出(收到)信件後又加以否認等情況發生。
應用廣泛的數字簽名方法主要有三種,即:RSA簽名、DSS簽名和Hash簽名。這三種算法可單獨使用,也可綜合在壹起使用。數字簽名是通過密碼算法對數據進行加、解密變換實現的,用DES算去、RSA算法都可實現數字簽名。但三種技術或多或少都有缺陷,或者沒有成熟的標準。
用RSA或其它公開密鑰密碼算法的最大方便是沒有密鑰分配問題(網絡越復雜、網絡用戶越多,其優點越明顯)。因為公開密鑰加密使用兩個不同的密鑰,其中有壹個是公開的,另壹個是保密的。公開密鑰可以保存在系統目錄內、未加密的電子郵件信息中、電話黃頁(商業電話)上或公告牌裏,網上的任何用戶都可獲得公開密鑰。而私有密鑰是用戶專用的,由用戶本身持有,它可以對由公開密鑰加密信息進行解密。
RSA算法中數字簽名技術實際上是通過壹個哈希函數來實現的。數字簽名的特點是它代表了文件的特征,文件如果發生改變,數字簽名的值也將發生變化。不同的文件將得到不同的數字簽名。壹個最簡單的哈希函數是把文件的二進制碼相累加,取最後的若幹位。哈希函數對發送數據的雙方都是公開的。
DSS數字簽名是由美國國家標準化研究院和國家安全局***同開發的。由於它是由美國政府頒布實施的,主要用於與美國政府做生意的公司,其他公司則較少使用,它只是壹個簽名系統,而且美國政府不提倡使用任何削弱政府竊聽能力的加密軟件,認為這才符合美國的國家利益。
Hash簽名是最主要的數字簽名方法,也稱之為數字摘要法(Digital Digest)或數字指紋法(Digital Finger Print)。它與RSA數字簽名是單獨的簽名不同,該數字簽名方法是將數字簽名與要發送的信息緊密聯系在壹起,它更適合於電子商務活動。將壹個商務合同的個體內容與簽名結合在壹起,比合同和簽名分開傳遞,更增加了可信度和安全性。數字摘要(Digital Digest)加密方法亦稱安全Hash編碼法(SHA:Secure Hash Algorithm)或MD5(MD Standard For Message Digest),由RonRivest所設計。該編碼法采用單向Hash函數將需加密的明文“摘要”成壹串128bit的密文,這壹串密文亦稱為數字指紋(Finger Print),它有固定的長度,且不同的明文摘要必定壹致。這樣這串摘要使可成為驗證明文是否是“真身”的“指紋”了。
只有加入數字簽名及驗證才能真正實現在公開網絡上的安全傳輸。加入數字簽名和驗證的文件傳輸過程如下:
發送方首先用哈希函數從原文得到數字簽名,然後采用公開密鑰體系用發達方的私有密鑰對數字簽名進行加密,並把加密後的數字簽名附加在要發送的原文後面;
發送壹方選擇壹個秘密密鑰對文件進行加密,並把加密後的文件通過網絡傳輸到接收方;
發送方用接收方的公開密鑰對密秘密鑰進行加密,並通過網絡把加密後的秘密密鑰傳輸到接收方;
接受方使用自己的私有密鑰對密鑰信息進行解密,得到秘密密鑰的明文;
接收方用秘密密鑰對文件進行解密,得到經過加密的數字簽名;
接收方用發送方的公開密鑰對數字簽名進行解密,得到數字簽名的明文;
接收方用得到的明文和哈希函數重新計算數字簽名,並與解密後的數字簽名進行對比。如果兩個數字簽名是相同的,說明文件在傳輸過程中沒有被破壞。
如果第三方冒充發送方發出了壹個文件,因為接收方在對數字簽名進行解密時使用的是發送方的公開密鑰,只要第三方不知道發送方的私有密鑰,解密出來的數字簽名和經過計算的數字簽名必然是不相同的。這就提供了壹個安全的確認發送方身份的方法。
安全的數字簽名使接收方可以得到保證:文件確實來自聲稱的發送方。鑒於簽名私鑰只有發送方自己保存,他人無法做壹樣的數字簽名,因此他不能否認他參與了交易。
數字簽名的加密解密過程和私有密鑰的加密解密過程雖然都使用公開密鑰體系,但實現的過程正好相反,使用的密鑰對也不同。數字簽名使用的是發送方的密鑰對,發送方用自己的私有密鑰進行加密,接收方用發送方的公開密鑰進行解密。這是壹個壹對多的關系:任何擁有發送方公開密鑰的人都可以驗證數字簽名的正確性,而私有密鑰的加密解密則使用的是接收方的密鑰對,這是多對壹的關系:任何知道接收方公開密鑰的人都可以向接收方發送加密信息,只有唯壹擁有接收方私有密鑰的人才能對信息解密。在實用過程中,通常壹個用戶擁有兩個密鑰對,壹個密鑰對用來對數字簽名進行加密解密,壹個密鑰對用來對私有密鑰進行加密解密。這種方式提供了更高的安全性。