侵權(quán)投訴
訂閱
糾錯(cuò)
加入自媒體

物聯(lián)網(wǎng)云平臺加密、證書的那些事

不可逆加密

顧名思義,不可逆加密就是說把明文加密之后得到密文,但是不能從密文還原得到明文。從術(shù)語上來說,一般不把這個(gè)加密結(jié)果稱作密文,而是稱作摘要或者指紋。

不可逆加密原理:把一個(gè)任意大小的數(shù)據(jù),經(jīng)過一定的算法,轉(zhuǎn)換成規(guī)定長度的輸出。如果數(shù)據(jù)的內(nèi)容發(fā)生了一絲絲的變化,再次加密就得到另一個(gè)不同的結(jié)果,而且是大不相同。從這個(gè)角度看,是不是稱作指紋更形象一些?

不可逆加密最常用的算法就是:MD5、SHA1。

回想一下:我們在下載一些軟件的時(shí)候,在服務(wù)器上除了看到軟件的下載地址,一般還會看到該軟件的MD5碼。我們把軟件下載到本地之后,計(jì)算得到MD5,也就是文件的指紋,然后把這個(gè)MD5與服務(wù)器上公布的MD5進(jìn)行比較,如果這兩個(gè)MD5不一致,就說明下載的文件被別人修改過。

這是glib庫的下載頁面:

補(bǔ)充:SHA相關(guān)知識

SHA
SHA安全哈希算法,由美國國家標(biāo)準(zhǔn)技術(shù)研究院發(fā)布的一組加密函數(shù)。它是一種常用的摘要算法,就是輸入一段數(shù)據(jù),輸出合法的證書一個(gè)摘要信息,包括SHA0、SHA1、SHA2等不同的版本。SHA1
代表安全哈希算法1,接收輸入,輸出一個(gè)160位的哈希值,稱作信息摘要。在2005年之后,SHA1被認(rèn)為不安全。SHA2
SHA2指的是具有兩個(gè)不同塊大小的相似哈希函數(shù)的族,其中包括:SHA256,SHA512。SHA256可以輸出一個(gè)256位的哈希值,安全級別更高。

一個(gè)實(shí)際的使用場景:OTA升級

首先服務(wù)器推送一個(gè)upgrate.json格式字符串給設(shè)備,文件中包括:新固件的下載地址URL,新固件的MD5值;設(shè)備根據(jù)URL下載新固件到本地;設(shè)備計(jì)算下載的新固件MD5值,與upgrade.json中的MD5值進(jìn)行比較;如果這兩個(gè)MD5值一致,說明下載的固件沒有問題,那么就開始升級。

再來了解一下不可逆加密的特點(diǎn):

不可逆:除非使用窮舉等手段,原則上不存在根據(jù)密文推斷出原文的算法;雪崩效應(yīng):對輸入數(shù)據(jù)敏感,原始數(shù)據(jù)的極小改動會造成輸出指紋的巨大差異;防碰撞:很難找到兩段不同的數(shù)據(jù),輸出相同的指紋。公鑰和私鑰

上面說到了非對稱加密,那么就必須再補(bǔ)充一下私鑰和公鑰。從字面上就可以看出:它倆是一對兄弟,都是秘鑰,必須成對使用,稱作:秘鑰對。我們可以通過一些軟件工具(例如:OpenSSL)生成自己的公鑰和私鑰。

公鑰:就是公開告訴別人的;私鑰:就是自己的,作為寶貝一樣自己私藏起來,千萬不要告訴別人。

公鑰和私鑰的作用有2個(gè):

數(shù)據(jù)加密:公鑰加密,私鑰解密,用于通信場景;數(shù)字簽名:私鑰加密,公鑰解密,用于不可耍賴場景。

數(shù)據(jù)加密就是上面描述的非對稱加密,例如:

張三想發(fā)一個(gè)文件給我,為了防止文件被其他人看到,于是張三用我的公鑰對文件進(jìn)行加密,然后把加密后的文件發(fā)給我。我拿到密文后,用我的私鑰就可以把密文還原成原始的文件,其他人即使拿到了密文,但是沒有我的私鑰,就解不開文件。如下面這張圖:

數(shù)字簽名與我們?nèi)粘I钪械慕钘l上的簽名類似,一旦簽名了,就具有法律效力,不能耍賴說:這個(gè)不是我簽名,我不認(rèn)。具體流程是:我寫了一個(gè)文件,然后用我的私鑰對文件進(jìn)行加密,那么如果以后我耍賴說:這個(gè)文件不是我寫的,其他人就可以用我的公鑰來嘗試對加密后的文件進(jìn)行解密。如果成功解密了,就說明這個(gè)文件一定是用我的私鑰進(jìn)行加密的,而私鑰只有我才有,那就說明這個(gè)文件一定是我寫的。如下圖:

證書

前面談到了公鑰是公開給別人的,本質(zhì)上就是一段數(shù)據(jù),那么這段數(shù)據(jù)是以什么樣的形式或者說以什么樣的載體發(fā)送給別人的呢?答案就是:證書。

如何申請證書

我們以一個(gè)網(wǎng)站為例,瀏覽器在訪問網(wǎng)站的時(shí)候,在握手階段,網(wǎng)站會把自己的證書發(fā)送給瀏覽器。那么這個(gè)證書是如何產(chǎn)生的呢?

Step1
在網(wǎng)站上線之初,需要把自己的相關(guān)信息放在一個(gè)請求文件中(server.req),把請求文件發(fā)送給一個(gè)權(quán)威的認(rèn)證機(jī)構(gòu)。請求文件的內(nèi)容包括:

網(wǎng)站的域名
申請者信息
公鑰
以及其他一些相關(guān)信息

Step2
認(rèn)證機(jī)構(gòu)通過其他途徑來確定申請者是合法的。

Step3
認(rèn)證機(jī)構(gòu)使用某個(gè)算法,對請求文件server.req中的信息進(jìn)行計(jì)算,得到一個(gè)數(shù)字摘要。

算法包括:

MD5
SHA-1
SHA-256

信息包括:

申請者的基本信息:網(wǎng)站使用的加密算法、網(wǎng)站使用的hash算法;
申請者的公鑰;
認(rèn)證機(jī)構(gòu)的信息:認(rèn)證機(jī)構(gòu)的名稱,證書到期時(shí)間。

Step4
認(rèn)證機(jī)構(gòu)用自己的私鑰,對Step3中得到的數(shù)字摘要進(jìn)行加密,得到數(shù)字簽名(也就證書簽名)。

Step5
認(rèn)證機(jī)構(gòu)把以上這些信息進(jìn)行匯總,得到最終的證書文件server.crt,然后發(fā)給申請者。

最終,證書server.crt中的內(nèi)容包括這幾個(gè)大類:

申請者的基本信息:網(wǎng)站使用的加密算法、網(wǎng)站使用的hash算法;申請者的公鑰;認(rèn)證機(jī)構(gòu)的信息:認(rèn)證機(jī)構(gòu)的名稱,證書到期時(shí)間。認(rèn)證機(jī)構(gòu)的證書簽名。如何確認(rèn)證書的合法性

現(xiàn)在,客戶端拿到了服務(wù)器發(fā)來的證書文件,應(yīng)該如何驗(yàn)證這是一個(gè)合法的證書呢?

Step1
讀取證書中的明文信息,包括:申請者的基本信息,申請者的公鑰,認(rèn)證機(jī)構(gòu)的信息。

Step2
從瀏覽器或者操作系統(tǒng)中查找這個(gè)認(rèn)證機(jī)構(gòu)的相關(guān)信息,得到這個(gè)認(rèn)證機(jī)構(gòu)的公鑰。

補(bǔ)充:瀏覽器或者操作系統(tǒng)中,一般都會預(yù)裝一些可信任的權(quán)威認(rèn)證機(jī)構(gòu)的證書列表,所以能拿到認(rèn)證機(jī)構(gòu)的公鑰。

Step3
使用認(rèn)證機(jī)構(gòu)相同的算法,對Step1中的明文信息進(jìn)行計(jì)算,得到摘要1。

Step4
使用認(rèn)證機(jī)構(gòu)的公鑰,對證書中認(rèn)證機(jī)構(gòu)的數(shù)字簽名進(jìn)行解密,得到摘要2。

Step5
比較摘要1與摘要2是否相同,如果相同,說明這個(gè)證書是合法的,也就證明當(dāng)前訪問的是一個(gè)合法的服務(wù)器。

單向認(rèn)證和雙向認(rèn)證

上面描述的認(rèn)證過程,是瀏覽器用來確認(rèn)所訪問的網(wǎng)站是否是一個(gè)合法的網(wǎng)站;文章開頭所舉的例子:一個(gè)物聯(lián)網(wǎng)產(chǎn)品在連接云平臺的時(shí)候,是云平臺來驗(yàn)證這個(gè)想連接進(jìn)來的設(shè)備是否為一個(gè)合法的設(shè)備。

這兩個(gè)場景中都是單向認(rèn)證,也就是通信的一方來驗(yàn)證另一方是否合法。那么雙向認(rèn)證就很好理解了:通信的每一方都要認(rèn)證對方是否合法。

至于如何選擇使用單向認(rèn)證或者雙向認(rèn)證,甚至是不使用證書(只使用用戶名和密碼來鑒權(quán)),這就需要根據(jù)實(shí)際的使用場景、安全等級、操作的難易程度來決定了。比如:在物聯(lián)網(wǎng)產(chǎn)品中,每一個(gè)產(chǎn)品都需要在生產(chǎn)階段把動態(tài)生成的證書燒寫到設(shè)備中,增加了生產(chǎn)環(huán)節(jié)的流程和成本,為了安全性,萬萬不可偷懶。如果沒有證書來驗(yàn)證,那么黑客就可以模擬無數(shù)個(gè)設(shè)備,頻繁的連接到云平臺,這就存在極大的安全隱患。

認(rèn)證機(jī)構(gòu)

證書本質(zhì)上就是一個(gè)文件,只不過這個(gè)文件具有特殊的一個(gè)性質(zhì):可以被證明是合法的。那么應(yīng)該如何來證明呢?這就要來說一下認(rèn)證機(jī)構(gòu)。

認(rèn)證機(jī)構(gòu)(CA: Certificate Authority)是一個(gè)權(quán)威的組織,是被國家、行業(yè)認(rèn)可的權(quán)威結(jié)構(gòu),不是隨便一個(gè)機(jī)構(gòu)都有資格頒發(fā)證書,不然也不叫做權(quán)威機(jī)構(gòu)。只要能證明一個(gè)證書是由CA機(jī)構(gòu)頒發(fā)的,我們就認(rèn)為這個(gè)證書是合法的,也就是說:證書的可信任性基于信任機(jī)制。

就像銀行貸款給個(gè)人一樣,銀行在放款之前,會到征信系統(tǒng)中查詢這個(gè)人的信用報(bào)告,如果征信系統(tǒng)中表明這個(gè)人的信用沒有問題,銀行相信征信系統(tǒng),所以銀行就相信這個(gè)人,可以貸款給他,這是一個(gè)信任鏈的傳遞。

CA認(rèn)證機(jī)構(gòu)就類似于征信系統(tǒng),相當(dāng)于CA結(jié)構(gòu)給證書進(jìn)行了背書,它保證從它手里頒發(fā)的證書都是合法有效的,那么我們只要能證明證書是從CA認(rèn)證機(jī)構(gòu)頒發(fā)的,就可以認(rèn)為證書是有效的。

證書鏈

CA認(rèn)證機(jī)構(gòu)是一個(gè)樹狀的結(jié)構(gòu),最頂部的稱為根認(rèn)證機(jī)構(gòu)。往下層是:二級認(rèn)證機(jī)構(gòu)、三級認(rèn)證機(jī)構(gòu)...。

根認(rèn)證機(jī)構(gòu)給二級認(rèn)證機(jī)構(gòu)頒發(fā)證書,二級認(rèn)證機(jī)構(gòu)給三級認(rèn)證結(jié)構(gòu)頒發(fā)證書...。不同等級的認(rèn)證機(jī)構(gòu)對審核的要求也不一樣,于是證書也分為免費(fèi)的、便宜的和貴的。

你可能會問:那么根認(rèn)證機(jī)構(gòu)的證書是由誰簽名的?答案是:根認(rèn)證機(jī)構(gòu)自己簽名的,這也叫做自簽名。因?yàn)楦J(rèn)證機(jī)構(gòu)是由國家或者行業(yè)組織認(rèn)可的,已經(jīng)是一個(gè)可以信賴的權(quán)威機(jī)構(gòu),所以可以為自己簽名。

另外,我們在測試的過程中,也常常利用OpenSSL中提供的程序來產(chǎn)生自簽名的證書,當(dāng)然,這個(gè)測試的自簽名證書只能你自己玩,因?yàn)閯e人不信任你。

證書文件的后綴名

剛接觸到證書概念的小伙伴,常常被眼花繚亂的后綴名所迷惑。

首先要明確一點(diǎn):證書文件的后綴名只是為了見名識意,實(shí)際上可以取任意的名字。常見的后綴名包括:

.crt:per格式的證書
.der: der格式的證書
.key:pem格式的私鑰
.pub:pem格式的公鑰
.req:申請證書時(shí)發(fā)送給CA認(rèn)證機(jī)構(gòu)的請求文件
.csr:也表示請求文件

證書文件的格式

所有證書內(nèi)容格式有兩種:pem格式和der格式,這兩種格式的證書文件可以相互轉(zhuǎn)換,利用OpenSSL中的程序就可以完成。

PEM格式(Privacy Enhanced Mail)

pem格式的證書內(nèi)容是經(jīng)過加密的文本文件,一般是base64格式,可以用記事本來打開一個(gè)base64格式的證書,例如下面這個(gè)證書文件的內(nèi)容:

-----BEGIN CERTIFICATE-----
MIIGbzCCBFegAwIBAgIICZftEJ0fB/wwDQYJKoZIhvcNApQELBQAwfDELMAkGA1UE
BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK
DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp
...
Nztr2Isaaz4LpMEo4mGCiGxec5mKr1w8AE9n6D91CvxR5/zL1VU1JCVC7sAtkdki
vnN1/6jEKFJvlUr5/FX04JXeomIjXTI8ciruZ6HIkbtJup1n9Zxvmr9JQcFTsP2c
bRbjaT7JD6MBidAWRCJWClR/5etTZwWwWrRCrzvIHC7WO6rCzwu69a+l7ofCKlWs
y702dmPTKEdEfwhgLx0LxJr/Aw==
-----END CERTIFICATE-----

補(bǔ)充:base64算法就是把原始數(shù)據(jù)中按照每3個(gè)字節(jié)進(jìn)行拆分,3個(gè)字節(jié)是24bit,然后把24bit分成4組,每組6bit,最后在每個(gè)6bit的簽名添加2個(gè)0,這樣得到的4組字節(jié)碼就可以用ascII碼來表示了。

DER格式(Distinguished Encoding Rules)

der格式的證書文件內(nèi)容是經(jīng)過加密的二進(jìn)制數(shù)據(jù),也就是說文件內(nèi)容打開后是亂碼。

X.509標(biāo)準(zhǔn)

上面說到證書中包含了必要的信息,那么這些信息在文件中并不是隨意擺放的,而是要根據(jù)固定的格式來存儲,只有這樣才能通過軟件生成或解析。那么這個(gè)固定的格式是由誰來規(guī)定的呢?這就是X.509標(biāo)準(zhǔn)與公共秘鑰證書。

X.509是一個(gè)體系、標(biāo)準(zhǔn),用來規(guī)定一個(gè)證書的格式標(biāo)準(zhǔn),CA認(rèn)證結(jié)構(gòu)在生成證書的時(shí)候,就根據(jù)這個(gè)標(biāo)準(zhǔn)把每部分信息寫入到證書文件中。

X.509包括3個(gè)版本:V1, V2和V3。每一個(gè)版本中頒發(fā)證書時(shí),必須包含下列信息:

版本號:用來區(qū)分版本;
系列號:由CA認(rèn)證機(jī)構(gòu)給每一個(gè)證書分配一個(gè)唯一的數(shù)字編號;
算法簽名標(biāo)識符:用來指定CA認(rèn)證機(jī)構(gòu)在頒發(fā)證書時(shí)使用的簽名算法;
認(rèn)證機(jī)構(gòu):頒發(fā)證書的機(jī)構(gòu)唯一名稱;
有效期限:證書有效期(開始時(shí)間和結(jié)束時(shí)間);
主題信息:證書持有人的基本信息;
公鑰信息:證書持有者的公鑰;
認(rèn)證結(jié)構(gòu)簽名:以確保這個(gè)證書在頒發(fā)之后沒有被篡改過;

證書格式

總之:證書的核心功能就是安全的傳遞公鑰!

<上一頁  1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

安防 獵頭職位 更多
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號