公鑰密碼學 數字簽名與數字證書

2021-08-02 04:37:43 字數 2397 閱讀 3668

a 建立一對公鑰/私鑰對,私鑰自己儲存,公鑰給其他人(例如 b, c, d)。公鑰和私鑰都能用於加密和解密。b 給 a 傳送資訊時用 a 的公鑰加密,a 收到之後用私鑰解密。反之,a 給 b 傳送資訊時,用私鑰加密,b 收到之後用 a 的公鑰解密。

在上述場景中,非對稱金鑰的作用是加密。

參考

公開金鑰加密

a 給 b 傳送 messagea 時,先 hash 將 messagea 生成一段摘要(digest, hash(messagea) –> digesta),然後將 digesta 用私鑰加密生成數字簽名(digital signature, encrypt(digesta) –> signaturea),將 signaturea 附在 messagea 之後(messagea + signaturea)傳送給 b.

b 收到訊息之後先用 a 的公鑰解密數字簽名(decrypt(signaturex) –> digestx),如果能順利解密,說明訊息是由 a 傳送的;b 再將 messagex hash 生成摘要(hash(messagex) –> digestx2),如果 digestx 和 digestx2 相等,說明訊息沒有被修改過(messagex == messagea)。

在上述場景中,非對稱金鑰的作用有2個:

1.簽名

2.判斷訊息是否完整

在上文中,如果 c 用自己的公鑰替換了 b 擁有的 a 的公鑰,那麼 c 用自己的私鑰給 b 發訊息,b 就誤以為是 a, 這樣,c 就可以冒充 a 了。

現在的問題是「b 怎麼證明擁有的公鑰是 a 的而不是 b 的」。所以,這裡引入了第三方機構來做認證,即認證機構(ca, certificate authority)。具體的工作原理是:

1. a 事先向 ca1 申請數字證書 certificatea1, certificatea1 包含了 a 的公鑰及 ca1 用私鑰加密一些列資訊(包括 a 的公鑰、頒發機構等一系列資訊)之後生成的簽名,即 certificatea1 = 證書(明文,包含 a 的公鑰等資訊) + 簽名(密文,通過 ca1 的私鑰加密生成,只有 ca1 的公鑰能解開)。由於每個人都可以擁有 ca1 的公鑰(瀏覽器及一些庫會內建一些 ca 根證書,根證書中包含了 ca 自身的公鑰,見下文),用 ca1 的公鑰解密 certificatea1 中包含的簽名,得到證書摘要的 hash 值,再用證書中的資訊算出乙個新的 hash 值,如果二者相同,則表示證書 certificatea1 是屬於 a 的。

2. a 給 b 傳送訊息時,會附加上 ca1 頒發的數字證書 certificatea1,現在的訊息是 「messagea + signaturea + certificatea1「, b 收到訊息之後,用 ca1 的公鑰驗證 certificatea1 是否合法,如果合法,則取 certificatea1 中包含的公鑰驗證 messagea 和 signaturea.

q. ca 一定值得信任嗎?

比較常見的還有國際權威的數字證書認證機構,比如 globalsign、verisign、geotrust、comodo, 一般收取高額費用。也有免費的數字證書認證機構,比如 cacert 和 startssl。在資料傳輸的安全性上,免費與收費的數字證書並沒有區別。 主要區別在於,一旦 ca 用於簽發數字證書的私鑰洩露,或者資料傳輸使用的加密演算法被破解,收費的機構會根據你的付費額度提供鉅額的賠償。免費的數字證書認證機構則不會提供賠償。數字證書也可以由使用者自己製作生成(自簽名),但是自簽名證書不會被廣泛信任,故通常僅用於小範圍測試等目的。[ 數字證書 ]

整個 ca 層次結構和 dns 體系有點像,如圖:

那 root ca 的證書由誰簽發呢?答案是:自己簽發給自己(self-signed ca certificate),即使用自己的私鑰生成簽名。瀏覽器會自帶一些受信任的 root ca 證書,證書中包含了 root ca 的公鑰,以此來校驗下一級的證書是否合法。

參考

what is a digital signature?

public key infrastructure

x.509 public key certificates

certificate authority (ca) hierarchy, root ca, intermediate ca, issuing ca

**數字證書

公鑰 私鑰 數字簽名 數字證書

1.公鑰與私鑰原理 1 鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰 2 鮑勃把公鑰送給他的朋友們 帕蒂 道格 蘇珊 每人一把。3 蘇珊要給鮑勃寫一封保密的信。她寫完後用鮑勃的公鑰加密,就可以達到保密的效果。4 鮑勃收信後,用私鑰解密,就看到了信件內容。這裡要強調的是,只要鮑勃的私鑰不洩露,這封信就是安...

私鑰 公鑰 數字簽名和數字證書

先粗略解釋一下 一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用數字2,就是我的私鑰,來...

數字簽名與數字證書

數字簽名 將 報文按雙方約定的hash 演算法計算得到乙個固定位數的 報文摘要。在 數學上保證 只要改動報文中任何一位,重新計算出的 報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用傳送者的私人 金鑰加密,然後連同原報文一起傳送給接收者,而產生的報文即稱 數字簽名 數字...