什麼是證書鏈?

證書鏈是什麼鏈麼,能發幣麼?

我日常工作中,總要在手機裏備一份CA的證書鏈文件,經常有人要我發一份我們的證書鏈文件。這時候我想說,“我們是權威的政務服務電子認證機構,我們的證書鏈是可以從網上下載到的。"

不要懵,證書鏈通常都是公開,不需要保密!此時你是不是感到疑惑,通常我們的證書不都是存在U盾中的麼,怎麼能輕易交給別人?

爲了說明這些問題,我要講一些概念。本着越基礎,越不好講的原則,我從公鑰算法講起,還有數字簽名、PKI,還要介紹一下區塊鏈、電子證照、密碼機、簽名驗籤服務器、和USBkey等概念。

公鑰算法

公鑰算法是一種加密算法。加密算法分爲對稱加密和非對稱加密算法,非對稱加密算法又稱爲公鑰算法。

對稱加密的關鍵在密鑰。傳遞加密數數據,Alice選取密鑰key,加密明文發送給Bob,Bob採用相同的key解密數據。 

使用對稱密鑰時,通信雙方必須擁有相同的密鑰。通常,對稱密鑰採用線下方式進行分發,或者採用一種可靠方式進行分發。例如,Alice和Bob坐在一起,共同選擇了一個密鑰,這個密鑰用來做數據加密。

這個簡單的分配密鑰的方式,不適合規模較大的羣體。羣體中,要求每2個的通信內容其他人都不能解密。以3個人爲例,A、B、C三個人,需要分配AB/AC/BC3個密鑰;當系統中有N個人時,需要分配 N*(N-1)/2個密鑰,每個人都要保存與其他N-1個人通信的密鑰。此時,需要密鑰服務中心爲用戶生成分配管理密鑰,依靠個體用戶自身很難管理。

以上就是對稱密鑰算法的難題,對稱密鑰分發。

非對稱密鑰就解決了密鑰分發的問題,每個人的密鑰都是由2個密鑰組成。即Alice有一個公鑰一個私鑰,Bob有一個公鑰一個私鑰。

公私鑰的用法:用一個人的公鑰加密,必須用這個人的私鑰解密;用私鑰加密,必須用公鑰解密。即一個人的公鑰和私鑰,互爲加解密密鑰。關於公鑰應用協議,會用到多人的密鑰,概念變複雜容易混淆,但是要把握“一個人的公私鑰互爲加解密密鑰”的原理。

公私鑰通常由Alice和Bob自己產生,此時只有自己知道自己的公鑰和私鑰,爲了實現保密通信,必須公佈自己的公鑰。公佈公鑰可以多種方式,只要可以公開讀取就可以。

保密通信的例子,Alice和Bob已公開了自己的公鑰,Alice用Bob的公鑰加密數據,加密後的數據只有Bob的私鑰解密,其他人截獲了密文也無法解密。(真實情況Alice用Bob的公鑰加密一個會話密鑰,Alice和Bob用會話密鑰加密通信內容,因爲公鑰加密算法效率低)

利用公鑰算法實現加密數據通信,要求公佈個人的公鑰,且只能自己擁有私鑰。

數字簽名

數字簽名是一種基於公鑰的抗抵賴技術。Alice和Bob簽訂一份合同,合同內容是:Bob有一個軟件的開發需求,共列了10項軟件的feature,並承若支付給Alice 3萬塊錢。Alice擔心軟件開發完成,Bob不履行合同,或少支付開發費用,要求Bob對合同進行數字簽名。

Bob用自己的私鑰,對合同文件進行加密,得到密文發給Alice。Alice收到密文後,用Bob的公鑰進行解密運算,得到了合同的原文,到此Alice就已經可以確定Bob已經完成了合同的數字簽名。

當Bob抵賴,不履行合同時。Alice到仲裁機構,出示Bob的密文,和Bob的公鑰,仲裁機構用Bob的公鑰解密密文,得到合同原文。仲裁機構認定,因爲公鑰解密了合同密文,密文一定是由原文經過Bob的私鑰加密生成的。因此仲裁機構推斷認定,Bob是與Alice簽訂了合同。

這個例子,說明了通過數字簽名可以確定1.信息的來源2.發生糾紛時,信息源不能抵賴。

通常,標準的數字簽名要首先對原文HASH,然後對hash結果進行簽名(hash可以壓縮簽名信息的長度)。校驗數字簽名時,對原文進行hash,和解密hash進行比較,當兩個結果相同時證明數字簽名有效,說明簽名者確認過原文檔,且不可抵賴。

PKI體系

上面將的數字簽名是否還要問題?當Bob聲稱Alice提供的公鑰不是自己的公鑰,而是Alice讓黑客篡改了公開系統,並用僞造的私鑰對合同進行數字簽名的。上面的問題核心,是如何確定Bob的公鑰,且Bob不能抵賴。

下面介紹一下有權威機構的公鑰體系PKI,Bob申請數字證書的流程:

1.Bob自己生成一對隨機的公私鑰,私鑰自己保留。

2.將Bob的個人信息和公鑰,放在一個請求文件中,發送給CA。

3.CA通過嚴格的流程確定Bob的身份,例如提交身份證證明,或者要求所在單位出具證明。

4.CA用自己的私鑰,將Bob的請求文件進行數字簽名,將Bob個人信息、Bob公鑰、CA生成的簽名這3個信息打包成一個證書文件。

此時公鑰公佈系統,變成了公鑰證書公佈系統。當Alice驗證Bob的合同時,經過2個步驟:

1.驗證Bob的數字證書。驗證證書的過程,就是驗證數字簽名的過程。首先用CA的公鑰解密證書中的簽名,計算證書中信息的hash值,比較hash和解密簽名結果,不相符即證書被篡改過。

2.驗證合同的數字簽名。用Bob的公鑰證書,驗證合同的數字簽名,與沒有PKI時驗證過程相同。

理清一下公鑰證書、私鑰、數字簽名的關係,如圖:

在這個例子中,根CA的公鑰證書和運行CA的公鑰證書,就是驗證合同簽名的證書鏈

GMSSL中調用簽名和驗籤的例子:

$ gmssl sm2utl -sign -in msg.txt -inkey sm2.pem -id Alice -out sig.der
$ gmssl sm2utl -verify -in msg.txt -sigfile sig.der -pubin -in sm2Pub.pem -id Alice

區塊鏈

在比特幣中,驗證一筆交易就是檢驗交易的數字簽名,採用交易賬戶擁有者的公鑰進行驗籤。

在比特幣上,沒有PKI系統,公鑰信息即賬戶主題,公鑰對應的私鑰即用來進行數字簽名。

電子證照

電子證照即機構對文檔進行數字簽名,通過驗證數字簽名就可以驗證證照信息。

密碼機和簽名驗籤服務器

在GMSSL的例子中,gmssl sm2utl -sign定義了簽名接口。

密碼機和簽名驗籤服務器,就是硬件密碼運算設備,嚮應用提供API,完成各種密碼算法。

簽名驗籤服務器,比密碼機多提供簽名和驗籤接口。密碼機更多是底層Api,如sm2 公鑰加密,sm3哈希,sm4加密等。

USBKey

上面的例子看到,Bob的私鑰是非常重要的,不能泄露給別人。

USBKey就是可以用來存儲私鑰,並且要求私鑰不能拷貝出來,只能在USBKey中執行運算。通常key還用口令方式加密存儲,進行運算時要先輸入pin碼,解密後才能用來運算。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章