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

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

不可逆加密

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

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

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

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

這是glib庫(kù)的下載頁(yè)面:

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

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

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

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

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

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

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

公鑰:就是公開(kāi)告訴別人的;私鑰:就是自己的,作為寶貝一樣自己私藏起來(lái),千萬(wàn)不要告訴別人。

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

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

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

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

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

證書(shū)

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

如何申請(qǐng)證書(shū)

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

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

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

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

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

算法包括:

MD5
SHA-1
SHA-256

信息包括:

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

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

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

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

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

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

Step1
讀取證書(shū)中的明文信息,包括:申請(qǐng)者的基本信息,申請(qǐng)者的公鑰,認(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)中,一般都會(huì)預(yù)裝一些可信任的權(quán)威認(rèn)證機(jī)構(gòu)的證書(shū)列表,所以能拿到認(rèn)證機(jī)構(gòu)的公鑰。

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

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

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

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

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

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

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

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

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

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

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

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

證書(shū)鏈

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

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

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

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

證書(shū)文件的后綴名

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

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

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

證書(shū)文件的格式

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

PEM格式(Privacy Enhanced Mail)

pem格式的證書(shū)內(nèi)容是經(jīng)過(guò)加密的文本文件,一般是base64格式,可以用記事本來(lái)打開(kāi)一個(gè)base64格式的證書(shū),例如下面這個(gè)證書(shū)文件的內(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碼來(lái)表示了。

DER格式(Distinguished Encoding Rules)

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

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

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

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

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

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

證書(shū)格式

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

聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

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

暫無(wú)評(píng)論

暫無(wú)評(píng)論

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

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