原理 數字簽名的檔案的完整性是很容易驗證的(不需要
騎縫章 ,騎縫簽名,也不需要筆跡專家),而且數字簽名具有
不可抵賴性 (不可否認性)。
簡單地說,所謂數字簽名就是附加在
數據單元 上的一些數據,或是對數據單元所作的
密碼 變換。這種數據或變換允許
數據單元 的接收者用以確認數據單元的來源和數據單元的完整性並保護數據,防止被人(例如接收者)進行偽造。它是對電子形式的訊息進行簽名的一種方法,一個簽名訊息能在一個
通信網路 中傳輸。基於
公鑰 密碼體制 和
私鑰 密碼體制都可以獲得數字簽名,主要是基於公鑰密碼體制的數字簽名。包括普通數字簽名和特殊數字簽名。普通數字簽名
算法 有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir數字簽名算法、Des/DSA,橢圓曲線數字簽名算法和有限
自動機 數字簽名算法等。特殊數字簽名有
盲簽名 、代理簽名、
群簽名 、不可否認簽名、公平盲簽名、門限簽名、具有訊息恢復功能的簽名等,它與具體套用環境密切相關。顯然,數字簽名的套用涉及到法律問題,
美國聯邦政府 基於有限域上的離散對數問題制定了自己的
數字簽名標準 (
DSS )。
特點 在通訊中使用數字簽名一般具有以下特點:
鑒權 公鑰加密系統 允許任何人在傳送信息時使用
公鑰 進行加密,數字簽名能夠讓信息接收者確認傳送者的
身份 。當然,接收者不可能百分之百確信傳送者的真實
身份 ,而只能在
密碼系統 未被破譯的
情況 下才有理由確信。
鑒權的重要性在財務數據上表現得尤為突出。舉個例子,假設一家銀行將指令由它的分行傳輸到它的中央管理系統,指令的格式是(a,b),其中a是賬戶的賬號,而b是賬戶的現有金額。這時一位遠程
客戶 可以先存入100元,觀察傳輸的結果,然後接二連三的傳送格式為(a,b)的指令。這種方法被稱作
重放攻擊 。
完整性 傳輸數據的雙方都總希望確認訊息未在傳輸的過程中被修改。加密使得第三方想要讀取數據十分困難,然而第三方仍然能採取可行的方法在傳輸的過程中修改數據。一個通俗的例子就是同形攻擊:回想一下,還是上面的那家銀行從它的分行向它的中央管理系統傳送格式為(a,b)的指令,其中a是賬號,而b是賬戶中的金額。一個遠程客戶可以先存100元,然後攔截傳輸結果,再傳輸(a,b),這樣他就立刻變成百萬富翁了。
不可抵賴 在
密文 背景下,抵賴這個詞指的是不承認與訊息有關的舉動(即聲稱訊息來自第三方)。訊息的接收方可以通過數字簽名來防止所有後續的抵賴行為,因為接收方可以出示簽名給別人看來證明信息的來源。
主要功能 網路的安全,主要是
網路信息安全 ,需要取相應的安全技術措施,提供適合的
安全服務 。數字簽名機製作為保障
網路信息安全 的手段之一,可以解決偽造、抵賴、冒充和篡改問題。數字簽名的目的之一就是在網路環境中代替傳統的手工簽字與印章,有著重要作用:
(1)防冒充(偽造)。私有密鑰只有簽名者自己知道,所以其他人不可能構造出正確的。
(2)可
鑑別 身份。由於傳統的手工簽名一般是雙方直接見面的,身份自可一清二楚。在網路環境中,接收方必須能夠
鑑別 傳送方所宣稱的身份。
(3)防
篡改 (防破壞信息的完整性)。對於傳統的手工簽字,假如要簽署一份200頁的契約,是僅僅在契約末尾簽名呢?還是對每一頁都簽名?如果僅在契約末尾簽名,對方會不偷換其中的幾頁? 而對於數字簽名,簽名與原有檔案已經形成了一個混合的整體數據,不可能被篡改,從而保證了數據的
完整性 。
(4)防
重放 。如在日常生活中,A向B借了錢,同時寫了一張借條給B,當A還錢的候,肯定要向B索回他寫的借條撕毀,不然,恐怕他會再次用借條要求A還錢。在數字名中,如果採用了對簽名報文添加
流水號 、
時間戳 等技術,可以防止
重放 攻擊。
(5)防
抵賴 。如前所述,數字簽名可以鑑別身份,不可能冒充偽造,那么,只要保好籤名的報文,就好似保存好了手工簽署的契約文本,也就是保留了證據,簽名者就無法抵賴。那如果接收者確已收到對方的簽名報文,卻抵賴沒有收到呢? 要預防接收者的
抵賴 。在數字簽名體制中,要求接收者返回一個自己簽名的表示收到的報文,給對方或者第三方或者引入第三方機制。如此操作,雙方均不可抵賴。
(6)機密性(保密性)。有了機密性保證,截收攻擊也就失效了。手工簽字的檔案(如同文本)是不具備保密性的,檔案一旦丟失,其中的信息就極可能泄露。數字簽名可以加密要簽名的訊息,當然,如果簽名的報名不要求機密性,也可以不用加密。
保證信息傳輸的完整性、傳送者的
身份認證 、防止交易中的抵賴發生。
數字簽名技術 是將摘要信息用傳送者的私鑰加密,與
原文 一起傳送給接收者。接收者用自己的公鑰解密被加密的摘要信息,然後用
HASH函式 對收到的
原文 產生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數字簽名能夠驗證信息的完整性。
數字簽名是個加密的過程,數字簽名驗證是個解密的過程。
簽名過程 傳送報文時,傳送方用一個哈希函式從報文文本中生成報文摘要,然後用傳送方的私鑰對這個摘要進行加密,這個加密後的摘要將作為報文的數字簽名和報文一起傳送給接收方,接收方首先用與傳送方一樣的哈希函式從接收到的原始報文中計算出報文摘要,接著再用接收方的公鑰鑰來對報文附加的數字簽名進行解密,如果這兩個摘要相同、那么接收方就能確認該數字簽名是傳送方的。
數字簽名有兩種功效:一是能確定訊息確實是由傳送方簽名並發出來的,因為別人假冒不了傳送方的簽名。二是數字簽名能確定訊息的完整性。因為數字簽名的特點是它代表了檔案的特徵,檔案如果發生改變,數字摘要的值也將發生變化。不同的檔案將得到不同的數字摘要。 一次數字簽名涉及到一個哈希函式、接收者的
公鑰 、接收者的
私鑰 。
使用方法 你可以對你發出的每一封
電子郵件 進行數字簽名。這不是指落款,普遍把落款訛誤成簽名。
個人郵件證書 具有數字簽名功能的個人安全郵件證書是用戶證書的一種,是指單位用戶收發電子郵件時採用證書機制保證安全所必須具備的證書。個人安全
電子郵件證書 是符合x.509標準的數字安全證書,結合
數字證書 和
S/MIME 技術對普通電子郵件做加密和數字簽名處理,確保電子郵件內容的安全性、機密性、發件人
身份 確認性和
不可抵賴性 。 具有數字簽名功能的 個人安全郵件證書中包含證書持有人的
電子郵件地址 、證書持有人的
公鑰 、頒發者(CA)以及頒發者對該證書的簽名。個人安全郵件證書功能的實現決定於用戶使用的
郵件系統 是否支持相應功能。 MS Outlook 、Outlook Express、Foxmail及CA安全
電子郵件系統 均支持相應功能。使用個人安全郵件證書可以收發加密和數字簽名郵件,保證電子郵件傳輸中的機密性、完整性和不可否認性,確保電子郵件通信各方
身份 的真實性。
實現方法 數字簽名
算法 依靠
公鑰加密 技術來實現的。在
公鑰 加密技術 里,每一個使用者有一對密鑰:一把公鑰和一把
私鑰 。
公鑰 可以自由發布,但
私鑰 則秘密保存;還有一個要求就是要讓通過公鑰推算出私鑰的做法不可能實現。
數字簽名技術大多基於哈希摘要和非對稱密鑰加密體制來實現。如果簽名者想要對某個檔案進行數字簽名,他必須首先從可信的第三方機構(數字證書認證中心CA)取得私鑰和公鑰,這需要用到
PKI技術 。
1.有哈希算法的數字簽名與驗證
哈希函式是一種“壓縮函式”,利用哈希函式可以把任意長度的輸入經由散列函式算法變換成固定長度的輸出,該輸出的哈希值就是訊息摘要,也稱數字摘要。在正式的數字簽名中,傳送方首先對傳送檔案採用哈希算法,得到一個固定長度的
訊息摘要 ( Message Digest);再用自己的
私鑰 ( Secret key,SK)對
訊息摘要 進行簽名,形成傳送方的數字簽名。數字簽名將作為隊件和原文一起傳送給接收方;接收方首先用傳送方的
公鑰 對數字簽名進行解密得到傳送方的
數字摘要 ,然後用相同的
哈希函式 對原文進行哈希計算,得到一個新的訊息摘要,最後將訊息摘要與收到的
訊息摘要 做比較。具體過程如圖所示。
數字簽名及其驗證 2.基於非對稱密鑰加密體制的數字簽名與驗證
傳送方首先將原文用自己的
私鑰 加密得到數字簽名,然後將原文和數字簽名一起傳送給接收方。接收方用傳送方的公鑰對數字簽名進行解密,最後與原文進行比較,如圖所示數字簽名是
電子商務 、
電子政務 中套用普遍、技術成熟、可操作性強的一種
電子簽名 方法。它採用了規範化的程式和科學化的方法,用於鑑定簽名人的身份以及對一項電子數據內容的認可。使用數字簽名技術能夠驗證檔案的原文在傳輸過程中有無變動,確保傳輸電子檔案的完整性、真實性和
不可抵賴性 。
基於非對稱密鑰的數字簽名與驗證
簽名步驟 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
下面是會出現的數字簽名的一些步驟操作:
[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>的主密碼
這時候會在jdk的bin
目錄 下生成 .keystore 。把這個.keystore檔案移動到 C:\Documents and Settings\當前
系統用戶 的目錄下面。
3、創建一個 數字證書
在命令行中輸入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天數,就是10年左右,在創建證書的的時候,需要填寫證書的一些信息和證書對應的
私鑰 密碼 。
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、單擊“添加數字簽名”。
7、在“簽名”對話框中的“簽署此文檔的目的”框中,鍵入目的。
8、單擊“簽名”。
9、在對檔案進行數字簽名後,將出現“簽名”按鈕,並且檔案會變為唯讀以防止修改。
套用例子 假如 Alice 向 Bob 傳送數字信息,為了保證信息傳送的
保密性 、
真實性 、
完整性 和
不可否認性 ,需要對傳送的信息進行數字加密和簽名,其傳送過程為:
Alice 準備好要傳送的數字信息(明文);
Alice 對數字信息進行
哈希運算 ,得到一個信息摘要;
Alice 用自己的
私鑰 對信息摘要進行加密得到 Alice 的數字簽名,並將其附在數字信息上;
Alice 隨機產生一個加密密鑰,並用此密碼對要傳送的信息進行加密,形成
密文 ;
Alice 用 Bob 的公鑰對剛才隨機產生的加密密鑰進行加密,將加密後的
DES 密鑰連同密文一起傳送給Bob;
Bob 收到 Alice 傳送來的密文和加密過的
DES 密鑰,先用自己的私鑰對加密的 DES 密鑰進行解密,得到 Alice隨機產生的加密密鑰;
Bob 然後用隨機密鑰對收到的密文進行解密,得到
明文 的數字信息,然後將隨機密鑰拋棄;
Bob 用 Alice 的公鑰對 Alice 的數字簽名進行解密,得到信息摘要;
Bob 用相同的哈希算法對收到的
明文 再進行一次
哈希運算 ,得到一個新的信息摘要;
Bob 將收到的信息摘要和新產生的信息摘要進行比較,如果一致,說明收到的信息沒有被修改過。
區分攻擊 如何區分數字簽名攻擊呢?有兩個方法:
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