數字簽名主要經(jīng)過(guò)以下幾個(gè)過(guò)程: 信息發(fā)送者使用一單向散列函數(HASH函數)對信息生成信息摘要; 信息發(fā)送者使用自己的私鑰簽名信息摘要; 信息發(fā)送者把信息本身和已簽名的信息摘要一起發(fā)送出去; 信息接收者通過(guò)使用與信息發(fā)送者使用的同一個(gè)單向散列函數(HASH函數)對接收的信息本身生成新的信息摘要,再使用信息發(fā)送者的公鑰對信息摘要進(jìn)行驗證,以確認信息發(fā)送者的身 份和信息是否被修改過(guò)。
數字加密主要經(jīng)過(guò)以下幾個(gè)過(guò)程: 當信息發(fā)送者需要發(fā)送信息時(shí),首先生成一個(gè)對稱(chēng)密鑰,用該對稱(chēng)密鑰加密要發(fā)送的報文; 信息發(fā)送者用信息接收者的公鑰加密上述對稱(chēng)密鑰; 信息發(fā)送者將第一步和第二步的結果結合在一起傳給信息接收者,稱(chēng)為數字信封; 信息接收者使用自己的私鑰解密被加密的對稱(chēng)密鑰,再用此對稱(chēng)密鑰解密被發(fā)送方加密的密文,得到真正的原文。 數字簽名和數字加密的過(guò)程雖然都使用公開(kāi)密鑰體系,但實(shí)現的過(guò)程正好相反,使用的密鑰對也不同。
數字簽名使用的是發(fā)送方的密鑰對,發(fā)送方用自己的私有密鑰進(jìn)行加密,接收方用發(fā)送方的公開(kāi)密鑰進(jìn)行解密,這是一個(gè)一對多的關(guān)系,任何擁有發(fā)送方公開(kāi)密鑰的人都可以驗證數字簽名的正確性。 數字加密則使用的是接收方的密鑰對,這是多對一的關(guān)系,任何知道接收方公開(kāi)密鑰的人都可以向接收方發(fā)送加密信息,只有唯一擁有接收方私有密鑰的人才能對信息解密。
另外,數字簽名只采用了非對稱(chēng)密鑰加密算法,它能保證發(fā)送信息的完整性、身份認證和不可否認性,而數字加密采用了對稱(chēng)密鑰加密算法和非對稱(chēng)密鑰加密算法相結合的方法,它能保證發(fā)送信息保密性。
簽字:
1、安裝驅動(dòng)程序
2、在已下載的安裝程序上點(diǎn)擊右鍵,選擇“屬性”
3、選擇“數字簽名”標簽,可看到該文件由目的公司簽名。
驗證:
1、在已下載的安裝程序上點(diǎn)擊右鍵,選擇“屬性”
2、點(diǎn)擊“詳細信息”,如軟件未被改動(dòng),則證書(shū)的狀態(tài)為“該數字簽名正常”;
3、點(diǎn)擊“查看證書(shū)”,可看到證書(shū)相關(guān)信息。
4、如果文件被非法篡改,在文件屬性里,“數字簽名”一欄仍顯示該文件有簽名,但詳細信息里會(huì )提示“該數字簽名無(wú)效”,查看證書(shū)里會(huì )提示“沒(méi)有驗證對象的數字簽名”,這時(shí)請立即刪除安裝程序并重新下載,然后重復以上的驗證步驟。
常用API java。
security。KeyPairGenerator 密鑰生成器類(lèi)public static KeyPairGenerator getInstance(String algorithm) throws 以指定的算法返回一個(gè)KeyPairGenerator 對象參數: algorithm 算法名。
如:"DSA","RSA"public void initialize(int keysize)以指定的長(cháng)度初始化KeyPairGenerator對象,如果沒(méi)有初始化系統以1024長(cháng)度默認設置參數:keysize 算法位長(cháng)。其范圍必須在 512 到 1024 之間,且必須為 64 的倍數public void initialize(int keysize, SecureRandom random)以指定的長(cháng)度初始化和隨機發(fā)生器初始化KeyPairGenerator對象參數:keysize 算法位長(cháng)。
其范圍必須在 512 到 1024 之間,且必須為 64 的倍數random 一個(gè)隨機位的來(lái)源(對于initialize(int keysize)使用了默認隨機器public abstract KeyPair generateKeyPair()產(chǎn)生新密鑰對java。 security。
KeyPair 密鑰對類(lèi)public PrivateKey getPrivate()返回私鑰public PublicKey getPublic()返回公鑰java。security。
Signature 簽名類(lèi)public static Signature getInstance(String algorithm) throws 返回一個(gè)指定算法的Signature對象參數 algorithm 如:"DSA"public final void initSign(PrivateKey privateKey)throws InvalidKeyException用指定的私鑰初始化參數:privateKey 所進(jìn)行簽名時(shí)用的私鑰public final void update(byte data)throws final void update(byte[] data)throws final void update(byte[] data, int off, int len)throws SignatureException添加要簽名的信息public final byte[] sign()throws SignatureException返回簽名的數組,前提是initSign和updatepublic final void initVerify(PublicKey publicKey)throws InvalidKeyException用指定的公鑰初始化參數:publicKey 驗證時(shí)用的公鑰public final boolean verify(byte[] signature)throws SignatureException驗證簽名是否有效,前提是已經(jīng)initVerify初始化參數: signature 簽名數組 。
公鑰密碼技術(shù)核心思想是使用公鑰密碼算法的用戶(hù)有一對密鑰,其中一個(gè)稱(chēng)謂私鑰,用于解密消息或對消息進(jìn)行數字簽名,由用戶(hù)自己使用,需妥善保存,防止泄密;另一稱(chēng)為公鑰,公布在公開(kāi)位置,由其他人使用,其作用是進(jìn)行加密或驗證數字簽名。
假設用戶(hù)A要使用公鑰密碼技術(shù)將消息M加密傳給用戶(hù)B,用戶(hù)A首先從公開(kāi)位置查詢(xún)到用戶(hù)B的公鑰PubKeyB,并用該公鑰加密消息M得到密文PubKeyB(M),然后,用戶(hù)A將密文PubKeyB(M)發(fā)送給用戶(hù)B。當用戶(hù)B收到密文PubKeyB(M)后,利用自己的私鑰PriKeyB解密密文PubKey(M)就可以得到消息M。
對于以上過(guò)程,因為消息M是以密文形式傳輸的,公鑰密碼算法保證了只有擁有私鑰PriKeyB才能解密密文,所以,任何別有用心的人都無(wú)法通過(guò)網(wǎng)絡(luò )竊聽(tīng)獲取明文消息M。從上述過(guò)程可以看出,利用公鑰密碼技術(shù)傳遞消息之前用戶(hù)A與用戶(hù)B不必通過(guò)秘密渠道協(xié)商加密密鑰,用戶(hù)A只需在公開(kāi)位置查詢(xún)到用戶(hù)B的公鑰就可以了。
公鑰密碼技術(shù)的這一優(yōu)勢是傳統對稱(chēng)密碼技術(shù)無(wú)法比擬的,它不要求通信雙方在進(jìn)行通信之前通過(guò)秘密渠道協(xié)商加密密鑰。但采用公鑰密碼技術(shù)加密信息的速度遠遠低于采用傳統對稱(chēng)密碼技術(shù)加密信息速度。
因而,在應用中經(jīng)常首先利用公鑰密碼技術(shù)傳遞傳統對稱(chēng)密碼技術(shù)所需要的加密密鑰,然后再使用傳統對稱(chēng)密碼技術(shù)加密所需傳遞的信息。 公鑰密碼技術(shù)的另一個(gè)優(yōu)勢就是消息發(fā)送者可以利用自己的私鑰對發(fā)送消息進(jìn)行數字簽名,而消息接收者使用發(fā)送者的公鑰可以驗證發(fā)送者所作的數字簽名。
通過(guò)驗證數字簽名可以保證消息來(lái)源的真實(shí)性,也可以防止發(fā)生糾紛時(shí)消息發(fā)送者對發(fā)送過(guò)的消息進(jìn)行抵賴(lài)。 另外,數字簽名還可以保證數據的完整性,因為消息篡改者無(wú)法為篡改后的消息消息偽造原始發(fā)送者所要做的數字簽名。
在實(shí)際應用中,每一個(gè)用戶(hù)通常有兩對密鑰:一對專(zhuān)門(mén)用來(lái)進(jìn)行加解密,另一對專(zhuān)門(mén)用戶(hù)進(jìn)行數字簽名與驗證數字簽名。對應的公鑰分別稱(chēng)為加密公鑰,驗證簽名公鑰,對應的私鑰分別稱(chēng)為解密私鑰,數字簽名私鑰。
根據公鑰技術(shù)的特點(diǎn),用戶(hù)的公鑰是存放在公開(kāi)位置的,需要使用時(shí)可以到公開(kāi)位置查詢(xún),這樣可以大大簡(jiǎn)化對密鑰的管理。然而利用公鑰密碼技術(shù)實(shí)現數據傳輸安全并不意味著(zhù)不存在密鑰管理問(wèn)題。
如果用戶(hù)B存放在公開(kāi)位置的公鑰被不法用戶(hù)D替換為自己的公鑰,用戶(hù)A使用用戶(hù)B的公鑰加密信息,不法信息使用自己的私鑰就可以解密通過(guò)網(wǎng)絡(luò )傳輸的密文。 因此在利用公鑰密碼技術(shù)實(shí)現數據的安全傳輸時(shí),必須采取措施讓用戶(hù)確信自己使用的公鑰確實(shí)是它所期望的用戶(hù)的公鑰。
利用公鑰基礎設施PKI可以使用用戶(hù)能夠判斷自己所使用的公鑰正是所期望的公鑰。 二、認證機構CA與公鑰證書(shū) 根據公鑰密碼技術(shù)原理,要想在Internet上進(jìn)行安全的數據傳輸,必須保證其中一方擁有另一方的公鑰。
如何在廣域網(wǎng)上安全得到對方的公鑰,以防止假日攻擊,止前主要依賴(lài)認證機構CA來(lái)實(shí)現。認證機構CA是可信的權威機構,其權威性首先體現在它的所有用戶(hù)都知道其驗證簽名公鑰及加密公鑰。
CA的用戶(hù)U首先在CA注冊,并提交自己的公鑰。當注冊成功,也就是CA驗證了用戶(hù)U身份的真實(shí)性后,CA就將用戶(hù)名U,用戶(hù)的公鑰及另外一些用戶(hù)屬性放在一個(gè)文本中,對所形成的文本進(jìn)行數字簽名處理。
文本及CA對文本的簽名信息,就形成用戶(hù)A的公鑰證書(shū)。認證機構CA作為可信權威機構其可信性體現在CA能保證書(shū)中的用戶(hù)名與公鑰是致的,也就是說(shuō)CA能保證基所簽署的標識為用戶(hù)A的證書(shū)中的公鑰一定是用戶(hù)A的,而且證書(shū)中的有關(guān)屬性是正確的。
有了CA,用戶(hù)擁有了公鑰證書(shū),廣域網(wǎng)上方便快捷的安全的通信便成為了可能。 三、公鑰基礎設施的結構 公鑰基礎設施系統通常包括認證機構CA、證書(shū)與CPL數據存儲區和用戶(hù)三部分,其中用戶(hù)包括證書(shū)申請者與證書(shū)使用者,如圖1所示。
公鑰證書(shū)申請者首先要生成自己的公私鑰對,并將公鑰與自己的身份證明材料提交給認證機構CA。 認證機構CA通過(guò)用戶(hù)提供的身份證明材料,驗證用戶(hù)的身份。
如果用戶(hù)提供的身份證明材料真實(shí)可信,認證機構CA為用戶(hù)登記注冊,并使用自己的私鑰為用戶(hù)簽發(fā)公鑰證書(shū)。公鑰證書(shū)的結構如圖2所示,從中可以看出公鑰證書(shū)通常包括三部分內容:需要簽名部分、簽名算法部分和簽名值部分。
需要簽名部分包括證書(shū)版本號,序列號,持有者(證書(shū)主體)的公鑰,有效期及其他相關(guān)信息。 簽名算法部分的內容標識CA對證書(shū)進(jìn)行數字簽名所使用的公鑰簽名算法。
簽名值部分包含的是CA使用簽名算法部分所標識的簽名算法,使用自己的簽名私鑰對需要簽名部分進(jìn)行數字簽名的簽名結果。 認證機構CA將其簽發(fā)的用戶(hù)公鑰證書(shū)公布在公開(kāi)位置,如圖1中的數據存儲區。
從圖1中可以看出,數據存儲區中除了存放用戶(hù)公鑰證書(shū)之外,還存放證書(shū)吊銷(xiāo)列表CRL(Certificate Revocation List),它列出了由于種種原因而吊銷(xiāo)了的證書(shū)。 當用戶(hù)A要使用用戶(hù)B的公鑰進(jìn)行安全數據傳輸時(shí),用戶(hù)A首先在公鑰基礎設施的存儲區查詢(xún)用戶(hù)B的公鑰證書(shū),然后使用認證機構CA的驗證簽名公鑰驗證證書(shū)中CA的數字簽名。
首先應該知道,什么是數字簽名.簡(jiǎn)單地說(shuō),所謂數字簽名就是附加在數據單元上的一些數據,或是對數據單元所作的密碼變換。
這種數據或變換允許數據單元的接收者用以確認數據單元的來(lái)源和數據單元的完整性并保護數據,防止被人(例如接收者)進(jìn)行偽造。它是對電子形式的消息進(jìn)行簽名的一種方法,一個(gè)簽名消息能在一個(gè)通信網(wǎng)絡(luò )中傳輸。
基于公鑰密碼體制和私鑰密碼體制都可以獲得數字簽名,目前主要是基于公鑰密碼體制的數字簽名。包括普通數字簽名和特殊數字簽名。
普通數字簽名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir數字簽名算法、Des/DSA,橢圓曲線(xiàn)數字簽名算法和有限自動(dòng)機數字簽名算法等。特殊數字簽名有盲簽名、代理簽名、群簽名、不可否認簽名、公平盲簽名、門(mén)限簽名、具有消息恢復功能的簽名等,它與具體應用環(huán)境密切相關(guān)。
顯然,數字簽名的應用涉及到法律問(wèn)題,美國聯(lián)邦政府基于有限域上的離散對數問(wèn)題制定了自己的數字簽名標準(DSS)。一些國家如法國和德國已經(jīng)制定了數字簽名法。
實(shí)現數字簽名有很多方法,目前數字簽名采用較多的是公鑰加密技術(shù),如基于RSA Date Security 公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美國標準與技術(shù)協(xié)會(huì )公布了數字簽名標準而使公鑰加密技術(shù)廣泛應用。
公鑰加密系統采用的是非對稱(chēng)加密算法。 目前的數字簽名是建立在公共密鑰體制基礎上,它是公用密鑰加密技術(shù)的另一類(lèi)應用。
它的主要方式是,報文的發(fā)送方從報文文本中生成一個(gè)128位的散列值(或報文摘要)。發(fā)送方用自己的私人密鑰對這個(gè)散列值進(jìn)行加密來(lái)形成發(fā)送方的數字簽名。
然后,這個(gè)數字簽名將作為報文的附件和報文一起發(fā)送給報文的接收方。報文的接收方首先從接收到的原始報文中計算出128位的散列值(或報文摘要),接著(zhù)再用發(fā)送方的公用密鑰來(lái)對報文附加的數字簽名進(jìn)行解密。
如果兩個(gè)散列值相同、那么接收方就能確認該數字簽名是發(fā)送方的。通過(guò)數字簽名能夠實(shí)現對原始報文的鑒別。
在書(shū)面文件上簽名是確認文件的一種手段,其作用有兩點(diǎn):第一,因為自己的簽名難以否認,從而確認了文件已簽署這一事實(shí);第二,因為簽名不易仿冒,從而確定了文件是真的這一事實(shí)。 數字簽名與書(shū)面文件簽名有相同之處,采用數字簽名,也能確認以下兩點(diǎn):第一,信息是由簽名者發(fā)送的;第二,信息自簽發(fā)后到收到為止未曾作過(guò)任何修改。
這樣數字簽名就可用來(lái)防止電子信息因易被修改而有人作偽,或冒用別人名義發(fā)送信息。或發(fā)出(收到)信件后又加以否認等情況發(fā)生。
應用廣泛的數字簽名方法主要有三種,即:RSA簽名、DSS簽名和Hash簽名。這三種算法可單獨使用,也可綜合在一起使用。
數字簽名是通過(guò)密碼算法對數據進(jìn)行加、解密變換實(shí)現的,用DES算去、RSA算法都可實(shí)現數字簽名。但三種技術(shù)或多或少都有缺陷,或者沒(méi)有成熟的標準。
用RSA或其它公開(kāi)密鑰密碼算法的最大方便是沒(méi)有密鑰分配問(wèn)題(網(wǎng)絡(luò )越復雜、網(wǎng)絡(luò )用戶(hù)越多,其優(yōu)點(diǎn)越明顯)。因為公開(kāi)密鑰加密使用兩個(gè)不同的密鑰,其中有一個(gè)是公開(kāi)的,另一個(gè)是保密的。
公開(kāi)密鑰可以保存在系統目錄內、未加密的電子郵件信息中、電話(huà)黃頁(yè)(商業(yè)電話(huà))上或公告牌里,網(wǎng)上的任何用戶(hù)都可獲得公開(kāi)密鑰。而私有密鑰是用戶(hù)專(zhuān)用的,由用戶(hù)本身持有,它可以對由公開(kāi)密鑰加密信息進(jìn)行解密。
RSA算法中數字簽名技術(shù)實(shí)際上是通過(guò)一個(gè)哈希函數來(lái)實(shí)現的。數字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數字簽名的值也將發(fā)生變化。
不同的文件將得到不同的數字簽名。一個(gè)最簡(jiǎn)單的哈希函數是把文件的二進(jìn)制碼相累加,取最后的若干位。
哈希函數對發(fā)送數據的雙方都是公開(kāi)的只有加入數字簽名及驗證才能真正實(shí)現在公開(kāi)網(wǎng)絡(luò )上的安全傳輸。加入數字簽名和驗證的文件傳輸過(guò)程如下: 發(fā)送方首先用哈希函數從原文得到數字簽名,然后采用公開(kāi)密鑰體系用發(fā)達方的私有密鑰對數字簽名進(jìn)行加密,并把加密后的數字簽名附加在要發(fā)送的原文后面; 發(fā)送一方選擇一個(gè)秘密密鑰對文件進(jìn)行加密,并把加密后的文件通過(guò)網(wǎng)絡(luò )傳輸到接收方; 發(fā)送方用接收方的公開(kāi)密鑰對密秘密鑰進(jìn)行加密,并通過(guò)網(wǎng)絡(luò )把加密后的秘密密鑰傳輸到接收方; 接受方使用自己的私有密鑰對密鑰信息進(jìn)行解密,得到秘密密鑰的明文; 接收方用秘密密鑰對文件進(jìn)行解密,得到經(jīng)過(guò)加密的數字簽名; 接收方用發(fā)送方的公開(kāi)密鑰對數字簽名進(jìn)行解密,得到數字簽名的明文; 接收方用得到的明文和哈希函數重新計算數字簽名,并與解密后的數字簽名進(jìn)行對比。
如果兩個(gè)數字簽名是相同的,說(shuō)明文件在傳輸過(guò)程中沒(méi)有被破壞。 如果第三方冒充發(fā)送方發(fā)出了一個(gè)文件,因為接收方在對數字簽名進(jìn)行解密時(shí)使用的是發(fā)送方的公開(kāi)密鑰,只要第三方不知道發(fā)送方的私有密鑰,解密出來(lái)的數字簽名和經(jīng)過(guò)計算的數字簽名必然是不相同的。
這就提供了一個(gè)安全的確認發(fā)送方身份的方法。 安全的數字簽名使接收方可以得到保證:文件確實(shí)來(lái)自聲稱(chēng)的發(fā)送方。
鑒于簽。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.768秒