胡志鋼,田翠華,張一平,高靜敏,洪定旋
(廈門理工學院 計算機與信息工程學院,福建 廈門 361024)
家居安防系統(tǒng)作為一種通過營造安全環(huán)境來提升居民生活質量的重要手段,越來越受到大家的重視。其中智能門禁的生物識別技術與遠程控制技術極大方便了人們的出行與管理,但暴力破壞、惡意篡改以及單點故障造成的數據丟失等問題,給用戶對家居安全的監(jiān)控帶來極大的不便。
區(qū)塊鏈技術[1]的崛起,為解決智能家居數據隱私、安全和完整性等問題鋪平了道路。史錦山等[2]通過智能合約[3]將訪問控制策略存儲到區(qū)塊鏈上,以實現對物聯(lián)網設備的安全訪問。但無法避免通過暴力獲取用戶鏈下生物特征以及試圖繞過門禁入侵室內等問題的發(fā)生。同時,研究人員提出多種通過區(qū)塊鏈實現對物聯(lián)網異構數據的安全共享方案。葛琳等[4]通過數據區(qū)塊鏈和交易區(qū)塊鏈的雙鏈模式,滿足數據采集與數據共享不同時效與安全需求。Nasonov等[5]提出了一種基于區(qū)塊鏈的智能家居數據市場的框架,保證了獲取數據的可靠性以及交易效率。此外研究人員通過將數據摘要寫入區(qū)塊鏈,利用智能合約實現對數據完整性的自動校驗[6,7]。通過與區(qū)塊鏈的結合能夠有效確保數據共享以及交易過程中用戶隱私的安全性和數據的完整性,但是對于通過鏈下實施的非法行為很難做出有效防范,同時智能合約一旦部署就不可修改的缺陷導致了應用出現漏洞將很難彌補。
針對上述問題,本文構建了一種基于以太坊區(qū)塊鏈的門禁監(jiān)控系統(tǒng),主要工作是利用以太坊平臺構建圖靈完備的智能合約,實現數據的上鏈、用戶的訪問以及指令的下達,并且通過代理合約實現合約的升級,提升了系統(tǒng)的擴展性。而且,通過鏈下存儲和鏈上備份,以及鏈下鏈上的多身份識別方式,確保了門禁身份識別的效率以及安全性。同時,入侵檢測模塊的設計,有效預防鏈下暴力獲取用戶身份特征的事件發(fā)生。
區(qū)塊鏈其本質是一種去中心化的數據結構,每個數據塊使用SHA-256(哈希算法)加密方法與前一個區(qū)塊相關聯(lián),并且利用共識算法與P2P網絡極大地保證了信息的有效性、完整性和不可篡改的特性。因此,區(qū)塊鏈通過數據一致性分發(fā)和冗余存儲,極大保證了各節(jié)點數據的對稱性,并讓互不信任環(huán)境下的各節(jié)點在此基礎上通過智能合約實現自主性,有效保障數據的完整和不可篡改。
區(qū)塊鏈的強大優(yōu)勢使得區(qū)塊鏈解決方案在不同類型的家居應用中取得了卓越的表現[5]。根據對現有的多篇關于區(qū)塊鏈在智能家居中應用的總結,見表1。由表可知,現階段區(qū)塊鏈技術在智能家居中應用的側重點,主要包括共識算法、第三方訪問、家庭護理、自動化支付、共享經濟、數據市場等服務及應用,而將區(qū)塊鏈應用于家居安防的國內外研究才剛剛起步。因此本文主要針對家居安防中的智能門禁展開研究。
表1 現有的基于區(qū)塊鏈的智能家居應用綜述比較總結[12]
隨著當前先進的硬件支持,物聯(lián)網設備已強大到足以支持相對復雜的智能系統(tǒng)。本文提出的門禁設備主要包含身份識別單元(IVU)、入侵檢測單元(IDU)、區(qū)塊鏈網關單元(BGU)。
IVU:身份識別單元主要由控制芯片、指紋識別、密碼按鍵、電機驅動、聲音提示、OLED顯示器和無線通信模塊組成。使用Atmega2560(8位AVR微控制器)的Arduino作為門禁的中央控制器,并通過串口通信連接WIFI模塊ESP-01,采用TCP/IP協(xié)議與BGU實現通信。而且采用的光學指紋模塊可以完成鏈下指紋存儲和識別,配合區(qū)塊鏈實現鏈上備份,很好地兼具了識別度高、速度快、安全性好的特點。同時密碼識別模塊作為備用開鎖,利用虛偽密碼(按照預設的密碼長度,在正確密碼前后輸入任意數)和鏈上存儲極大增加了非法獲取密碼的難度。然后配合聲音與顯示模塊的互動,控制電機開啟門禁。
IDU:該單元在身份識別單元的基礎上增加了人體紅外感應模塊、超聲波測距模塊、運動感知模塊,主要用于對門外及室內的環(huán)境感知。其中人體紅外感應和超聲波測距用于檢測門禁外入侵,預防從門禁外入侵或破壞門禁以獲取指紋的發(fā)生,而運動感知模塊用于檢測試圖繞過門禁入侵室內的非法者。
BGU:本文采用Raspberry Pi作為BGU,可以視為區(qū)塊鏈與傳感器之間的中間組件,主要用于實現傳感器等底層設備與以太坊區(qū)塊鏈之間的交互。在本文的系統(tǒng)中,BGU擁有獨立的以太坊賬戶,并且設備中嵌入了智能合約。具體地說,BGU是任何智能門禁系統(tǒng)的重要組成部分,主要負責鏈上鏈下身份數據的同步、訪問記錄的上鏈等任務,以及區(qū)塊鏈網絡各節(jié)點與傳感器之間的數據收發(fā)器,同時也為每個數據源(傳感器)之間提供相對穩(wěn)定的網絡連接。
門禁設備使用控制芯片為Atmega2560的單片機,用于通過程序控制門禁設備各模塊的工作。通過通信端口,接收身份識別單元發(fā)送的身份信息,處理器根據實際情況進行鏈下處理或通過BGU進行鏈上識別判斷身份是否認證,并且通過聲音與顯示器的提示信息進行交互,然后電機根據相應的控制信號做出反應。同時,用戶通過客戶端在區(qū)塊鏈中存儲的管理員密碼,利用密碼按鍵管理用戶的指紋注冊或注銷。并且,BGU將接收到的入侵檢測信息與訪問信息進行廣播上鏈。
區(qū)塊鏈技術因其具有與智能家居設備易于集成的靈活性和適應性,正在迅速塑造著智能家居信息生態(tài)系統(tǒng)。圖1展示了基于區(qū)塊鏈的智能門禁生態(tài)系統(tǒng),它是一個由感知層、服務與支撐層、應用層組成的框架。
圖1 系統(tǒng)架構及實現
感知層:通過物聯(lián)網實體(例如各類傳感器、BGU等硬件設施)進行數據采集與上鏈。其中門禁系統(tǒng)主動從指紋模塊、密碼模塊、運動感知模塊等外設采集信息,例如指紋、密碼的輸入信息、門禁周邊環(huán)境信息等。此外,部分實時采集的數據初步分析是在門禁控制器中進行的。而作為整個設計好的區(qū)塊鏈系統(tǒng)的一部分,BGU作為可信節(jié)點硬件級別的共識算法支持者,起著重要作用。同時,與各實體在去中心化的模式下相互協(xié)作,并將從門禁接收到的報警信息等進行上鏈存儲,全程可追溯,實現信息不可篡改,通過點對點的分布式連接進行信息的傳遞。
服務與支撐層:該層主要包含區(qū)塊鏈服務以及相關技術支撐,其中區(qū)塊鏈服務包含分布式存儲系統(tǒng)、共識算法、智能合約。其中分布式存儲系統(tǒng)作為區(qū)塊鏈的核心系統(tǒng),將本文提出的系統(tǒng)內所有節(jié)點歸為一個統(tǒng)一的分布式系統(tǒng)。并且采用基于PoA(proof-of-authority)的共識算法保證了各節(jié)點的運行和同步。同時,智能合約作為運行在區(qū)塊鏈上并遵循預定規(guī)則自動執(zhí)行的代碼,方便了去中心化交易的執(zhí)行,避免了在沒有可信第三方下出現不必要的糾紛。同時,密碼學、P2P等技術為區(qū)塊鏈的穩(wěn)定提供了支撐,如SHA-256加密算法保證了包含交易的區(qū)塊通過散列值連接成鏈不可篡改。
應用層:本系統(tǒng)基于Truffle框架,采用HTML、CSS等前端技術,通過Web3.js與合約進行交互,實現了用戶可以通過應用層提供的服務與智能家居實體進行通信與協(xié)作,從而實現信息的進一步處理并提供智能化服務。例如,用戶可以通過客戶端獲取真實可信的門禁訪問記錄或發(fā)布門禁臨時密碼等可視化操作。
如圖1所示,系統(tǒng)的工作流程為:
(1)用戶注冊是通過客戶端調用合約將身份信息與以太坊賬戶綁定的過程。用戶利用本地生成的隨機對稱密鑰sk_u對身份證明信息InfoID進行加密得到[InfoID]sk_u, 并使用公鑰pk_u加密sk_u得到 [sk_u]pk_u。 同時,合約設置用戶注冊狀態(tài)為queue并將審核節(jié)點加入審核名單中,方便審核節(jié)點直接調用密鑰,其中審核節(jié)點由服務提供商擔任。
(2)用戶提交注冊信息后,合約調用函數向審核節(jié)點發(fā)出驗證請求,并觸發(fā)請求事件(監(jiān)聽此事件的審核節(jié)點可以及時做出響應)。審核節(jié)點驗證用戶身份并調用合約將用戶狀態(tài)修改為pass。
(3)完成驗證的用戶,可以調用合約對房屋進行登記,將必要的信息上鏈存儲。同時,合約為該房屋初始化一個成員名單,然后將登記者變?yōu)閼糁鹘巧⒓尤肫渲?。此時戶主可以調用合約添加成員信息,并設置系統(tǒng)的訪問控制策略,詳見3.2.1節(jié)。
(4)門禁身份的錄入:戶主通過客戶端設置開鎖密碼和管理員密碼,合約將密碼的hash值pwd_hash以及admin_hash進行上鏈。同時,通過門禁的密碼按鍵輸入管理員密碼,錄入指紋進行鏈下存儲以及通過BGU進行鏈上備份,詳見3.2.2節(jié)。
(5)訪問及報警信息的上鏈:當用戶開鎖或觸發(fā)入侵警報時,BGU發(fā)布包含訪問或報警信息的交易,詳見3.2.3節(jié)。
(6)家庭成員通過客戶端對門禁進行操作,合約根據鏈上存儲的訪問控制策略判別用戶是否具有相應權限,詳見3.2.4節(jié)。
(7)服務提供商在維護與檢測中發(fā)現系統(tǒng)存在漏洞或業(yè)務需求的增加時,需對合約進行升級,合約所有者將新合約進行云存儲,并返回索引nc_url。同時,合約觸發(fā)投票事件通知審核節(jié)點進行鏈下審核。審核節(jié)點調用合約進行投票,當票數超過閾值,所有者獲得升級許可并完成升級,詳見3.2.5節(jié)。
在上文提出的基本框架以及大致工作流程的基礎上,本節(jié)詳細設計了門禁監(jiān)控系統(tǒng),主要目的是利用硬件模塊和智能合約實現門禁訪問以及入侵的可信監(jiān)控平臺。
指紋識別子程序用于接收指紋識別模塊讀取的指紋特征,并判斷指紋是否注冊,工作流程如圖2所示。指紋識別模塊通過USART1與Arduino相連,當USART1串口出現中斷,系統(tǒng)接收串口信息,并判斷用戶身份是否注冊,如果與鏈下指紋庫中的指紋比對成功則開啟門禁,同時BGU接收到發(fā)送來的訪問信息后,調用合約發(fā)布包含門禁訪問信息的交易;如果指紋比對失敗且失敗次數超過閾值n,則BGU發(fā)布包含門禁訪問報警信息的交易。此外,當系統(tǒng)檢測到鏈下指紋庫為空時,提示用戶使用其它方式開啟門禁,并且當用戶成功使用其它方式開啟門禁后BGU調用合約完成鏈下指紋庫同步。
圖2 指紋身份識別流程
密碼識別子程序用于實現用戶使用密碼開啟門禁和注冊指紋信息,工作流程如圖3所示。當密碼按鍵模塊檢測到密碼輸入時,首先進行鏈下驗證,若鏈下沒有驗證信息,則通過BGU調用合約驗證輸入的密碼與鏈上存儲的密碼hash值是否一致,若檢測到是管理員密碼,則提示選擇注冊還是注銷指紋模板,若注冊則通過指紋模塊讀取指紋,當兩次指紋一致則存儲指紋模板,同時BGU調用合約將加密后的指紋模板進行上鏈存儲;若注銷則提示通過客戶端操作。但是當檢測到是正確密碼或臨時密碼則開啟門禁,并通過BGU發(fā)布包含訪問信息的交易,而臨時密碼則會在使用后被立即刪除。當輸錯次數超過閾值n則發(fā)出報警提示,并發(fā)布包含訪問報警信息的交易。
圖3 密碼身份識別流程
入侵檢測子程序如圖4所示。當人體紅外傳感器感應到人員出現則開啟超聲波測距,若測量到人與門禁之間的距離≤閾值d時,開始計時。若操作者在設定時間t內未對門禁做出正確操作,則門禁判定發(fā)生室外入侵,廣播包含室外報警信息的交易。
圖4 入侵檢測流程
當入侵者試圖繞過門禁入侵室內時,若門禁處于鎖定狀態(tài),設置在室內多處的運動傳感器會檢測到室內入侵,當相鄰時間內接收到多處運動傳感器發(fā)送的數據,則判斷為室內入侵,BGU將包含室內入侵報警信息的交易進行廣播。
而當系統(tǒng)判定為入侵時,在將報警信息上鏈的同時自動刪除鏈下用戶身份特征,只有當用戶通過密碼身份完成鏈上識別開啟門禁時,鏈下才會重新同步用戶身份特征,一定程度上避免了暴力獲取鏈下數據的事件發(fā)生。
在基于區(qū)塊鏈和智能合約的智能門禁體系結構中,智能合約設計了所有交易的處理邏輯??蛻舳艘约癇GU通過Web3調用合約接口。下面對系統(tǒng)中的房屋登記、身份錄入、訪問與入侵檢測、客戶端訪問監(jiān)控、合約升級5個過程進行闡述。
3.2.1 房屋登記
房屋登記是指用戶身份驗證成功后用戶提交一個包含房屋相關信息的記賬交易,將必要的房屋信息上鏈存儲,防止外部網關對數據的惡意修改,具體過程見算法1。該算法由注冊用戶執(zhí)行,輸入參數為用戶以太坊公鑰地址user_addr、房屋識別號homeID、網關設備標識號gateID、網關的以太坊公鑰pk_g、登記者的私鑰簽名sig_r。交易返回響應信息true/false。
算法1:房屋登記算法
Input:user_addr,homeID,gateID,pk_g,sig_r
Output: 響應信息true/false
(1)調用合約home_register(homeID,gateID,pk_g,sig_r)函數, 將房屋信息加入home[homeID] 變量
(2)if verify_user(user_addr) &&homeID&&gateIDthen
(3) 合約通過personHome和gateHome變量記錄房屋與用戶以及房屋與網關之間的關系
(4) 初始化成員名單,將登記者加入到成員名單中,并將角色變量修改為戶主
(5) return true
(6)else return false
(7)end if
用戶注冊身份通過后,可以調用合約home_register()函數將房屋信息寫入區(qū)塊鏈,合約通過verify_user()驗證用戶是否完成認證,驗證后合約判斷homeID和gateID的登記狀況,若未登記則調用home_register()將信息記錄到home[homeID]指向的Home結構體中,并將房屋與用戶以及網關之間的映射關系分別記錄到personHome[user_addr]和gateHome[gateID]變量中。同時,合約初始化一個成員名單member[homeID]并將登記者加入其中,然后合約修改member[homeID][user_addr].role變量,將登記者的角色變?yōu)閼糁?。隨后戶主可以調用合約添加成員,方便成員訪問房屋信息。
3.2.2 身份錄入
在執(zhí)行該過程的前提是房屋已完成登記,房屋與BGU綁定后就可以實現門禁密碼及指紋的存儲,該過程見算法2。該算法由戶主執(zhí)行,輸入參數為用戶以太坊地址user_addr、房屋識別號homeID、網關設備唯一標識號gateID、管理員密碼的hash值admin_hash、門禁密碼的hash值pwd_hash、對稱加密后的指紋特征 [finger_tmp]sk_g、 網關以太坊公鑰加密后的密鑰[sk_g]pk_g。
算法2:身份錄入
Input:user_addr,homeID,gateID,admin_hash,pwd_hash,[finger_tmp]sk_g,[sk_g]pk_g
(1)戶主調用合約接口set_pwd(homeID,admin_hash,pwd_hash)
(2)if verify_role(user_addr,homeID)=UserRole.admin then
(3) 合約將門禁的admin_hash以及pwd_hash存入acc_admin[homeID]和acc_pwd[homeID]變量中
(4)end if
(5)通過指紋模塊錄入指紋特征, 網關調用合約addFinger(gateID,[finger_tmp]sk_g,[sk_g]pk_g)函數, 將指紋特征記錄到變量temporaryFinger[homeID]中
(6)if verify_gate(gateID) then
(7) 觸發(fā)合約綁定事件bind(homeID,[finger_tmp]sk_g)
(8) 戶主調用合約bindFinger(homeID,user_addr,[finger_tmp]sk_g)函數綁定成員與指紋之間的關系, 記錄到成員結構信息中
(9)end if
在完成房屋登記后,戶主調用合約set_pwd()函數創(chuàng)建門禁管理員密碼和開鎖密碼。合約內部執(zhí)行vertify_role()函數驗證用戶戶主角色,通過后密碼的hash值分別存入acc_pwd[homeID]和acc_admin[homeID]變量中。戶主在密碼按鍵識別模塊上通過管理員密碼錄入用戶指紋模板,網關將加密后的指紋模板上鏈并觸發(fā)綁定事件,同時合約驗證該網關是否登記。監(jiān)聽該事件的戶主通過客戶端調用合約bingFinger()將指紋模板與用戶進行綁定。
3.2.3 訪問與入侵檢測
算法3由區(qū)塊鏈網關執(zhí)行,輸入參數為設備標識gateID、門禁訪問或報警類型typeacc、信息Infoacc及其hash值Infoacc_hash、網關的簽名sig_g。
算法3:訪問與入侵記錄
Input:gateID,typeacc,Infoacc,Infoacc_hash,sig_g
(1)網關調用合約up_data(gateID,typeacc,Infoacc,Infoacc_hash,sig_g)上傳記錄的相關信息
(2)if verify_gate(gateID) then
(3) iftypeacc為訪問 then
(4) 合約將訪問信息存入Access[gateHome[gateID]]變量中
(5) else
(6) 合約將報警相關信息存入Alarm[gateHome[gateID]]變量中
(7) end if
(8)end if
網關通過門禁的身份識別模塊或入侵檢測模塊獲得相應的參數后,調用合約up_data()接口創(chuàng)建包含門禁訪問或報警信息的交易。合約內部利用verify_gate()驗證網關身份,通過后合約根據typeacc將門禁信息存入相應的變量中。
3.2.4 訪問監(jiān)控
該過程為用戶通過客戶端實現對門禁訪問記錄的查詢以及發(fā)布門禁臨時密碼等操作。本文采用基于角色的訪問控制(RBAC)機制實現用戶的訪問控制,當用戶調用合約obtain_msg(user_addr,homeID,param) 對門禁記錄進行查詢,合約內部調用verify_role()驗證用戶角色是否具有與檢索信息相對應的權限,若通過則返回查詢信息。而當用戶發(fā)布臨時密碼時,調用合約publish_tpwd(user_addr,homeID,tpwd_hash,time) 創(chuàng)建發(fā)布臨時密碼的交易,合約內部調用verify_role()驗證是否具有戶主角色,若是戶主則將臨時密碼的hash值tpwd_hash與有效時長time存儲到變量homeTep[homeID]指向的TempPwd結構體中。
3.2.5 合約升級
智能合約作為運行在區(qū)塊鏈上的代碼,具有不可篡改的特點,這使數據的安全性得到有效保障的同時使得合約一旦部署就不可修改,這就給修復系統(tǒng)bug或引入新功能帶來了困難[13]。因此本文利用Zeppelin社區(qū)提出的一種代理合約實現新合約的部署,以實現合約升級的目的。該合約引入了代理所有權(本文就是合約所有者)的概念,只有所有者有權將新版本合約寫入代理合約中。當所有者獲取升級許可時,調用合約updateTo(new_implementaddr) 函數傳入新合約部署后的合約地址new_implementaddr,合約內部驗證new_implementaddr與storage[position]變量存儲的舊合約地址是否重合,其中position為一個常量,通過keccak256提供一個足夠隨機的存儲位置。驗證通過后,設置新的合約地址存儲到storage[position]變量中,從而實現用戶通過代理合約對新邏輯合約的調用。
通過代理合約調用函數來返回邏輯合約的值,該操作通過solidity的匯編操作碼實現,當調用的函數在合約中不存在時,合約調用fallback回退函數將請求重定向到其它合約中。而fallback函數通過calldatasize將收到的msg.data傳遞給目標合約,然后通過delegatecalls操作碼返回調用結果。然而,所有者在實現合約升級的同時也為去中心化環(huán)境帶來了風險,因此本系統(tǒng)通過投票機制限制所有對合約升級的許可,見算法4。輸入參數為合約所有者的以太坊地址owner_addr、合約索引nc_url、索引的hash值url_hash、新合約的hash值nc_hash、審核節(jié)點的地址user_addr。
算法4:升級許可
Input:owner_addr,nc_url,url_hash,nc_hash,user_addr
(1)合約所有者調用合約release_nc(owner_addr,nc_url,url_hash,nc_hash)函數
(2)ifowner_addr不是所有者 then
(3) 拋出異常
(4)end if
(5)將新合約的信息存入nc[nc_hash]變量中
(6)觸發(fā)投票事件vote(nc_url,url_hash), 審核節(jié)點鏈下審計新的合約代碼
(7) while(rel_nc[url_hash].voteNum (8) if 審核通過 then (9) 審核節(jié)點調用vote_nc(user_addr,url_hash)函數投票 (10) ifuser_addr是審核節(jié)點&&vote_status[user_addr][url_hash]=false (11)rel_nc[url_hash].voteNum++,vote_status[user_addr][url_hash]=true (12) end if (13) end if (14)end while (15)ifrel_nc[url_hash].voteNum≥preset_numthen (16)upgrade_status=true (17)end if 為避免合約所有者惡意行為的發(fā)生,合約所有者owner在升級新合約前需要將合約發(fā)送到云端進行審核。然后owner調用release_nc()發(fā)布合約審核請求,并觸發(fā)合約的投票事件。監(jiān)聽該事件的審核節(jié)點鏈下審計合約,通過后調用合約vote_nc()函數增加rel_nc[url_hash].voteNum的票數,vote_status[user_addr][url_hash]限制了節(jié)點不可重復投票,并且當在preset_time時間內票數達到預設值preset_num,則合約修改升級許可的狀態(tài)變量upgrade_status。 本文使用運行Ubuntu20.04系統(tǒng)的PC以及Raspbian系統(tǒng)的樹莓派4B進行實驗。同時,該系統(tǒng)基于Truffle框架進行開發(fā),采用Solidity編寫智能合約,運行在利用Geth(go-ethereum)搭建的基于PoA共識的以太坊私有網絡中,并在私有網絡中設置5個節(jié)點,其中本地PC上通過不同端口模擬3個用戶訪問的測試節(jié)點和1個挖礦節(jié)點,此外樹莓派上同樣部署Geth作為網關測試節(jié)點,然后通過Geth控制終端將網關的節(jié)點信息加入到本地跟蹤的節(jié)點列表,本地節(jié)點將保持與這些節(jié)點連接,實現局部的P2P私有網絡,保證網絡中的各節(jié)點進行同步與驗證。 本實驗針對上述門禁監(jiān)控系統(tǒng)中指紋模板的存儲、同步以及密碼的識別效率進行測試。在指紋模板存儲與同步測試中采用10個指紋模板,模板鏈上存儲與鏈下同步的結果如圖5所示。其中指紋模板每次錄入一個就會直接上鏈存儲,而鏈下同步模板數由一個逐次遞增,同步數最多為10個,符合實際需求。從圖中可以看出存儲的平均處理時間基本穩(wěn)定在某一范圍,而同步的延時與同步的模板數呈正比,二者的處理效率用戶完全可以接受。而且隨著節(jié)點增加也不會導致處理效率的下降,這完全得益于PoA共識算法只需事先選取部分權威節(jié)點處理交易的特點,而傳統(tǒng)的PoW(Proof-of-Work)共識算法需要將交易信息廣播到所有節(jié)點,并且隨著節(jié)點的增加耗時更久,這就使得PoA的處理效率要遠優(yōu)于PoW,同時基于PoA的私有網絡更有利于及時向用戶反饋結果。 由于智能合約的局限性很難實現鏈上指紋的身份識別,因此在實際情況中,當鏈下身份數據被刪除時,就可以使用密碼身份識別進行鏈上驗證,圖6展示了鏈上鏈下密碼身份識別的效率,其中左側縱坐標為鏈上驗證的響應時間,右側縱坐標為鏈下驗證的響應時間。從圖中可知,鏈下識別的效率要明顯優(yōu)于鏈上識別,但是鏈上密碼身份識別的效率穩(wěn)定而且也基本滿足實際需求。 圖5 指紋模板存儲與同步效率 圖6 密碼身份識別效率 本文通過Remix對合約的升級功能進行測試,在保證原有數據不變的情況下實現原始合約的升級。實驗設計了一個邏輯合約EGSystem.sol,通過房屋登記功能測試合約的升級效果。首先分別部署升級合約Upgradeability.sol和邏輯合約EGSystem.sol,然后調用Upgradeability.sol中的upgradeTo()函數傳入原始邏輯合約地址,接著重新載入Upgradeabilidy.sol的合約地址,最后利用Upgradeablidity.sol調用EGSystem.sol中的home_register()函數登記房屋信息。 經測試,在重新登記已登記過的房屋信息時,提示當前房屋信息以登記,如圖7所示,說明房屋登記功能可以正常調用。 圖7 房屋登記功能測試 當原始合約已無法滿足當前系統(tǒng)的需求時,假設所有者已獲得升級許可,部署新的邏輯合約EGSystemV2.sol,然后調用Upgradeability.sol的upgradeTo()函數傳入新合約的地址并重新載入升級合約的地址完成升級。 測試如圖8所示,合約成功的由原始邏輯合約升級為新的合約,在保證合約功能和數據續(xù)用的前提下,實現了合約的升級。 圖8 合約升級測試 智能門禁監(jiān)控系統(tǒng)旨在于用戶通過客戶端實現對智能門禁的監(jiān)測以及控制,本系統(tǒng)采用Web3.js以及JavaScript等技術實現客戶端界面。如圖9所示為用戶通過檢索參數查詢到的某天門禁訪問的信息,其中包含訪問時間、開鎖方式、相應用戶等信息。 圖9 門禁記錄查詢界面 本文針對智能門禁系統(tǒng)中用戶生物特征易被盜取、監(jiān)控數據易被外部篡改等問題,設計了一個基于以太坊區(qū)塊鏈的智能門禁監(jiān)控系統(tǒng)。該系統(tǒng)利用智能合約實現門禁訪問身份的可信存儲與識別以及監(jiān)控數據的固化,并且配合鏈下鏈上的多方式身份識別有效提升用戶的訪問效率,同時入侵檢測單元確保了室內外入侵能夠被立即檢測到,而且合約的可升級保證了對系統(tǒng)漏洞的及時修復以及提升系統(tǒng)的可擴展性,實現用戶對監(jiān)測數據的有效管理。實驗結果表明,系統(tǒng)性能可以達到實際應用所需效果。4 測試分析
4.1 對比分析
4.2 合約升級測試
4.3 系統(tǒng)實現
5 結束語