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