摘 要 基于以太坊智能合約平臺,提出了一種新的公鑰證書發(fā)放方案。本方案使用智能合約實現(xiàn),用戶和證書發(fā)放機構(gòu)將自己的數(shù)據(jù)以智能合約的形式存放到區(qū)塊鏈上,其他人可以公開驗證。本方案利用智能合約全網(wǎng)公開的安全特性有效降低了在不安全信道上簽署和發(fā)放公鑰證書的安全風險。依托于以太坊區(qū)塊鏈,本方案具有防篡改,防拒絕服務(wù)式攻擊等特點。
【關(guān)鍵詞】區(qū)塊鏈 智能合約 公鑰證書 以太坊
1 前言
公鑰證書是當前一種應(yīng)用廣泛的公鑰分配解決方案,最早由Kohnfelder提出。由于公鑰證書方案不需要維護含有姓名和公鑰的目錄,從而成為一種較為安全的公鑰分配方式。公鑰證書中最重要的包含公鑰和公鑰擁有者的標志,為了保證證書的真實有效性,則證書內(nèi)容必須由可信第三方進行簽名。在這個過程中,用戶必須以一種安全的方式將他的公鑰信息傳遞給可信第三方機構(gòu)。但是,因為沒有絕對安全的通信信道,則用戶將公鑰信息傳遞給可信機構(gòu)的過程中極易被攻擊者攔截,則用戶最后得到的公鑰證書極有可能被攻擊者篡改。怎樣保證用戶公鑰信息傳遞過程的安全是當前亟待解決的一個問題。與此同時,可信機構(gòu)的數(shù)據(jù)處理量又是有限的,攻擊者在獲取可信機構(gòu)真實網(wǎng)絡(luò)位置的情況下,可以發(fā)動拒絕服務(wù)式攻擊。因此,隱藏可信機構(gòu)的真實的網(wǎng)絡(luò)位置是保障公鑰證書系統(tǒng)正常工作的關(guān)鍵。
區(qū)塊鏈技術(shù)隨著比特幣的出現(xiàn)而逐漸被人們所知。區(qū)塊鏈網(wǎng)絡(luò)沒有中心節(jié)點,所有節(jié)點地位均等,采用工作量證明,權(quán)益證明等共識機制將區(qū)塊鏈網(wǎng)絡(luò)內(nèi)的交易數(shù)據(jù)打包寫入到區(qū)塊中。在這個去中心化網(wǎng)絡(luò)中,所有的節(jié)點保存著全網(wǎng)的數(shù)據(jù)備份。區(qū)塊鏈采用的共識機制保障了在不可信信道上的信息傳遞的真實有效性。區(qū)塊鏈網(wǎng)絡(luò)中的巨大算力使得攻擊者想要篡改區(qū)塊鏈中的交易數(shù)據(jù)需要付出巨大的代價。區(qū)塊鏈的這些特性既能防止數(shù)據(jù)在傳輸過程中遭到篡改,又能防止防止節(jié)點遭受拒絕服務(wù)式攻擊。
以太坊是2013年由Vitalik Buterin提出的一種開源的公共區(qū)塊鏈平臺,它基于區(qū)塊鏈技術(shù)建立,最大特點就是支持智能合約。以太坊智能合約(以下簡稱智能合約)與比特幣腳本類似,但是智能合約具有圖靈完備性,可以完成更加復(fù)雜的任務(wù)。用戶可以將編寫的智能合約編譯成以太坊特有的以太坊虛擬機代碼,即EVM代碼。EVM代碼可以訪問發(fā)送者和接收到的消息中的數(shù)據(jù),代碼還可以返回數(shù)據(jù)的字節(jié)隊列作為輸出。用戶在與智能合約交互的過程中需要消耗一定量的燃料,燃料需要使用以太幣兌換。這種機制就保證了攻擊者想要通過短時間內(nèi)與智能合約的大量交互進行拒絕服務(wù)式攻擊需要耗費巨大的以太幣資源。同時,智能合約靈活的數(shù)據(jù)訪問特性能夠保障公鑰信息的公開透明訪問以及數(shù)據(jù)完整性。
根據(jù)以上所述,我們提出了一種基于基于智能合約的公鑰證書發(fā)放方案。本方案充分利用了區(qū)塊鏈技術(shù)的去中心化和全網(wǎng)公開訪問賬本等特點保障了公鑰證書在不可信信道上的安全簽署,防范了攻擊者對用戶和可信機構(gòu)的拒絕服務(wù)式攻擊。
2 總體設(shè)計結(jié)構(gòu)
本方案的總體設(shè)計框架如圖1所示,各個部分功能如下。
2.1 用戶User
該用戶可以是任何需要申請公鑰證書的實體結(jié)構(gòu)。
2.2 區(qū)塊鏈
表示以太坊區(qū)塊鏈,區(qū)塊鏈上面的信息全網(wǎng)公開可見,任何人都可以查看合約的執(zhí)行情況。
2.3 證書發(fā)布機構(gòu)Ca
表示對用戶的證書進行認證簽名的機構(gòu),這個結(jié)構(gòu)的公鑰可以被所有人驗證合法。之后,經(jīng)過該結(jié)構(gòu)簽署的公鑰證書可以被全網(wǎng)驗證。
2.4 用戶合約Contract-user
表示用戶User發(fā)布的合約,該合約存儲用戶User的公鑰證書信息。實際上,用戶的公鑰證書信息就是用戶合約的核心內(nèi)容。
2.5 證書發(fā)布機構(gòu)合約Contract-ca
表示簽證機構(gòu)Ca處理其他用戶認證請求的合約。用戶通過改變該合約的一些數(shù)據(jù)內(nèi)容向簽證機構(gòu)傳遞信息。
我們使用區(qū)塊鏈代替?zhèn)鹘y(tǒng)不可信信道,同時將公鑰證書以智能合約的形式發(fā)布出來。這里的合約Contract-user和合約Contract-ca都屬于區(qū)塊鏈的一部分,為了清楚地說明整個系統(tǒng)的工作過程,將這兩個合約獨立于以太坊區(qū)塊鏈表示。而在實際中,這兩個合約均存在于以太坊區(qū)塊鏈中。而用戶User和簽證機構(gòu)Ca都是匿名連接以太坊區(qū)塊鏈的各個實體結(jié)構(gòu),即他們均不需要公布自己的真實的網(wǎng)絡(luò)位置。
3 具體方案設(shè)計
簽證機構(gòu)Ca需要將自己的合約Contract-ca發(fā)布到以太坊區(qū)塊鏈上,然后全網(wǎng)用戶可以獲取簽證機構(gòu)的合約Contract-ca的合約地址。之后用戶User將自己的公鑰證書以智能合約的形式發(fā)布到以太坊區(qū)塊鏈上。此時的合約Contract-user不能被用作公鑰證書,因為此時的公鑰證書還沒有被簽證機構(gòu)Ca簽署生效。用戶User可以將合約Contract-user的地址通過區(qū)塊鏈傳遞給合約Contract-ca,請求簽證機構(gòu)Ca對合約User進行認證。簽證機構(gòu)Ca從合約Contract-ca中獲取需要請求的合約Contract-user的地址,然后在區(qū)塊鏈上查詢到合約Contract-user的相關(guān)信息,簽證機構(gòu)Ca在后臺數(shù)據(jù)庫中查到合約Contract-user合法后就可以通過區(qū)塊鏈向合約Contract-user發(fā)送一個交易,對合約Contract-user的相關(guān)數(shù)據(jù)狀態(tài)進行更改。最終合約Contract-user得到簽證機構(gòu)Ca的簽署,整個過程并不在傳統(tǒng)信道上傳遞公鑰信息和簽署信息。
3.1 證書發(fā)布機構(gòu)合約
證書發(fā)布機構(gòu)合約的編寫與發(fā)布過程:
(1)初始化:Ca與以太坊節(jié)點連接;生成以太坊賬戶地址Addr-ca,公私鑰對Pk-ca和Sk-ca。
(2)編寫智能合約Contract-ca,合約包含表1所列內(nèi)容。endprint
(3)將編寫的合約Contract-ca編譯發(fā)布到以太坊區(qū)塊鏈上,返回Contract-ca的合約地址Addr-contract-ca。
上述過程中使用的變量如表1。
3.2 用戶合約的編寫與發(fā)布
用戶合約的編寫與發(fā)布:
(1)初始化:User與以太坊節(jié)點連接;生成以太坊賬戶地址Addr-user,公私鑰對Pk-user,Sk-user。
(2)編寫智能合約Contract-user,合約包含表2所列內(nèi)容。
(3)將編寫的合約Contract-user編譯發(fā)布到以太坊區(qū)塊鏈上,返回合約地址Addr-contract-user。
上述過程中使用的變量如表2。
3.3 證書發(fā)布機構(gòu)簽署用戶合約
證書發(fā)布機構(gòu)簽署用戶合約的步驟:
(1)User修改區(qū)塊鏈中Contract-ca合約中的Addr-contract-user為自己的證書合約的地址;
(2)Ca從合約中獲取Addr-contract-user;
(3) Ca查詢以太坊區(qū)塊鏈上Addr-contract-user所處合約;
(4) Ca計算合約Contract-user中Cert(Id-user,Pk-user,Addr-user,Pk-ca,Addr-ca,Addr-contract-ca)的Signature-hash值;
(5)Ca使用自己的私鑰Sk-ca對Signature-hash進行簽署;
(6)被Ca簽署的用戶合約可以被User使用。
3.4 用戶使用證書合約
用戶使用證書合約的步驟:
(1)User向其它用戶公布自己的合約證書地址;
(2)驗證者訪問以太坊區(qū)塊鏈獲取合約證書內(nèi)容;
(3) 驗證者通過證書內(nèi)的Addr-contract-ca找到認證機構(gòu)的地址;
(4)驗證者通過Addr-contract-ca查找到認證機構(gòu)的合約;
(5)驗證者在認證機構(gòu)的合約中查找到認證機構(gòu)的公鑰;
(6)驗證者使用公鑰解開Signature-hash,獲取證書信息的Hash值;
(7)驗證者將得到的Hash值與自己計算的Hash值比較,如果兩者相同,則User的證書信息真實有效。
4 總結(jié)
本文提出的方案充分利用了智能合約的特點解決了公鑰證書發(fā)放過程中的問題。區(qū)塊鏈的去中心化特點,使得全部節(jié)點地位相等,依靠P2P技術(shù)傳播的交易信息在每個節(jié)點都能夠完全驗證。在不可信信道上傳播的公鑰證書信息因為在每個節(jié)點傳播的時候都能夠被驗證,就極大地降低了被攻擊者篡改的可能性。攻擊者想要篡改證書信息,則必須擁有一半以上的全網(wǎng)算力才能保證供給成功。而實際上,當前以太坊區(qū)塊鏈的全網(wǎng)總算力遠遠超過全球超級計算機總算力之和。攻擊者想要攻擊成功,則需要付出極大的代價。區(qū)塊鏈節(jié)點與用戶或者可信機構(gòu)進行的是匿名鏈接。因為在區(qū)塊鏈上,任何擁有與機構(gòu)地址相對應(yīng)的私鑰的實體,即被認為是機構(gòu)本身。因此,用戶和可信機構(gòu)只需保留相應(yīng)的公私鑰對即可,可以隱藏或者變換網(wǎng)絡(luò)地址,這樣攻擊者就極難發(fā)現(xiàn)真實的實體位置。綜上,本方案既可以在不可信信道上保障公鑰信息的完整性,又能防止攻擊者對某個機構(gòu)進行拒絕服務(wù)式攻擊。
然而,區(qū)塊鏈在完美解決拜占庭問題的同時也帶來了整體效率低下的問題。最突出的問題就是以太坊作為一個公有鏈,當前使用的是工作量證明作為共識機制。工作量證明機制是要求礦工完成一定的工作量才能取得記賬權(quán)。在以太坊區(qū)塊鏈中,礦工新建立一個區(qū)塊需要大概15秒鐘的時間,而一個新的區(qū)塊容納的交易數(shù)量是有限的。實際上,在智能合約的狀態(tài)量改變過程中,每個狀態(tài)量的改變都需要全網(wǎng)節(jié)點的共同確認才算合法。因此,我們就可以發(fā)現(xiàn),智能合約在執(zhí)行過程中的效率是很低的。但是,在隨后的以太坊大都會階段,以太坊執(zhí)行分片,則智能合約的執(zhí)行效率就會大大地增加。在未來的工作中,如何提高公鑰證書合約的靈活性,使之適應(yīng)越來越復(fù)雜的網(wǎng)絡(luò)狀況是我們的關(guān)注重點。
參考文獻
[1]Kohnfelder L M. Towards a practical public-key cryptosystem[D].Massachusetts Institute of Technology,1978.
[2]唐明,李莉,杜瑞穎.William S.密碼編碼學(xué)與網(wǎng)絡(luò)安全——原理與實踐(第六版)[M].北京:電子工業(yè)出版社,2015.
[3]Satoshi N.Bitcoin:A peer-to-peer electronic cash system[EB/OL]. [2009-03-25].https://bitcoin.org/bitcoin.pdf.
作者簡介
張成成(1991-),男,安徽省阜陽市人。碩士學(xué)位。西華大學(xué)計算機與軟件工程學(xué)院學(xué)生。研究方向為信息安全。
作者單位
西華大學(xué)計算機與軟件工程學(xué)院 四川省成都市 610039endprint