Jason ---分享,共同進步

          激情成就夢想,努力創(chuàng)造未來
          隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
          數(shù)據(jù)加載中……

          數(shù)字簽名

          好的文章 http://www.ibm.com/developerworks/cn/java/l-security/

           

          數(shù)字簽名以電子形式存在于數(shù)據(jù)信息之中的,或作為其附件的或邏輯上與之有聯(lián)系的數(shù)據(jù),可用于辨別數(shù)據(jù)簽署人的身份,并表明簽署人對數(shù)據(jù)信息中包含的信息的認可。(摘自百度)

           

          數(shù)字簽名(又稱公鑰數(shù)字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領(lǐng)域的技術(shù)實現(xiàn),用于鑒別數(shù)字信息的方法。一套數(shù)字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證

           

          基本介紹  數(shù)字簽名不是指將你的簽名掃描成數(shù)字圖像,或者用觸摸板獲取的簽名,更不是你的落款

            數(shù)字簽名了的文件的完整性是很容易驗證的(不需要騎縫章,騎縫簽名,也不需要筆跡專家),而且數(shù)字簽名具有不可抵賴性(不需要筆跡專家來驗證)。

            簡單地說,所謂數(shù)字簽名就是附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作的密碼變換。這種數(shù)據(jù)或變換允許數(shù)據(jù)單元的接收者用以確認數(shù)據(jù)單元的來源和數(shù)據(jù)單元的完整性并保護數(shù)據(jù),防止被人(例如接收者)進行偽造。它是對電子形式的消息進行簽名的一種方法,一個簽名消息能在一個通信網(wǎng)絡(luò)中傳輸。基于公鑰密碼體制和私鑰密碼體制都可以獲得數(shù)字簽名,目前主要是基于公鑰密碼體制的數(shù)字簽名。包括普通數(shù)字簽名和特殊數(shù)字簽名。普通數(shù)字簽名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir數(shù)字簽名算法、Des/DSA,橢圓曲線數(shù)字簽名算法和有限自動機數(shù)字簽名算法等。特殊數(shù)字簽名有盲簽名、代理簽名、群簽名、不可否認簽名、公平盲簽名、門限簽名、具有消息恢復(fù)功能的簽名等,它與具體應(yīng)用環(huán)境密切相關(guān)。顯然,數(shù)字簽名的應(yīng)用涉及到法律問題,美國聯(lián)邦政府基于有限域上的離散對數(shù)問題制定了自己的數(shù)字簽名標(biāo)準(zhǔn)(DSS)。

            數(shù)字簽名(Digital Signature)技術(shù)是不對稱加密算法的典型應(yīng)用。數(shù)字簽名的應(yīng)用過程是,數(shù)據(jù)源發(fā)送方使用自己的私鑰對數(shù)據(jù)校驗和或其他與數(shù)據(jù)內(nèi)容有關(guān)的變量進行加密處理,完成對數(shù)據(jù)的合法“簽名”,數(shù)據(jù)接收方則利用對方的公鑰來解讀收到的“數(shù)字簽名”,并將解讀結(jié)果用于對數(shù)據(jù)完整性的檢驗,以確認簽名的合法性。數(shù)字簽名技術(shù)是在網(wǎng)絡(luò)系統(tǒng)虛擬環(huán)境中確認身份的重要技術(shù),完全可以代替現(xiàn)實過程中的“親筆簽字”,在技術(shù)和法律上有保證。在數(shù)字簽名應(yīng)用中,發(fā)送者的公鑰可以很方便地得到,但他的私鑰則需要嚴(yán)格保密。

          主要功能

            保證信息傳輸?shù)耐暾浴l(fā)送者的身份認證、防止交易中的抵賴發(fā)生。

            數(shù)字簽名技術(shù)是將摘要信息用發(fā)送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發(fā)送的公鑰才能解密被加密的摘要信息,然后用HASH函數(shù)對收到的原文產(chǎn)生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數(shù)字簽名能夠驗證信息的完整性。

            數(shù)字簽名是個加密的過程,數(shù)字簽名驗證是個解密的過程。

          簽名過程

            報文的發(fā)送方用一個哈希函數(shù)從報文文本中生成報文摘要(散列值)。發(fā)送方用自己的私人密鑰對這個散列值進行加密。然后,這個加密后的散列值將作為報文的附件和報文一起發(fā)送給報文的接收方。報文的接收方首先用與發(fā)送方一樣的哈希函數(shù)從接收到的原始報文中計算出報文摘要,接著再用發(fā)送方的公用密鑰來對報文附加的數(shù)字簽名進行解密。如果兩個散列值相同、那么接收方就能確認該數(shù)字簽名是發(fā)送方的。通過數(shù)字簽名能夠?qū)崿F(xiàn)對原始報文的鑒別。

            數(shù)字簽名有兩種功效:一是能確定消息確實是由發(fā)送方簽名并發(fā)出來的,因為別人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因為數(shù)字簽名的特點是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字簽名的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字簽名。 一次數(shù)字簽名涉及到一個哈希函數(shù)、發(fā)送者的公鑰、發(fā)送者的私鑰。

          個人安全郵件證書

            具有數(shù)字簽名功能的個人安全郵件證書是用戶證書的一種,是指單位用戶收發(fā)電子郵件時采用證書機制保證安全所必須具備的證書。個人安全電子郵件證書是符合x.509標(biāo)準(zhǔn)的數(shù)字安全證書,結(jié)合數(shù)字證書S/MIME技術(shù)對普通電子郵件做加密和數(shù)字簽名處理,確保電子郵件內(nèi)容的安全性、機密性、發(fā)件人身份確認性和不可抵賴性。 具有數(shù)字簽名功能的 個人安全郵件證書中包含證書持有人的電子郵件地址、證書持有人的公鑰、頒發(fā)者(CA)以及頒發(fā)者對該證書的簽名。個人安全郵件證書功能的實現(xiàn)決定于用戶使用的郵件系統(tǒng)是否支持相應(yīng)功能。目前, MS Outlook 、Outlook Express、Foxmail及CA安全電子郵件系統(tǒng)均支持相應(yīng)功能。使用個人安全郵件證書可以收發(fā)加密和數(shù)字簽名郵件,保證電子郵件傳輸中的機密性、完整性和不可否認性,確保電子郵件通信各方身份的真實性。

          用數(shù)字簽名識別病毒

            [1][2]如何區(qū)分數(shù)字簽名攻擊呢?有兩個方法:

            1.查看數(shù)字簽名的詳細信息,我們應(yīng)該查看該數(shù)字簽名的詳細信息,點擊“詳細信息”按鈕即可。

            我們會發(fā)現(xiàn)正常EXE和感染(或捆綁木馬)后的EXE數(shù)字簽名的區(qū)別

            正常EXE的數(shù)字簽名詳細信息

            被篡改后的EXE數(shù)字簽名信息無效

            方法2,使用數(shù)字簽名驗證程序sigcheck.exe (可以百度一下找這個工具,著名系統(tǒng)工具包Sysinternals Suite的組件之一。)

            數(shù)字簽名異常的結(jié)果為:

            C:\Documents and Settings\litiejun\??\modify.exe:

            Verified: Unsigned

            File date: 15:46 2008-5-23

            Publisher: n/a

            Description: n/a

            Product: n/a

            Version: n/a

            File version: n/a

            數(shù)字簽名正常的結(jié)果為:

            C:\Documents and Settings\litiejun\??\che.exe:

            Verified: Signed

            Signing date: 16:28 2008-4-29

            Publisher: n/a

            Description: n/a

            Product: n/a

            Version: n/a

            File version: n/a

          原因分析

            1,精心設(shè)計的感染

            當(dāng)EXE被感染時,是很容易破壞文件的數(shù)字簽名信息的,如果攻擊者感染或破壞文件時,有意不去破壞EXE中有關(guān)數(shù)字簽名的部分,就可能出現(xiàn)感染后,數(shù)字簽名看上去正常的情況。但認真查看文件屬性或校驗文件的HASH值,你會發(fā)現(xiàn)該EXE程序已經(jīng)不是最原始的版本了。

            2.該軟件發(fā)行商的數(shù)字簽名文件被盜,攻擊者可以把捆綁木馬或感染病毒后的EXE程序,也打包上數(shù)字簽名,這種情況下就更嚴(yán)重了。企業(yè)如果申請了數(shù)字簽名證書,一定要妥善保管,否則后患無窮。

          使用方法

            你可以對你發(fā)出的每一封電子郵件進行數(shù)字簽名。這不是指落款,普遍把落款訛誤成簽名。

            在我國大陸,數(shù)字簽名是具法律效力的,正在被普遍使用。2000年,中華人民共和國的新《合同法》首次確認了電子合同電子簽名的法律效力。2005年4月1日起,中華人民共和國首部《電子簽名法》正式實施。

          原理特點

            每個人都有一對“鑰匙”(數(shù)字身份),其中一個只有她/他本人知道(密鑰),另一個公開的(公鑰)。簽名的時候用密鑰,驗證簽名的時候用公鑰。又因為任何人都可以落款申稱她/他就是你,因此公鑰必須向接受者信任的人(身份認證機構(gòu))來注冊。注冊后身份認證機構(gòu)給你發(fā)一數(shù)字證書。對文件簽名后,你把此數(shù)字證書連同文件及簽名一起發(fā)給接受者,接受者向身份認證機構(gòu)求證是否真地是用你的密鑰簽發(fā)的文件。

            在通訊中使用數(shù)字簽名一般基于以下原因:

          鑒權(quán)

            公鑰加密系統(tǒng)允許任何人在發(fā)送信息時使用公鑰進行加密,數(shù)字簽名能夠讓信息接收者確認發(fā)送者的身份。當(dāng)然,接收者不可能百分之百確信發(fā)送者的真實身份,而只能在密碼系統(tǒng)未被破譯的情況下才有理由確信。

            鑒權(quán)的重要性在財務(wù)數(shù)據(jù)上表現(xiàn)得尤為突出。舉個例子,假設(shè)一家銀行將指令由它的分行傳輸?shù)剿闹醒牍芾硐到y(tǒng),指令的格式是(a,b),其中a是賬戶的賬號,而b是賬戶的現(xiàn)有金額。這時一位遠程客戶可以先存入100元,觀察傳輸?shù)慕Y(jié)果,然后接二連三的發(fā)送格式為(a,b)的指令。這種方法被稱作重放攻擊

          完整性

            傳輸數(shù)據(jù)的雙方都總希望確認消息未在傳輸?shù)倪^程中被修改。加密使得第三方想要讀取數(shù)據(jù)十分困難,然而第三方仍然能采取可行的方法在傳輸?shù)倪^程中修改數(shù)據(jù)。一個通俗的例子就是同形攻擊:回想一下,還是上面的那家銀行從它的分行向它的中央管理系統(tǒng)發(fā)送格式為(a,b)的指令,其中a是賬號,而b是賬戶中的金額。一個遠程客戶可以先存100元,然后攔截傳輸結(jié)果,再傳輸(a,b3),這樣他就立刻變成百萬富翁了。

          不可抵賴

            在密文背景下,抵賴這個詞指的是不承認與消息有關(guān)的舉動(即聲稱消息來自第三方)。消息的接收方可以通過數(shù)字簽名來防止所有后續(xù)的抵賴行為,因為接收方可以出示簽名給別人看來證明信息的來源。

          如何實現(xiàn)

            數(shù)字簽名算法依靠公鑰加密技術(shù)來實現(xiàn)的。在公鑰加密技術(shù)里,每一個使用者有一對密鑰:一把公鑰和一把私鑰。公鑰可以自由發(fā)布,但私鑰則秘密保存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現(xiàn)。

            普通的數(shù)字簽名算法包括三種算法:

            1.密碼生成算法 ;

            2.標(biāo)記算法 ;

            3.驗證算法 。

          Java數(shù)字簽名步驟

            1、將applet的class文件打包成*.jar(不會的可以在命令行中輸入jar查看幫助) [3]

            2 首先我們要生成一個keystore 否則在簽名的時候報如下錯誤

            jarsigner 錯誤: java.lang.RuntimeException: 密鑰庫裝入: C:\Documents and Settings\ij2ee\.keystore (系統(tǒng)找不到指定的文件。). (這邊的ij2ee 是我當(dāng)前系統(tǒng)用戶名)

            生成keystore的語句:keytool -genkey -alias 別名你可以自己寫 -keyalg RSA -keystore .keystore

            比如我的就是 keytool -genkey -alias ij2ee -keyalg RSA -keystore .keystore

            下面是會出現(xiàn)的數(shù)字簽名的一些步驟操作:

            輸入keystore密碼:

            再次輸入新密碼:

            您的名字與姓氏是什么?

            [Unknown]: ij2ee

            您的組織單位名稱是什么?

            [Unknown]: mtk

            您的組織名稱是什么?

            [Unknown]: mtk

            您所在的城市或區(qū)域名稱是什么?

            [Unknown]: suzhou

            您所在的州或省份名稱是什么?

            [Unknown]: jiangsu

            該單位的兩字母國家代碼是什么

            [Unknown]: cn

            CN=jeson, OU=mtk, O=mtk, L=suzhou, ST=jiangsu, C=cn 正確嗎?

            [否]: y

            輸入<sfcs>的主密碼

            (如果和 keystore 密碼相同,按回車):

            這時候會在jdk的bin目錄下生成 .keystore 。把這個.keystore文件移動到 C:\Documents and Settings\當(dāng)前系統(tǒng)用戶 的目錄下面。

            3、創(chuàng)建一個數(shù)字證書

            在命令行中輸入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天數(shù),就是10年左右,在創(chuàng)建證書的的時候,需要填寫證書的一些信息和證書對應(yīng)的私鑰密碼。這些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,都是中文,一看就懂的

            keytool -genkey -alias peakCA -keyalg RSA -keysize 1024 -keystore peakCALib -validity 3650

            4、將證書導(dǎo)出到證書文件中

            在命令行中輸入如下指令,peakCA和peakCALib自己起名字好了,******是你輸入的密碼

            keytool -export -alias peakCA -file peakCA.cer -keystore peakCALib -storepass ****** -rfc

            5、授權(quán)jar文件,在命令行中輸入如下指令

            jarsigner -keystore peakCALib myapplet.jar peakCA

          posted on 2011-04-24 14:40 agun 閱讀(503) 評論(1)  編輯  收藏 所屬分類: 其他

          評論

          # re: 數(shù)字簽名[未登錄]  回復(fù)  更多評論   

          阿甘
          2016-08-08 12:35 | 阿甘
          主站蜘蛛池模板: 镇赉县| 印江| 泸西县| 民丰县| 额敏县| 嘉定区| 长葛市| 东方市| 蕉岭县| 临颍县| 亳州市| 武安市| 雷波县| 甘洛县| 神农架林区| 中方县| 利津县| 长兴县| 龙州县| 古交市| 青川县| 平遥县| 津市市| 安多县| 清苑县| 闸北区| 云梦县| 万源市| 陇西县| 中超| 土默特右旗| 图木舒克市| 绥棱县| 延吉市| 吉水县| 东明县| 益阳市| 吉林市| 专栏| 重庆市| 襄城县|