◆曹龍龍
基于屬性加解密通信系統(tǒng)的設計與實現(xiàn)
◆曹龍龍
(山東農(nóng)業(yè)大學信息科學與工程學院 山東 271000)
為了實現(xiàn)用戶雙方通信的安全和保密性,將屬性加密用于實際應用中,通過OpenABE加密算法,使用流式套接字編程,實現(xiàn)了一方加密消息發(fā)送,另一方接收并解密消息。為了實現(xiàn)對端交互通信和任意一方加解密,引入了CryptHook通信方式,通過socket劫持,實現(xiàn)了對端加解密交互通信系統(tǒng),通過運行測試,系統(tǒng)加解密消息均正常,實現(xiàn)了雙方保密通信。
屬性加密;OpenABE;流式套接字;CryptHook
屬性加密(ABE),是一種新的公鑰加密算法。最先由Waters提出,被看作是最具前景的支持細粒度訪問的加密源語[1]。張文芳[2]提出了基于CP-ABE(密文策略屬性基加密)的屬性撤銷方案。該方案中設計了高效的重加密算法,引入了屬性撤銷列表,實現(xiàn)了細粒度的屬性直接撤銷。文獻[3]是國外研究者基于Event-B方法,通過先驗的形式驗證,提出了一種基于屬性的訪問控制的正確構造模型。本文結合屬性加密的基本原理,使用OpenABE加密算法和流式套接字編程技術,實現(xiàn)了一個對端加解密交互通信程序。
本系統(tǒng)為基于屬性加解密的對端通信程序,主要功能為:發(fā)送方對消息加密形成密文,之后發(fā)送給接收方,接收方收到密文后進行解密,得到原消息。該系統(tǒng)的總體架構如圖1所示。
圖1 系統(tǒng)總體架構圖
圖1顯示了該系統(tǒng)加解密的全過程。用戶A作為服務端,輸入明文,明文通過公共參數(shù)加密得到密文,服務端將密文發(fā)送出去;用戶B作為客戶端,接收密文,并通過產(chǎn)生的私鑰解密,還原得到原明文,從而實現(xiàn)了加密通信。
2.2.1 ABE的預備知識
ABE(基于屬性的加密),一種更廣泛的公鑰加密類型,是一種模糊的基于身份加密的方案。在ABE體制中,用屬性集合來標識一個用戶的身份,多種不同的屬性組成就可以方便地表示某一些具有共同屬性的用戶組身份,從而可以實現(xiàn)一對多的加密通信。
ABE在密文和密鑰中引入了訪問結構(又稱策略)。根據(jù)策略嵌入對象不同,又可分成KP-ABE和CP-ABE。前者的策略在密鑰中,屬性集合在密文中;而后者的策略在密文中,屬性集合在密鑰中。
KP-ABE將策略嵌入了密鑰,密文用屬性加密存放在服務器,當允許用戶得到某種消息時,就分配一個特定的策略給用戶。同時,用戶若想解密多個文件,則要有多個匹配的密鑰,這種方式多用于日志加密的管理及付費網(wǎng)站。
CP-ABE將策略嵌入了密文,因此Owner可以設定訪問密文的策略,限定只有擁有特定屬性的用戶才能訪問密文。CP-ABE對數(shù)據(jù)做了粒度可細化到屬性的訪問控制,因此多用于細粒度的數(shù)據(jù)共享和屬性撤銷,在屬性加密機制中比較常用。
ABE包含四個基本算法:
(1) Setup(K,U):輸入安全參數(shù)K和系統(tǒng)屬性全集U,輸出公共參數(shù)Params和主密鑰mk;
(2) KeyGen(mk,X):輸入mk和權限索引X,輸出密鑰skx;
(3) Enc(Params,Y,M):輸入Params、密文索引Y和明文M,輸出密文CTy;
(4) Dec(Params,skx,CTy):輸入Params、skx和CTy,輸出解密后的結果M’。
在CP-ABE中,X表示用戶的屬性集合,密文索引Y表示策略,只有X是Y的授權集,X滿足Y。解密成功,當且僅當 Dec(Params,KeyGen(mk,X),Enc(Params,Y,M))=M成立。
2.2.2 OpenABE加密方案的流程分析
OpenABE(開放的屬性加密),是一個基于C/C++的加密庫,支持基橢圓曲線和雙線性操作。它實現(xiàn)了多種屬性加密的方案,提供了數(shù)學API(ZML),方便了用戶的操作。實現(xiàn)加密的基本流程如下:
初始化OpenABE庫
選擇一種ABE加密算法構建上下文
生成ABE設置參數(shù)(主公共參數(shù))
加密明文數(shù)據(jù)和主公共參數(shù)
解密密文和用戶私鑰(密鑰機構產(chǎn)生)
卸載OpenABE庫
本系統(tǒng)是在Ubuntu 16.04.5 –server虛擬機環(huán)境下開發(fā)的,通過SSH模擬工具Termius進行本地測試。
首先,服務端創(chuàng)建監(jiān)聽套接字,經(jīng)過三次握手建立TCP連接。兩端分別初始化openabe庫,并構建CP-ABE上下文。
服務端調用generateParams()函數(shù)產(chǎn)生主公共參數(shù)和主密鑰參數(shù),調用keygen()函數(shù)生成用戶私鑰key0,用來解密消息。服務端將主公共參數(shù)導出并通過write()函數(shù)發(fā)送給客戶端,用于加密使用。
客戶端收到主公共參數(shù)后導入上下文,調用encrypt()函數(shù)將輸入的明文加密形成密文,并將密文發(fā)送給服務端。
服務端接收密文后,調用decrypt()函數(shù),引入私鑰key0進行解密,將解密消息輸出到控制臺,一輪通信結束。實現(xiàn)核心函數(shù)如下:
采用策略樹加密,將明文pt1加密后存入ct。
使用用戶私鑰key0解密,將密文ct解密后存入pt2。
在上述實現(xiàn)過程中,系統(tǒng)只能在一端加密或解密,只能由客戶端發(fā)送消息給服務器,失去了交互性,這不符合實際場景的應用。為解決該問題,引入了CryptHook。
CryptHook是一個模塊化的實現(xiàn),它將網(wǎng)絡通信中的收發(fā)函數(shù)和加解密函數(shù)封裝起來,通過劫持send/sendto和recv/recvfrom基本系統(tǒng)調用,屏蔽掉TCP通信的accept、connect、listen函數(shù),實現(xiàn)了直接互發(fā)消息。同時,使用對稱分組密碼加密,保證了程序的安全性。劫持實現(xiàn)的核心函數(shù)如下:
該函數(shù)本質上是一個回調函數(shù),當使用自定義函數(shù)時,可以自動回調系統(tǒng)函數(shù)。通過動態(tài)鏈接庫操作句柄和標志,返回標志對應函數(shù)執(zhí)行代碼的地址。因此,只需在收發(fā)函數(shù)中分別調用該函數(shù)并將標志參數(shù)分別設為“recv”、“recvfrom”、“send”、“sendto”,就可自動回調系統(tǒng)函數(shù)實現(xiàn)收發(fā)消息。
在之前的加解密系統(tǒng)中,加密方先加密消息再發(fā)送給對方,解密方先接收消息再進行解密。因此,可重新定義收發(fā)消息函數(shù)與加解密函數(shù)。在send/sendto函數(shù)中調用自定義的encrypt_data()函數(shù),并保證調用順序在dlsym()函數(shù)之前。同理,在recv/recvfrom函數(shù)中調用自定義的decrypt_data()函數(shù),并保證調用順序在dlsym()函數(shù)之后。
通過上述實現(xiàn),就可以滿足任意一方加解密并收發(fā)消息,實現(xiàn)了真正的交互加解密通信。重新編譯源文件,執(zhí)行程序,運行結果如圖2所示。
圖2 系統(tǒng)運行結果圖
本文實現(xiàn)了基于屬性加密、解密的通信系統(tǒng)。通過引入socket劫持,實現(xiàn)了對端交互,同時無須建立連接即可實現(xiàn)通信,降低了時間開銷,提高了運行效率。當前屬性加密存在著屬性門檻設置通用性差、雙線性映射耗費時間等問題亟待解決。屬性加密在區(qū)塊鏈、云計算等前沿領域應用仍然潛力巨大。
[1]Proc Eurocrypt.Fuzzy Identity Based Encryption[J]. 2005, 3494:457-473.
[2]張文芳,陳楨,劉旭東,王小敏.支持細粒度屬性直接撤銷的CP-ABE方案[J].軟件學報,2019,30(09):2760-2771.
[3]HaniaGadouche,ZoubeyrFarah,AbdelkamelTari. A correct-by-construction model for attribute-based access control[J]. Cluster Computing,2019(prepublish).