文章目錄
- 數字簽名
- 工作原理
- 關鍵特點
- 應用實例
- 數字證書
- 數字證書和數字簽名趣味實例
數字簽名
數字簽名是一種通過密碼運算生成的數據,用于驗證信息的完整性和來源,確保數據在傳輸過程中未被篡改,同時提供發送者的身份認證和防止抵賴的功能。它基于非對稱密碼加密系統,使用發送者的私鑰對數據進行加密,接收方使用發送者的公鑰進行解密和驗證,以此來確認信息的完整性和來源。
數字簽名的基本原理包括使用哈希函數將原始數據轉換成報文摘要,然后用發送者的私鑰對摘要進行加密,形成數字簽名。接收方收到簽名和原始數據后,使用發送者的公鑰對簽名進行解密,得到哈希摘要。通過比較這個摘要和用相同哈希函數對原始數據重新計算的摘要,可以驗證數據的完整性和來源。
數字簽名常用的算法包括RSA和ECC(橢圓曲線密碼學),這些算法提供了足夠的安全性,使得第三方難以偽造簽名或篡改數據。數字簽名與數據加密在原理與應用上的不同之處在于,加密主要關注數據的保密性,防止信息被未經授權的第三方獲取,而數字簽名則側重于數據的完整性和發送者身份的驗證。
工作原理
數字簽名通常利用公鑰加密技術,包括以下步驟:
- 創建簽名:
- 發送方使用自己的私鑰對消息或文件的散列(哈希)值進行加密。這個加密后的散列值即為數字簽名。
- 附加簽名:
- 簽名通常會附加在消息或文件本身,或以某種形式發送給接收方。
- 驗證簽名:
- 接收方收到消息后,會使用相同的散列算法對消息生成散列值,并用發送方的公鑰對數字簽名進行解密。
- 如果解密后的散列值與接收方自行計算的散列值匹配,說明消息未被篡改且簽名有效。
這里的核心關鍵點在于驗證方持有的公鑰是簽名方給的,簽名方的私鑰不能泄露。保證以上兩點,數字簽名才能發揮作用。
假設第三方用自己的私鑰給驗證方發送偽造消息,驗證方使用簽名方的公鑰肯定是無法解密的。
關鍵特點
- 身份驗證:
- 數字簽名幫助接收方確認消息或文件確實來自聲稱的發送方。
- 數據完整性:
- 確保數據在傳輸或存儲過程中未被更改。任何對數據的微小更改都會在驗證簽名時被檢測到。
- 不可否認性:
- 發送方在對信息進行數字簽名后,不能否認之前進行過的通信或交易,這對法律和商業交易尤為重要。
應用實例
- 電子郵件安全:通過數字簽名,電子郵件的接收者可以驗證發件人的身份和郵件內容的完整性。
- 軟件分發:開發者對軟件包進行簽名,用戶可以驗證軟件包是否未被篡改且確實來自于可信的源。
- 文件和文檔簽名:數字簽名被廣泛用于法律文件和其他重要文件,確保文件的內容和簽名者的身份得到認證。
數字簽名是加密的反向應用,加密是利用私鑰來解密數據,而簽名是利用公鑰來解密數據驗證簽名。
數字證書
上面在介紹數字簽名時提到,接收方需要保證拿到的公鑰是發送方的。接收方如何安全的拿到公鑰而不被第三方篡改?自然的聯想到對公鑰進行簽名,而簽名又需要一對新的公私鑰,陷入了無限套娃。套娃自然就交給權威機構(CA)來終止,由它們使用私鑰來對申請者提交的公鑰和身份信息進行簽名,簽名生成的東西美其名曰數字證書,頒發給發送方。發送方以后在發送數據時,順帶亮出自己的數字證書(就是公鑰),接收方用權威機構的公鑰驗證下,能解,證明這個就是發送方的公鑰。
權威機構也分一級二級三級等套娃,頂級機構頒發的證書叫根證書,不再需要別人證明自己。
數字證書是一種用于確認數字實體身份的電子文件。它通常包含公鑰和證書持有者的身份信息(如姓名和電子郵件地址),以及簽發機構(CA)的簽名,該簽名用于驗證證書的真實性。
數字證書的格式普遍采用的是X.509V3國際標準,一個標準的X.509數字證書包含以下一些內容:
-
證書的版本信息;
-
證書的序列號,每個證書都有一個唯一的證書序列號;
-
證書所使用的簽名算法;
-
證書的發行機構名稱,命名規則一般采用X.500格式;
-
證書的有效期,通用的證書一般采用UTC時間格式;
-
證書所有人的名稱,命名規則一般采用X.500格式;
-
證書所有人的公開密鑰;
-
證書發行者對證書的簽名。
數字證書和數字簽名趣味實例
鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。鮑勃的公鑰可以給任何人,但是私鑰只能自己保存。鮑勃的兩個密鑰中的任何一個都可以加密數據,另一個密鑰可以解密該數據。
鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。
蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達到保密的效果。盡管帕蒂和道格可能可以拿到蘇珊加密后的信且擁有鮑勃的公鑰,但是由于他們沒有鮑勃的私鑰,因此無法解密。
鮑勃收信后,用私鑰解密,就看到了信件內容。這里要強調的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。
鮑勃給蘇珊回信,決定采用"數字簽名"。他寫完后先用Hash函數,生成信件的摘要(digest)。
然后,鮑勃使用私鑰,對這個摘要加密,生成"數字簽名"(signature)。
鮑勃將這個簽名,附在信件下面,一起發給蘇珊。
蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。
蘇珊再對信件本身使用Hash函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過。
復雜的情況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密。
后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬于鮑勃。她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。
鮑勃拿到數字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了。
蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的。
下面,我們看一個應用"數字證書"的實例:https協議。這個協議主要用于網頁加密。
首先,客戶端向服務器發出加密請求。
服務器用自己的私鑰加密網頁以后,連同本身的數字證書,一起發送給客戶端。
客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發機構"列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表之內。
如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。
如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。
如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。