一文读懂密码学中的证书
一文讀懂密碼學中的證書
之前的文章中,我們講到了數字簽名,數字簽名的作用就是防止篡改和偽裝,并且能夠防止否認。但是要正確運用數字簽名技術還有一個非常大的前提,那就是用來驗證簽名的公鑰必須真正的屬于發送者。
如果你獲取到的公鑰是偽造的,那么不管你的簽名算法多完美,也是會得到錯誤的結果。
那么我們怎么才能安全的獲得發送者的公鑰呢?這里就需要使用到證書了。所謂證書就是通過第三方的可信機構對發送者的公鑰進行簽名而得到的。
這里有兩個概念:公鑰證書(Public-Key Certificate, PKC)和認證機構(Certification Authority, CA)。熟悉區塊鏈的朋友應該經常會聽到CA這個名詞,CA就是這里的認證機構。
證書的例子
我們看一個實際中可能會遇到的例子:
假如A要向B發送一條消息,這條消息希望使用B的公鑰來加密,但是A事先無法知道B的公鑰到底是什么,那么可以使用下面的證書架構:
好了,這就是一個最簡單的證書使用的例子。
證書的標準和生成
因為證書是由認證機構頒發的,使用者需要對其進行驗證,那么就需要一個標準的證書格式來方便使用者使用。最廣泛的一個證書標準格式是由ITU(International Telecommunication Union)和ISO(International Organization for Standardization)制定的X.509規范。
x.509有很多擴展格式包括:DER、CRT、CER、PEM等。他們在不同的環境中有不同的用處。
那么怎么生成證書呢?可以借助第三方工具,也可以使用命令行命令比如:openssl來生成。具體的生成命令這里就不細講了。
PKI
有了證書的格式,是不是就可以實際使用證書了呢?
其實這還是不夠的,我們還需要定義證書該由誰來頒發,如何頒發,如果作廢證書等。而PKI(Public-Key Infrastructure)公鑰基礎設施就是為了有效的使用證書而制定的一系列規范和協議。
PKI的組成主要有三部分:
用戶是使用PKI的人,也就是需要借助CA來發布自己的公鑰和獲取別人公鑰的人。
認證機構就是CA了,它是對證書進行管理的人。CA除了生成證書之外,還有一個非常重要的工作就是作廢證書。
因為用戶有可能會丟失密鑰,或者出于特殊的原因,廢棄掉某些證書。那么就可以向CA發起一個作廢請求。而作廢的證書會被保存在CRL中。CRL就是對外的證書廢棄列表。用戶在使用證書的時候必須首先查看該證書是否在CRL列表中。如果在則該證書不能夠被使用。
倉庫是一個保存證書的數據庫,用戶注冊之后生成的證書都存在倉庫中,以供其他的用戶獲取使用。
CA的層級結構
我們在Fabric中有了解到有個root CA的概念,這是什么意思呢?
我們從上面的介紹可以知道,其實CA不僅僅可以由機構來擔任,任何人只要會對公鑰進行簽名都可以構建CA。
如果是一個很大的機構要構建CA,比如一個總公司要構建CA,那么它可以先構建一個root CA,然后再在root CA之下構建子CA,這些子CA來負責底層具體用戶的證書頒發。
對證書的攻擊
因為證書是基于數字簽名技術,所以所有基于數字簽名技術的攻擊都適用于證書。
這里主要針對于PKI體系的攻擊做個介紹:
用戶B如果想生成證書的話,需要在CA注冊,并且將自己的公鑰提交到CA。那么在公鑰提交之前,可能會被惡意替換。
所有的用戶公鑰都是由CA的私鑰做簽名的,如果CA的私鑰被盜的話,那么所有的證書都是不安全的。
CA其實是一個中心化的機構,中心化的機構往往都會出現這樣的問題。攻破一個就攻破了所有。
攻擊者可以偽裝成認證機構讓用戶上當。所以用戶在注冊的時候一定要小心。
如果B的密鑰丟了,那么他會向CA提交一個廢棄申請,但是在提交申請到申請生效,到CRL生成直接有一個時間差,這段時間內廢棄的密鑰仍然可以合法使用。
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多內容請訪問 http://www.flydean.com/certificate/
總結
以上是生活随笔為你收集整理的一文读懂密码学中的证书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java内存模型(JMM)和happen
- 下一篇: 更加安全的密钥生成方法Diffie-He