術(shù)語解釋:
ECC(橢圓曲線密碼學(xué)) | 一種建立公開密鑰加密的算法搂根,基于橢圓曲線數(shù)學(xué) |
---|---|
ECDHE | 基于ECC的密鑰交換算法甲锡,計(jì)算速度快 |
HMAC(散列消息認(rèn)證碼) | 是一種通過特別計(jì)算方式之后產(chǎn)生的消息認(rèn)證碼(MAC)舅逸,使用密碼散列函數(shù)奏瞬,同時(shí)結(jié)合一個(gè)加密密鑰洽议〖鼍可用來保證數(shù)據(jù)的完整性低匙。 |
SessionKey(會(huì)話密鑰) | 隨機(jī)生成的密鑰旷痕,用來加密會(huì)話過程中傳輸?shù)臄?shù)據(jù) |
MasterKey(主密鑰) | 通過ECDHE算法生成,用來加密SessionKey |
chacha算法 | 一種新式對(duì)稱加密算法顽冶,適用于ARM設(shè)備欺抗,計(jì)算速度快 |
關(guān)鍵詞:
輕量級(jí)、鏈路加密强重、密鑰安全绞呈、IOT安全
一、嵌入式IOT設(shè)備通信加密現(xiàn)狀
考慮到大部分的嵌入式IOT設(shè)備存在資源有限间景,計(jì)算能力不足佃声,無法運(yùn)行標(biāo)準(zhǔn)的TLS加密協(xié)議,或者缺少存儲(chǔ)空間放置體積較大的加密庫等情況倘要。
部分IOT產(chǎn)品可以通過增加性能或者添加加密硬件的方式運(yùn)行標(biāo)準(zhǔn)加密協(xié)議圾亏,但是此類方法會(huì)增加開發(fā)成本,不適用于產(chǎn)品研發(fā)經(jīng)費(fèi)有限的情況或單機(jī)片類產(chǎn)品封拧。常見的性能較弱的IOT產(chǎn)品通常使用單一的對(duì)稱加密算法對(duì)數(shù)據(jù)流進(jìn)行加密傳輸志鹃,或者不加密傳輸。使用單一對(duì)稱加密算法對(duì)數(shù)據(jù)流進(jìn)行加密存在較多的弱點(diǎn)泽西,可以被惡意第三方破解或利用曹铃,如:預(yù)共享密鑰多次加密數(shù)據(jù),存在被破解的可能捧杉,缺少防御重放攻擊的手段陕见,缺少鑒別加密后數(shù)據(jù)完整性的手段。
二糠溜、加密協(xié)議基本結(jié)構(gòu)
通常淳玩,加密協(xié)議涉及到的數(shù)據(jù)加密過程可分為三個(gè)部分:加密密鑰生成、數(shù)據(jù)加密非竿、數(shù)據(jù)完整性和真實(shí)性校驗(yàn)蜕着。密鑰生成的過程可以概述為發(fā)送端和接收端通過交換公鑰,使用ECDHE算法分別得出完全相同的主密鑰。在計(jì)算出主密鑰后承匣,使用隨機(jī)數(shù)生成會(huì)話密鑰蓖乘,結(jié)合對(duì)稱加密算法,使用會(huì)話密鑰對(duì)需要傳輸?shù)臄?shù)據(jù)進(jìn)行加密韧骗,并使用散列消息認(rèn)證碼確保數(shù)據(jù)的完整性和真實(shí)性嘉抒。
協(xié)議參與者交互流程:
(一)MasterKey生成階段(基于ECDHE):
- 發(fā)送端使用隨機(jī)數(shù)生成SessionKey、ks袍暴。
- 發(fā)送端從接收端獲取橢圓曲線E些侍、基點(diǎn)B(x,y)、接收端公鑰Kr政模。
- 發(fā)送端使用Ks = ks * B(x,y)得出發(fā)送端ECC公鑰岗宣,ks作為發(fā)送端ECC私鑰。
- 發(fā)送端發(fā)送Ks給接收端淋样。
- 發(fā)送端計(jì)算M= ks * Kr耗式,接收端計(jì)算M= kr * Ks,M為MasterKey趁猴。
流程圖如下:
(二)發(fā)送端數(shù)據(jù)加密封裝階段:
使用Sessionkey加密業(yè)務(wù)數(shù)據(jù)刊咳,加密算法為ChaCha,加密后的業(yè)務(wù)數(shù)據(jù)作為報(bào)文主體儡司。
使用MasterKey加密SessionKey娱挨,加密算法為AES-256-ECB。
將Version捕犬、服務(wù)端公鑰標(biāo)志让蕾、數(shù)據(jù)編號(hào)、加密后的SessionKey或听、發(fā)送端公鑰組合成報(bào)文頭部。
報(bào)文頭部示意圖:
|version| | receiverpublickeyflag | | dataid | | encryptedsessionkey | | senderpublickey |
--------------------------------------------------------------------------------------
??????????????[HEADER]
使用sha256計(jì)算報(bào)文頭部和報(bào)文主體哈希值笋婿。
使用MasterKey計(jì)算報(bào)文頭部和報(bào)文主體哈希值的hmac_sha256誉裆,公式:
hmac_sha256(MasterKey, sha256(header)+sha256(body))。
- 將計(jì)算出來的hmac_sha256(MasterKey,
sha256(header)+sha256(body))的值signature作為報(bào)文尾部缸濒。
報(bào)文數(shù)據(jù)結(jié)構(gòu):
struct {
ProtocolVersion version;
ReceiverPublicKeyFlag receiverpublickeyflag;
DataId dataid;
EncryptedSessionKey encryptedsessionkey;
SenderPublicKey senderpublickey;
Data data;
Signature signature;
} Ciphertext;
報(bào)文結(jié)構(gòu)示意圖:
|version| |receiverpublickeyflag| |dataid| |encryptedsessionkey|
|senderpublickey| | data | signature |
------------------------|-------------|------------------|
[HEADER] | [BODY] | [TAIL] |
(三)接收端校驗(yàn)解密階段:
- 接收端接收到加密后的數(shù)據(jù)包后足丢,使用hmac_sha256(MasterKey,
sha256(header)+sha256(body))計(jì)算簽名的值。 - 將計(jì)算出來的簽名和數(shù)據(jù)包的signature進(jìn)行比對(duì)庇配,相同則繼續(xù)處理斩跌,不相同則丟棄該數(shù)據(jù)包。
- 記錄dataid捞慌,若出現(xiàn)重復(fù)的dataid耀鸦,則丟棄包含重復(fù)dataid的數(shù)據(jù)包。
- 取出數(shù)據(jù)包中加密后的SessionKey,使用MasterKey進(jìn)行解密袖订,獲取SessionKey氮帐。
- 使用SessionKey解密加密后的數(shù)據(jù),獲取原始數(shù)據(jù)洛姑。
流程圖如下:
三上沐、設(shè)計(jì)思路總結(jié)
相對(duì)于復(fù)雜的標(biāo)準(zhǔn)TLS協(xié)議,我們可根據(jù)業(yè)務(wù)的實(shí)際場(chǎng)景選擇所需的安全模塊楞艾,以插裝的方式組合一款私有加密協(xié)議参咙,從而降低延時(shí)、提高載荷比硫眯、降低秘鑰管理的復(fù)雜度蕴侧。相對(duì)與單一加密方式,可有效防御重放攻擊舟铜,保證數(shù)據(jù)的完整性和真實(shí)性戈盈,進(jìn)一步提升加密密鑰的安全性。
四谆刨、有益效果
考慮到越來越復(fù)雜的網(wǎng)絡(luò)環(huán)境塘娶,在主流IOT設(shè)備計(jì)算資源不足的條件下,實(shí)現(xiàn)一種更輕量級(jí)的數(shù)據(jù)流加密方法痊夭,通過組合利用各類標(biāo)準(zhǔn)加密算法的優(yōu)勢(shì)刁岸,在資源有限的條件下也可以保證數(shù)據(jù)流的安全性,確保加密后的數(shù)據(jù)不會(huì)遭到破解她我,也無法被重復(fù)利用虹曙,保障IOT設(shè)備之間通信的安全性。