蘇晨 陳梅 趙靜雅 高震宇
摘要:在大規(guī)模物聯(lián)網(wǎng)設(shè)備接入的環(huán)境下,當(dāng)前的C/S物聯(lián)網(wǎng)架構(gòu)存在可靠性、安全性、隱私性等方面的問(wèn)題。區(qū)塊鏈技術(shù)作為一種新興的分布式賬本技術(shù),具有安全、可靠、匿名等特點(diǎn),適用于物聯(lián)網(wǎng)。文章提出了一種基于區(qū)塊鏈的物聯(lián)網(wǎng)系統(tǒng),該系統(tǒng)選擇Ethereum作為區(qū)塊鏈平臺(tái),通過(guò)智能合約配置和控制物聯(lián)網(wǎng)設(shè)備,并使用RSA公鑰密碼系統(tǒng)管理密鑰。
關(guān)鍵詞:區(qū)塊鏈;智能物聯(lián)網(wǎng);智能合約;網(wǎng)絡(luò)信息安全
中圖分類(lèi)號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)14-0028-03
1引言
隨著信息社會(huì)的發(fā)展,物聯(lián)網(wǎng)(也稱(chēng)為“互聯(lián)設(shè)備集合網(wǎng)絡(luò)”)也在快速發(fā)展,物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)在未來(lái)幾年內(nèi)也將出現(xiàn)爆發(fā)式增長(zhǎng),這些數(shù)據(jù)增長(zhǎng)大多來(lái)自消費(fèi)者設(shè)備,意味著物聯(lián)網(wǎng)數(shù)據(jù)需要更高的安全性及可靠性為其保駕護(hù)航,當(dāng)前的物聯(lián)網(wǎng)最突出的幾個(gè)問(wèn)題就是過(guò)于中心化及不能自制,使各個(gè)物聯(lián)網(wǎng)上的設(shè)備不能充分發(fā)揮其自主能動(dòng)性,還有一個(gè)突出的問(wèn)題是安全性,如果到了智能互聯(lián)的時(shí)代出現(xiàn)安全問(wèn)題,將會(huì)造成巨大的災(zāi)難。而區(qū)塊鏈的高安全性、高可靠性、匿名性正適合物聯(lián)網(wǎng)將來(lái)成長(zhǎng)的需求。區(qū)塊鏈的新興觀(guān)點(diǎn)逐漸進(jìn)入人們的視線(xiàn)。顧名思義,區(qū)塊鏈就是一個(gè)智能的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò),用于在分布式數(shù)據(jù)庫(kù)中識(shí)別、分播和記錄信息。
區(qū)塊鏈的主要應(yīng)用是比特幣。隨著比特幣的盛行,許多其他類(lèi)似數(shù)字貨幣也隨之出現(xiàn),然而這些貨幣也是建立在區(qū)塊鏈技術(shù)之上的。此刻已不只是數(shù)字錢(qián)幣范疇獨(dú)有區(qū)塊鏈了,很多其他的范疇也在引入?yún)^(qū)塊鏈。雖然比特幣技術(shù)十分成功,但它其中的局限性也十分明顯,比如區(qū)塊產(chǎn)生時(shí)間大概為10分鐘,這將會(huì)極大限制單位時(shí)間內(nèi)交易完成數(shù)量。也就是說(shuō),當(dāng)要追蹤需要驗(yàn)證的未生成交易,并且提供腳本信息時(shí),這不能夠使用循環(huán),將會(huì)使未生成交易的生成時(shí)間變長(zhǎng)。因此12秒的生成時(shí)間對(duì)于以太坊開(kāi)發(fā)者運(yùn)行智能合約是非常必要的。換言之,開(kāi)發(fā)者可以在一個(gè)以太坊框架之上對(duì)區(qū)塊鏈應(yīng)用進(jìn)行開(kāi)發(fā),開(kāi)發(fā)者和使用者可以假想它沒(méi)有許可證不能被修改,甚至可以說(shuō)整個(gè)交易在以太坊平臺(tái)上都是透明的,本文可以認(rèn)為以太坊是一個(gè)巨大的分享式計(jì)算機(jī)系統(tǒng)。
同時(shí),隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,數(shù)量龐大、種類(lèi)繁多、分布廣泛的物聯(lián)網(wǎng)設(shè)備不斷連接到物聯(lián)網(wǎng)絡(luò)。目前大規(guī)模、多種類(lèi)、廣分布的物聯(lián)網(wǎng)設(shè)備的同步和更新對(duì)現(xiàn)有的基于服務(wù)器-物聯(lián)網(wǎng)的物聯(lián)網(wǎng)設(shè)備,將提出更高的性能方面要求。同時(shí),如果物聯(lián)網(wǎng)中心服務(wù)器受到攻擊,那么所有依賴(lài)于其服務(wù)的物聯(lián)網(wǎng)設(shè)備也將會(huì)受到安全威脅。所以,基于服務(wù)器-客戶(hù)端的物聯(lián)網(wǎng)系統(tǒng)已不再能滿(mǎn)足日益壯大的物聯(lián)網(wǎng)網(wǎng)絡(luò)。本文提出了一種基于區(qū)塊鏈的智能物聯(lián)網(wǎng)系統(tǒng),構(gòu)建了一個(gè)安全可信的分布式物聯(lián)網(wǎng)網(wǎng)絡(luò)。
區(qū)塊鏈作為比特幣的核心技術(shù)也引起了人們的廣泛關(guān)注,雖然區(qū)塊鏈技術(shù)起源于比特幣,但其應(yīng)用場(chǎng)景并不局限于區(qū)塊鏈。還很多場(chǎng)景應(yīng)用,比如金融領(lǐng)域、物聯(lián)網(wǎng)領(lǐng)域、社會(huì)科學(xué)領(lǐng)域等。以太坊平臺(tái)的出現(xiàn)使區(qū)塊鏈技術(shù)得到空前發(fā)展,作為區(qū)塊鏈技術(shù)2.0的代表,以太坊支持用戶(hù)拓展開(kāi)發(fā)其他應(yīng)用。所以把區(qū)塊鏈的相關(guān)技術(shù)引用到物聯(lián)網(wǎng)體系中去,把RSA公鑰系統(tǒng)引進(jìn)密碼系統(tǒng),公鑰存在于以太坊網(wǎng)上,私鑰存在于各個(gè)設(shè)備之中。通過(guò)智能合約,可以重設(shè)當(dāng)前設(shè)備的許多參數(shù),并將修改記錄保存在以太坊鏈上,以便后續(xù)查詢(xún)。為了證明這一設(shè)想的可行性,構(gòu)建出一些賬戶(hù)節(jié)點(diǎn),每一個(gè)賬戶(hù)代表一個(gè)設(shè)備。依此,希望后續(xù)可以搭建一個(gè)完整的智能物聯(lián)網(wǎng)系統(tǒng),連接更多可用設(shè)備。
2系統(tǒng)搭建
本設(shè)計(jì)要完成的目標(biāo)是在Linux平臺(tái)搭建私有鏈,創(chuàng)建私有網(wǎng)絡(luò),建立集點(diǎn)結(jié)群,安裝truffle框架,安裝remix本地編譯器,利用本地編譯器編譯調(diào)試智能合約,安裝geth客戶(hù)端,利用geth客戶(hù)端完成簡(jiǎn)單合約的編譯、部署、調(diào)用,再使用Etherum-wallet客戶(hù)端完成整個(gè)合約的編譯、部署、調(diào)用,并得出仿真結(jié)果。
2.1 Geth客戶(hù)端的原理及特性
Geth是以太坊的官方客戶(hù)端,它是Go-Ethereum開(kāi)源項(xiàng)目的簡(jiǎn)稱(chēng),是一個(gè)簡(jiǎn)略的命令行工具,在此提供了許多的選項(xiàng)和命令。它主要是使用Go語(yǔ)言進(jìn)行編寫(xiě)的,是目前用戶(hù)數(shù)最多、使用最廣泛的客戶(hù)端。應(yīng)用Geth,需先啟動(dòng)以太坊節(jié)點(diǎn),建立新用戶(hù)、新賬戶(hù),在主賬戶(hù)下可以建立副賬戶(hù)、建立節(jié)點(diǎn)集群、成功搭建私有鏈網(wǎng)絡(luò),并啟動(dòng)私有鏈網(wǎng)絡(luò)進(jìn)行挖礦,獲得以太幣。
2.2 節(jié)點(diǎn)集群的搭建及網(wǎng)絡(luò)測(cè)試
如上所述,現(xiàn)已知的搭建以太坊私有鏈網(wǎng)絡(luò)的方法目前主要是運(yùn)用Geth客戶(hù)端進(jìn)行搭建,在安裝Geth客戶(hù)端前需要安裝Go環(huán)境,安裝Ethereum,安裝Solc編譯器,安裝命令行如下所示:
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository –y ppa:ethereum/ethereum
sudo add-apt-repository –y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
執(zhí)行完以上命令后,可以啟動(dòng)以太坊客戶(hù)端,此中主要有g(shù)eth、evm、bootnode、disasm、ethtest、rlpdump,輸入geth,則以太坊就可以啟動(dòng)了。
但在搭建以太坊私鏈節(jié)點(diǎn)前,必須先建立創(chuàng)世區(qū)塊,之所以要先建立創(chuàng)世區(qū)塊,是因?yàn)橹灰谕粋€(gè)網(wǎng)絡(luò)內(nèi),創(chuàng)世區(qū)塊文件一定是相同的,且創(chuàng)世區(qū)塊的json文件,文件內(nèi)容如圖1所示,具體參數(shù)的意義可見(jiàn)表1所示。
接下來(lái),用geth命令創(chuàng)建創(chuàng)世區(qū)塊,命令行輸入如下:253BDD9C-134C-42E8-A3C6-BDB324C66E0A
由圖2可以看出創(chuàng)世區(qū)塊的文件內(nèi)容已被寫(xiě)入data0文件夾中,數(shù)據(jù)存儲(chǔ)路徑為/usr/local/privatechain/data0/geth/chaindata。
由圖3和表2可知私鏈數(shù)據(jù)存在data0中,網(wǎng)絡(luò)監(jiān)聽(tīng)端口為61910(默認(rèn)為30303),HTTP-RPC服務(wù)器監(jiān)聽(tīng)端口為8200(默認(rèn)為8545),設(shè)置所需調(diào)用HTTP-RPC接口,在默認(rèn)基礎(chǔ)上加了db,其次還設(shè)置了當(dāng)前區(qū)塊鏈的網(wǎng)絡(luò)ID為1108。
由啟動(dòng)頁(yè)的最后一行可知geth包括了一些方法,此中admin主要包括與管理節(jié)點(diǎn)有關(guān)的方法,eth包括和操作區(qū)塊鏈有關(guān)方法,miner包括挖礦啟動(dòng)&終止方法,net包括檢查P2P網(wǎng)絡(luò)狀況方法,personal包括管理賬戶(hù)方法,txpool包括檢查交易內(nèi)存池的方法,web3包括以上且還包含單位換算方法。
命令eth.accounts可以檢查當(dāng)前存在賬戶(hù)及賬戶(hù)地址,personal.newAccount()可新增賬戶(hù),增加賬戶(hù)的時(shí)可設(shè)置賬戶(hù)密碼,eth.getBalance(eth.accounts[0])可查看eth.accounts[0]內(nèi)的賬戶(hù)余額,為之后查看賬戶(hù)及余額方便,還可自己添加查看方法,這里添加了function checkAllBalances(),具體函數(shù)如圖4,還可通過(guò)命令eth.coinbase查看主賬戶(hù),也可通過(guò)miner.setEtherbase(eth.accounts[1])重新設(shè)置主賬戶(hù)為eth.accounts[1],通過(guò)命令web3.fromWei(eth.getBalance(eth.accounts[0]),ether)可將賬戶(hù)余額的單位換成ether,通過(guò)命令eth.blockNumber可獲取當(dāng)前區(qū)塊數(shù)。
實(shí)施節(jié)點(diǎn)內(nèi)轉(zhuǎn)賬需要提前解鎖賬戶(hù),解鎖賬戶(hù)后,可通過(guò)命令eth.sendTransaction({from: eth.accounts[0],to: eth.accounts[2],value: amount}),其中 amount= web3. toWei(5,ether),也就是轉(zhuǎn)賬5ether,通過(guò)txpool. status可以查看當(dāng)前待處理交易,由圖5可知當(dāng)前可驗(yàn)證交易為一條,需要主賬戶(hù)啟動(dòng)挖礦使得交易生效,挖礦命令為miner. start(1),若想要結(jié)束使用miner. stop(),當(dāng)前需要驗(yàn)證交易,故設(shè)置為挖到一個(gè)區(qū)塊則停止,命令為:miner.start(1); admin.sleepBlocks(1); miner.stop(),其結(jié)果如圖5所示,通過(guò)查看eth. accounts[2]的余額可知交易生效,您還可以通過(guò)查看其事務(wù)哈希值獲取事務(wù)詳細(xì)信息,命令為:eth.getTransaction(交易區(qū)塊哈希),也可通過(guò)交易區(qū)塊號(hào)查看交易詳情,命令為:eth.getBlock(區(qū)塊號(hào))。
網(wǎng)絡(luò)監(jiān)聽(tīng)端口需要改變,HTTP-RPC服務(wù)器監(jiān)聽(tīng)端口需要改變,網(wǎng)絡(luò)ID不能變(如果想連接節(jié)點(diǎn)一)。
可通過(guò)admin.addPeer(節(jié)點(diǎn)哈希)在節(jié)點(diǎn)一的console命令下添加節(jié)點(diǎn),節(jié)點(diǎn)哈??蓮墓?jié)點(diǎn)二中獲得,也可在節(jié)點(diǎn)二下輸入命令admin.node.info獲得,添加節(jié)點(diǎn)成功后可通過(guò)admin.peers查看節(jié)點(diǎn)連接具體信息。同時(shí)還可通過(guò)輸入net.peerCount得到節(jié)點(diǎn)數(shù)。以同樣方法添加節(jié)點(diǎn)三,如圖6。再次輸入admin.peers可看到三節(jié)點(diǎn)連接信息。
3智能合約在鏈上的編譯、部署、調(diào)用
3.1智能合約的編譯
Geth中也可完成智能合約的編譯,但因Geth是命令行編譯,許多操作包括邊編譯、邊改錯(cuò)的操作無(wú)法同時(shí)進(jìn)行,非常不方便,因此以太坊的官網(wǎng)推薦使用remix編譯器,當(dāng)然也可以選擇其他編譯器,這里主要推薦官方編譯器,為方便在鏈上直接進(jìn)行編譯,本文下載安裝了本地編譯器,優(yōu)點(diǎn)是本地編譯器在網(wǎng)絡(luò)不穩(wěn)定情況下,也不會(huì)出現(xiàn)大問(wèn)題,且許多存儲(chǔ)修改結(jié)果都可在本地找到。命令行打開(kāi)本地remix,右選compile,勾選auto在編寫(xiě)的時(shí)也會(huì)自動(dòng)編譯,編譯結(jié)果在右下顯示,錯(cuò)誤和警示都有。environment可以選擇web3,輸入http://localost:8200可以連接本地私有鏈,這里的RPC接口與之前設(shè)置私鏈節(jié)點(diǎn)的接口一樣,也可連接模擬私鏈環(huán)境進(jìn)行測(cè)試,接口為8545,因此可以輸入http://localhost:8545。這里的模擬私網(wǎng)有賬號(hào)10個(gè),還有相應(yīng)的密鑰,可以部署相應(yīng)的合約在其進(jìn)行測(cè)試。
3.2智能合約的部署
當(dāng)智能合約編譯不出錯(cuò)的情況下,還需將智能合約部署在所搭建的私有鏈上,在這里選擇官方推薦的ethereum-wallet,在使用ethereum-wallet時(shí),需要配置附屬環(huán)境,打開(kāi)Meteor,使App運(yùn)行在3000接口上。通過(guò)命令行打開(kāi)Ethereum-wallet,在etherum-wallet上的所有操作信息都會(huì)顯示在下面,可按出錯(cuò)提示尋找解決辦法。
編譯無(wú)錯(cuò)的合約放在左下框中,選擇部署主賬戶(hù),保證該賬戶(hù)中有足夠的以太幣部署合約(因部署合約會(huì)消耗以太幣),接下來(lái)在右下選擇部署合約的主函數(shù),填入需預(yù)設(shè)的構(gòu)造參數(shù),接下來(lái)點(diǎn)擊部署,若要使得部署合約生效,需要再次進(jìn)行挖礦,合約部署成功后可進(jìn)行合約調(diào)用,結(jié)果如圖7所示。
合約部署成功后,可在首頁(yè)查看部署消息,對(duì)合約的操作記錄都會(huì)存在鏈上,部署合約記錄。同時(shí)點(diǎn)擊首頁(yè)的contract,可看到曾部署過(guò)的所有合約,同樣也可查看合約Token。
3.3智能合約的調(diào)用
在成功部署合約后,開(kāi)始進(jìn)行合約的調(diào)用,本合約模擬家居用電情況監(jiān)測(cè),每一個(gè)賬戶(hù)代表一件家電,監(jiān)測(cè)家電使用情況,家電把用電量通過(guò)P2P的形式傳到以太坊網(wǎng)中,合約收到所有家電的用電量情況。253BDD9C-134C-42E8-A3C6-BDB324C66E0A
若要查看各個(gè)賬戶(hù)發(fā)送情況,可看到各賬戶(hù)左上角有合約調(diào)用記錄。若要細(xì)看,只需點(diǎn)開(kāi)各個(gè)賬戶(hù)查看。
打開(kāi)合約調(diào)用界面,在沒(méi)收到兩賬戶(hù)的電量使用情況下,沒(méi)調(diào)用Check Target Reached方法前,目標(biāo)完成情況是NO。
調(diào)用Check Target Reached方法,結(jié)束調(diào)用后,查看目標(biāo)完成情況,變?yōu)閅ES,此時(shí)只需把這一結(jié)果輸出到電器中做觸發(fā)電平,啟動(dòng)節(jié)能模式,即可使電器轉(zhuǎn)換為節(jié)能模式。
4結(jié)語(yǔ)
本文主要介紹了如何搭建以太坊私鏈網(wǎng)以及搭建原理,并在此基礎(chǔ)上在私鏈上部署所需的智能合約。除此之外,還講述了智能合約怎樣編譯,智能合約怎樣部署在以太網(wǎng)私鏈上,在智能合約成功部署后,講解了智能合約的調(diào)用,成功完成了實(shí)驗(yàn)的仿真,實(shí)現(xiàn)了對(duì)家電的用電量的監(jiān)測(cè),當(dāng)其用電量達(dá)到一定值時(shí),各電器轉(zhuǎn)而變成節(jié)能模式。
參考文獻(xiàn):
[1] Xu L D,He W,Li S C.Internet of Things in industries:a survey[J].IEEE Transactions on Industrial Informatics,2014,10(4):2233-2243.
[2] Al-Fuqaha A,Guizani M,Mohammadi M,et al.Internet of Things:a survey on enabling technologies,protocols,and applications[J].IEEE Communications Surveys & Tutorials,2015,17(4):2347-2376.
[3] Singh J,Pasquier T,Bacon J,et al.Twenty security considerations for cloud-supported Internet of Things[J].IEEE Internet of Things Journal,2016,3(3):269-284.
[4] Ferrer E C.The Blockchain:a New Framework for Robotic Swarm Systems[EB/OL].(2016-08-02).[2021-11-20].https://xueshu.baidu.com/usercenter/paper/show?paperid=1w0c0rt093 690840t72n0ej0ex033896.
[5] Sharples M,Domingue J.The blockchain and kudos:a distributed system for educational record,reputation and reward[C]//Adaptive and Adaptable Learning,2016.
收稿日期:2021-12-30
基金項(xiàng)目:北京電子科技職業(yè)學(xué)院科技一般項(xiàng)目(基金號(hào):2021Z031-KXY)
作者簡(jiǎn)介:蘇晨(1973—),女,山東萊蕪人,講師,碩士,主要研究方向?yàn)榫W(wǎng)絡(luò)技術(shù)、計(jì)算機(jī)應(yīng)用、視頻圖像處理等。253BDD9C-134C-42E8-A3C6-BDB324C66E0A