數位簽名

數位簽名

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

數位簽名,就是隻有信息的傳送者才能產生的別人無法偽造的一段數位串,這段數位串同時也是對信息的傳送者傳送信息真實性的一個有效證明。

數位簽名是非對稱密鑰加密技術與數位摘要技術的套用。

  • 中文名稱
    數位簽名
  • 外文名稱
     digital signature;digitally signed
  • 簽名類別
    物理簽名
  • 簽名別稱
    公鑰數位簽名
  • 使用技術
    公鑰加密
  • 相關法律
    《電子簽名法》

基本原理

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

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

主要功能

保證信息傳輸的完整性、傳送者的身份識別、防止交易中的抵賴發生。

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

數位簽名是個加密的過程,數位簽名驗證是個解密的過程。

簽名過程

"傳送報文時,傳送方用一個哈希函式從報文文本中生成報文摘要,然後用自己的私人密鑰對這個摘要進行加密,這個加密後的摘要將作為報文的數位簽名和報文一起傳送給接收方,接收方首先用與傳送方一樣的哈希函式從接收到的原始報文中計算出報文摘要,接著再用傳送方的公用密鑰來對報文附加的數位簽名進行解密,如果這兩個摘要相同、那麽接收方就能確認該數位簽名是傳送方的。

數位簽名有兩種功效:一是能確定訊息確實是由傳送方簽名並發出來的,因為別人假冒不了傳送方的簽名。二是數位簽名能確定訊息的完整性。因為數位簽名的特點是它代表了檔案的特征,檔案如果發生改變,數位摘要的值也將發生變化。不同的檔案將得到不同的數位摘要。 一次數位簽名涉及到一個哈希函式、傳送者的公鑰、傳送者的私鑰。"

數位簽名

傳送方用自己的密鑰對報文X進行Encrypt(編碼)運算,生成不可讀取的密文Dsk,然後將Dsk傳送給接收方,接收方為了核實簽名,用傳送方的公用密鑰進行Decrypt(解碼)運算,還原報文。

個人證書

具有數位簽名功能的個人安全郵件證書是使用者證書的一種,是指單位使用者收發電子郵件時採用證書機製保證安全所必須具備的證書。個人安全電子郵件證書是符合x.509標準的數位安全證書,結合數位證書S/MIME技術對普通電子郵件做加密和數位簽名處理,確保電子郵件內容的安全性、機密性、發件人身份確認性和不可抵賴性。 具有數位簽名功能的 個人安全郵件證書中包含證書持有人的電子郵件地址、證書持有人的公鑰、頒發者(CA)以及頒發者對該證書的簽名。個人安全郵件證書功能的實現決定于使用者使用的郵件系統是否支持相應功能。 MS Outlook 、Outlook Express、Foxmail及CA安全電子郵件系統均支持相應功能。使用個人安全郵件證書可以收發加密和數位簽名郵件,保證電子郵件傳輸中的機密性、完整性和不可否認性,確保電子郵件通信各方身份的真實性。

識別病毒

如何區分數位簽名攻擊呢?有兩個方法:

1.查看數位簽名的詳細信息,我們應該查看該數位簽名的詳細信息,點擊"詳細信息"按鈕即可。

我們會發現正常EXE和感染(或捆綁木馬)後的EXE數位簽名的區別。

正常EXE的數位簽名詳細信息。

被篡改後的EXE數位簽名信息無效。

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

數位簽名異常的結果為:

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

數位簽名正常的結果為:

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.精心設計的感染

當EXE被感染時,是很容易破壞檔案的數位簽名信息的,如果攻擊者感染或破壞檔案時,有意不去破壞EXE中有關數位簽名的部分,就可能出現感染後,數位簽名看上去正常的情況。但認真查看檔案屬性或校驗檔案的HASH值,你會發現該EXE程式已經不是最原始的版本了。

2.該軟體發行商的數位簽名檔案被盜,攻擊者可以把捆綁木馬或感染病毒後的EXE程式,也打包上數位簽名,這種情況下就更嚴重了。企業如果申請了數位簽名證書,一定要妥善保管,否則後患無窮。

使用方法

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

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

原理特點

每個人都有一對"鑰匙"(數位身份),其中一個隻有她/他本人知道(密鑰),另一個公開的(公鑰)。簽名的時候用密鑰,驗證簽名的時候用公鑰。又因為任何人都可以落款聲稱她/他就是你,因此公鑰必須向接受者信任的人(身份識別機構)來註冊。註冊後身份識別機構給你發一數位證書。對檔案簽名後,你把此數位證書連同檔案及簽名一起發給接受者,接受者向身份識別機構求證是否真地是用你的密鑰簽發的檔案。

在通訊中使用數位簽名一般基于以下原因:

鑒權

公鑰加密系統允許任何人在傳送信息時使用公鑰進行加密,數位簽名能夠讓信息接收者確認傳送者的身份。當然,接收者不可能百分之百確信傳送者的真實身份,而隻能在密碼系統未被破譯的情況下才有理由確信。

鑒權的重要性在財務資料上表現得尤為突出。舉個例子,假設一家銀行將指令由它的分行傳輸到它的中央管理系統,指令的格式是(a,b),其中a是賬戶的賬號,而b是賬戶的現有金額。這時一位遠程客戶可以先存入100元,觀察傳輸的結果,然後接二連三的傳送格式為(a,b)的指令。這種方法被稱作重放攻擊

完整性

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

不可抵賴

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

實現方法

數位簽名演算法依靠公鑰加密技術來實現的。在公鑰加密技術裏,每一個使用者有一對密鑰:一把公鑰和一把私鑰公鑰可以自由發布,但私鑰則秘密儲存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現。

普通的數位簽名演算法包括三種演算法:

1.密碼生成演算法;

2.標記演算法;

3.驗證演算法

Java

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

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

jarsigner 錯誤: java.lang.RuntimeException: 密鑰庫裝入: C:\Documents and Settings\ij2ee\.keystore (系統找不到指定的檔案。). (這邊的ij2ee 是我當前系統使用者名稱)

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

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

下面是會出現的數位簽名的一些步驟操作:

輸入keystore密碼:

再次輸入新密碼:

您的名字與姓氏是什麽?

[Unknown]: ij2ee

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

[Unknown]: mtk

您的組織名稱是什麽?

[Unknown]: mtk

您所在的城市或區域名稱是什麽?

[Unknown]: suzhou

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

[Unknown]: jiangsu

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

[Unknown]: cn

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

[否]: y

輸入<sfcs>的主密碼

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

這時候會在jdk的bin目錄下生成 .keystore 。把這個.keystore檔案移動到 C:\Documents and Settings\當前系統使用者的目錄下面。

3、建立一個數位證書

在命令行中輸入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天數,就是10年左右,在建立證書的的時候,需要填寫證書的一些信息和證書對應的私鑰密碼。這些信息包括 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、將證書導出到證書檔案中

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

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

5、授權jar檔案,在命令行中輸入如下指令

jarsigner -keystore peakCALib myapplet.jar peakCA

office

1、要保護文檔內容的真實性,可以增加不可見的數位簽名。 已簽名文檔的底部有"簽名"按鈕。

2、單擊"檔案"選項卡。

3、單擊"信息"。

4、在"許可權"下,單擊"保護文檔"、"保護工作簿"或"保護演示文稿"。

5、單擊"增加數位簽名"。

6、閱讀 Word、Excel 或 PowerPoint 中顯示的訊息,然後單擊"確定"。

7、在"簽名"對話框中的"簽署此文檔的目的"框中,鍵入目的。

8、單擊"簽名"。

9、在對檔案進行數位簽名後,將出現"簽名"按鈕,並且檔案會變為唯讀以防止修改。

套用例子

假如現在 Alice 向 Bob 傳送數位信息,為了保證信息傳送的保密性、真實性、完整性和不可否認性,需要對傳送的信息進行數位加密和簽名,其傳送過程為:

1.Alice 準備好要傳送的數位信息(明文);

2.Alice 對數位信息進行哈希運算,得到一個信息摘要;

3.Alice 用自己的私鑰對信息摘要進行加密得到 Alice 的數位簽名,並將其附在數位信息上;

4.Alice 隨機產生一個加密密鑰,並用此密碼對要傳送的信息進行加密,形成密文;

5.Alice 用 Bob 的公鑰對剛才隨機產生的加密密鑰進行加密,將加密後的 DES 密鑰連同密文一起傳送給Bob;

6.Bob 收到 Alice 傳送來的密文和加密過的 DES 密鑰,先用自己的私鑰對加密的 DES 密鑰進行解密,得到 Alice隨機產生的加密密鑰;

7.Bob 然後用隨機密鑰對收到的密文進行解密,得到明文的數位信息,然後將隨機密鑰拋棄;

8.Bob 用 Alice 的公鑰對 Alice 的數位簽名進行解密,得到信息摘要;

9.Bob 用相同的哈希演算法對收到的明文再進行一次哈希運算,得到一個新的信息摘要;

10.Bob 將收到的信息摘要和新產生的信息摘要進行比較,如果一致,說明收到的信息沒有被修改過。

相關詞條

其它詞條