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