1、數(shù)字簽名
數(shù)字簽名的核心目標是驗證信息的完整性(Integrity)、認證發(fā)送方身份(Authentication)和不可否認性(Non-Repudiation)。它并不為了加密信息內(nèi)容本身。
其基本原理是:發(fā)送方用只有自己才有的私鑰對信息的“摘要”進行加密,生成簽名;接收方用發(fā)送方公開的公鑰解密這個簽名,得到摘要A,再對接收到的信息計算得出摘要B,最后對比摘要A和摘要B是否一致。
整個流程可以分為兩大步:發(fā)送方簽名 和 接收方驗簽。
第一步:發(fā)送方簽名流程
假設發(fā)送方是 Alice,要發(fā)送一份重要合同給 Bob,并需要簽名。
-
原始信息(Message)
- Alice 擁有她想要發(fā)送的原始信息 M(例如:"我同意以100萬元購買此設備。Alice")。
-
哈希運算(Hash Function)
- Alice 的電腦使用一個公開的密碼學哈希函數(shù)(如 SHA-256)對原始信息 M 進行計算。
- 生成一個固定長度、唯一的“信息摘要”(Digest),也稱為哈希值(Hash Value)。
- 特點:任何對信息 M 的微小改動,都會產(chǎn)生一個完全不同的摘要。這是一個不可逆的過程。
-
簽名生成(Signing with Private Key)
- Alice 的電腦使用她自己的私鑰(Private Key) 對這個信息摘要進行加密。
- 加密后的摘要,就是所謂的數(shù)字簽名(Digital Signature)。
- 關(guān)鍵點:私鑰是絕對保密且只有 Alice 自己擁有的。因此,能用Alice公鑰解開的簽名,必定是由Alice的私鑰生成的。
-
發(fā)送(Transmission)
- Alice 將 原始信息 M 和 數(shù)字簽名 一起發(fā)送給 Bob。
- 注意:原始信息 M 本身可以是明文的,也可以是加密的。數(shù)字簽名不關(guān)心信息內(nèi)容是否保密,只關(guān)心身份和完整性。如果需要保密,則需要再用Bob的公鑰對“信息+簽名”整體進行加密,這是另一個流程(數(shù)字信封)。
第二步:接收方驗簽流程
Bob 收到了來自 Alice 的信息和簽名。
-
接收信息
- Bob 收到了兩份東西:原始信息 M' 和 數(shù)字簽名。(這里用 M' 表示Bob收到的信息,因為它可能在傳輸中被篡改過)
-
解密簽名(Decrypting the Signature with Public Key)
- Bob 使用 Alice 公鑰(Public Key) 解密收到的數(shù)字簽名。
- 如果解密成功,就能得到一個摘要A。
- 意義:能成功用Alice的公鑰解密,證明這個簽名最初一定是用Alice的私鑰加密的。這就完成了身份認證。
-
計算信息摘要(Recomputing the Hash)
- 同時,Bob 使用與 Alice 相同的哈希函數(shù)(如 SHA-256),對他收到的原始信息 M' 進行計算,生成一個新的摘要B。
-
對比驗證(Comparison)
- Bob 將第 2 步解密得到的 摘要A 與第 3 步計算出的 摘要B 進行比對。
- 若相等,說明信息傳輸過程沒有篡改,是由Alice發(fā)出,Alice 事后無法否。
- 若不想等,說明信息在傳輸中被篡改,或者這個簽名根本不是用Alice的私鑰生成的。
流程總結(jié)圖
[發(fā)送方:Alice]
原始信息 M --> [哈希函數(shù)] --> 信息摘要 --> [用Alice的私鑰加密] --> 數(shù)字簽名
|
↓
將 [M] 和 [簽名] 一起發(fā)送
[接收方:Bob]
收到 [M'] 和 [簽名] --> 兩條路徑:
|
|--> [用Alice的公鑰解密簽名] --> 得到摘要A
|
|--> [對M'進行哈希計算] --> 得到摘要B
|
↓
[對比摘要A和摘要B] --> 相同則驗證成功,不同則失敗
簡單來說:
- 數(shù)字簽名是一種技術(shù),用于驗證數(shù)據(jù)的完整性和簽名者的身份。
- 數(shù)字證書是一種數(shù)字文件,它像一本護照,用來安全地綁定一個公鑰和其所有者的身份,而這個綁定關(guān)系本身又由一個受信任的第三方(CA)進行了數(shù)字簽名。
2、數(shù)字證書
數(shù)字證書,也稱為公鑰證書或身份證書,其核心作用是解決公鑰的信任問題。
回想一下數(shù)字簽名流程:接收方(Bob)需要用發(fā)送方(Alice)的公鑰來驗證簽名。但這里存在一個關(guān)鍵問題:Bob 如何確信他拿到的公鑰真的屬于 Alice,而不是一個冒充者提供的?
數(shù)字證書就是為了回答這個問題而誕生的。
數(shù)字證書可以理解為一本由官方認證機構(gòu)頒發(fā)的“數(shù)字護照”,它包含以下關(guān)鍵信息:
- 證書所有者的身份信息:如姓名、組織、電子郵件地址等。
- 證書所有者的公鑰:這是證書最核心的內(nèi)容之一。
- 證書頒發(fā)者(CA)的信息:是哪個機構(gòu)頒發(fā)的這個證書。
- 有效期:證書的生效日期和過期日期。
- 數(shù)字簽名:由證書頒發(fā)機構(gòu)(CA)對上述所有信息進行哈希并用CA的私鑰加密后生成的簽名。這是整個證書可信的根源。
證書頒發(fā)機構(gòu)(CA) 是一個受信任的第三方組織,它的核心職責就是核實實體(個人、網(wǎng)站、公司)的身份,然后為其簽發(fā)數(shù)字證書。操作系統(tǒng)和瀏覽器都預裝了大量受信任的根CA的證書(包含它們的公鑰)。
3、數(shù)字簽名 與 數(shù)字證書 的關(guān)聯(lián)
兩者的關(guān)系可以概括為:數(shù)字證書利用數(shù)字簽名技術(shù)來建立其自身的可信度,從而為數(shù)字簽名流程中的公鑰分發(fā)提供信任基礎。
這是一個層層嵌套的信任鏈:
-
CA使用數(shù)字簽名來簽署證書
- CA在頒發(fā)證書給Alice時,會將Alice的身份信息和她的公鑰等數(shù)據(jù)打包,并計算哈希值。
- CA然后用它自己的私鑰對這個哈希值進行加密,生成一個數(shù)字簽名,并將這個簽名附加到證書文件中。
- 現(xiàn)在,Alice擁有了一個包含她公鑰和CA簽名的數(shù)字證書。
-
用戶使用數(shù)字簽名來驗證證書
- 當Bob收到Alice的數(shù)字證書時,他需要驗證這個證書是否可信。
- Bob的電腦(瀏覽器/操作系統(tǒng))里預存了受信任的根CA的公鑰。
- Bob的電腦會:
- 用CA的公鑰去解密證書中的CA簽名,得到摘要A。
- 對證書中Alice的身份信息、公鑰等數(shù)據(jù)重新計算哈希,得到摘要B。
- 對比摘要A和摘要B。如果匹配,則證明:
- 這個證書的內(nèi)容是完整的,未被篡改。
- 這個證書確實是由那個受信任的CA頒發(fā)的。
- 至此,Bob就可以信任這本“數(shù)字護照”,進而信任里面包含的Alice的公鑰。
-
使用可信的公鑰進行數(shù)字簽名驗證
- 現(xiàn)在Bob確信了證書里的公鑰屬于Alice,他就可以用這個公鑰去驗證Alice發(fā)送來的信息的數(shù)字簽名了。
總結(jié)與類比
| 特性 | 數(shù)字簽名 | 數(shù)字證書 |
|---|---|---|
| 是什么 | 一種技術(shù)和流程 | 一種數(shù)字文件和憑證 |
| 目的 | 驗證數(shù)據(jù)/信息的完整性、身份和不可否認性 | 驗證公鑰所屬者的真實身份,建立公鑰信任 |
| 核心操作 | 用發(fā)送方私鑰加密信息的摘要 | 用CA私鑰加密證書內(nèi)容的摘要 |
| 驗證方式 | 用發(fā)送方公鑰解密簽名并對比摘要 | 用CA公鑰解密簽名并對比摘要 |
| 依賴關(guān)系 | 依賴數(shù)字證書來安全地獲取可信的公鑰 | 依賴數(shù)字簽名技術(shù)來保證自身內(nèi)容的可信度 |
一個簡單的比喻:
- 數(shù)字簽名 就像一個人在合同上的親筆簽名。
- 數(shù)字證書 就像這個人的護照,由官方機構(gòu)(CA)簽發(fā)。護照上包含了他的照片(身份)、簽名樣本(公鑰),并且護照本身有官方的防偽印章(CA的數(shù)字簽名)。
- 驗證過程:你首先檢查他的護照(數(shù)字證書)是不是真的(用官方印章的樣本來核對防偽印章),確保證件本身是真的。確認后,你相信護照里的信息(包括簽名樣本)是真實的。最后,你拿出護照里的簽名樣本(公鑰)去核對合同上的親筆簽名(數(shù)字簽名)是否一致。
所以,數(shù)字證書是數(shù)字簽名能夠大規(guī)模安全應用的基礎設施。沒有數(shù)字證書,公鑰分發(fā)環(huán)節(jié)就存在巨大風險,數(shù)字簽名的身份認證功能也就無從談起。