天天看點

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

區塊鍊技術叢書 點選檢視第二章

區塊鍊工程實踐

行業解決方案與關鍵技術

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章
魯靜 著

第1章

基于區塊鍊的可信電子證照

證件作為個人從事社會活動和企業生産經營的一種具有法定效力的檔案,是現代生活中必不可少的工具。在嚴謹的證件審批管理體制下,煩瑣的程式和龐雜的材料證明使得“證件多、辦證難、用證煩、核查慢”等辦證問題頻現,既影響群眾生活,阻礙企業正常營運,又降低了行政效率,成為長期以來群眾诟病的大問題。與此同時,傳統的紙質證照不僅會造成資源浪費,促使重複性證明成為常态,更重要的是難以杜絕證件僞造現象,造成信任危機,同時還存在證照資訊分享不暢、易丢失、易損毀等一系列問題。随着資訊技術的發展,電子證照應運而生。電子證照不僅可以提高相關人員辦事效率,還可以解決紙質證照無法解決的資源浪費和易僞造等問題,甚至可以打通不同的電子政務系統,進而更好地為群眾服務。

1.1 背景與現狀

1.1.1 電子證照的發展曆史

自黨的十八大召開以來,利用資訊手段解決“證件多”和“用證難”等問題已成為社會共識。國務院辦公廳《關于促進電子政務協調發展的指導意見》(國辦發[2014]66号)明确指出:“積極推動電子證照、電子檔案、電子印章、電子檔案等在政務工作中的應用”;澳門在 2005 年年底正式推出《電子政務發展綱領(2005—2009)》,提出“運用資訊科技及行政現代化手段,提高政府部門施政質素和效率,降低行政運作成本,持續令公民得到貼身且滿意的公共服務”的願景。自2016年以來,國務院先後發文提出建構電子證照庫,并明确要求積極推動電子證照、電子公文、電子簽章等在政務服務中的應用,實作“一号一窗一網”,為居民提供“記錄一生,管理一生,服務一生”的服務。目前,國内已有80多個試點城市在不同程度地建設電子證照庫,但各地都建有自己的資訊系統,資訊化水準也存在差異,電子證照庫的實施困難重重。如何打通不同的資訊系統、令證照互認,是亟須解決的技術問題。

國内目前的電子證照管理平台主要采用集中共享模式,由中心資料庫來完成證照的制作、存儲、資訊查詢和交換共享,資料庫的擁有者掌握着資料庫的通路和更新權限。但由于需要管理的人口衆多、社會發展水準不均衡,短時間内把不同地區、部門的公民資訊完全集中并實時聯網,建立“集中的公民資訊庫”很難實作,因為建立“集中的公民資訊庫”需要通過體制改革與機構合并實作資料集中和資訊聯網,在目前條件下,這在管理和技術上的實作都相當困難,存在跨地區、跨部門應用流程複雜、管理性能不高等問題,無法适應大規模、多樣化電子證照管理和驗證服務需求。同時集中式資料庫并沒有有效控制證照資訊的保密制度,或者有目的性的指定授權,使其對所有辦事機構公開,這樣證照持有人的資訊沒法得到有效保護,被攻擊篡改和洩露的風險較大,緻使證照可靠性打了折扣。

近幾年各類研究機構、企業對電子證照也展開了日漸深入的研究。《一種電子證照資訊互動的系統及方法》[1]公開了一種電子證照資訊互動系統,包括主要端、存儲端、簽發端、授權端、查驗端和服務端,證照持有人可以根據不同的辦事流程對不同的辦事機構進行電子證照的授權查驗;《一種非媒體電子證照系統》[2]包括遠端資訊資料庫系統、通信網絡和系統終端,提供了一種能克服現有媒體證照不足且能基于GPS、智能手機滿足社會智能管理條件的非媒體證照系統;《電子認證在可信電子證照中的應用》[3]通過在電子證照中增加帶有數字簽名的二維碼形成可信電子證照,保證了證照的真實性和不可篡改性;《基于數字證書互聯互通的身份認證支撐平台及認證方法》[4]公開了一種基于數字證書互聯互通的身份認證支撐平台以及身份認證方法,将各應用系統需要進行數字證書認證的請求統一集中到基于數字證書互聯互通的身份認證支撐平台進行處理。以上研究均對資訊系統進行了不同程度的優化,也取得了一定效果,但其基本思路仍是依托第三方認證機構,建立中心資料庫存儲資料,然後進行各部門共享,這并不能從根本上解決資訊壁壘及證照資訊互信互通的問題。

1.1.2 區塊鍊在電子證件和身份認證領域的國内外發展現狀

區塊鍊(blockchian)技術[5]是随比特币等數字加密貨币興起的一種新型分布式資料組織方法及運算方式,通過去中心化來集體維護一個可靠資料庫的技術。該技術将一段時間内的兩兩配對資料(比特币中指交易)打包成資料塊(block),然後利用具有激勵性質的共識算法讓點對點對等網(p2p網絡)中的所有節點産生的資料塊保持一緻,并生成資料指紋驗證其有效性然後連結(chain)下一個資料塊。在這個過程中,所有節點的地位都是對等的,沒有所謂的伺服器和用戶端之分,是以被稱為去中心化的方式,這很好地解決了資料在存儲和共享環節中存在的安全和信任問題。通過區塊鍊技術,在資料共享過程中可明确資料的來源、所有權和使用權,達到資料在存儲上不可篡改、在流通上路徑可追溯、在資料管理上可審計的目的,保證資料在存儲、共享、審計等環節中的安全,實作真正意義上的資料全流程管理,進一步拓展資料的流通管道、促進資料的共享共用、激發資料的價值挖掘、增強資料在流通中的信任。同時,基于區塊鍊的分布式共享“總賬”這一特點,在平台安全方面,可達到有效消除單點故障、抵禦網絡攻擊的目的。這些特點使得區塊鍊技術特别适合應用于具有保密要求的大資料運算領域。

近年來,國外已有一些研究機構和企業将區塊鍊應用在電子證件認證和身份認證領域(見圖1-1)。2015年7月,區塊鍊初創公司ShoCard獲150萬美元投資,将實體身份證件的資料指紋儲存在區塊鍊上。使用者用手機掃描自己的身份證件,ShoCard應用會把證件資訊加密後儲存在使用者本地,把資料指紋儲存到區塊鍊。區塊鍊上的資料指紋受一個私鑰控制,隻有持有私鑰的使用者自己才有權修改,ShoCard本身無權修改。同時,為了防範使用者盜用他人身份證件掃描上傳,ShoCard還允許銀行等機構對使用者的身份進行背書,確定真實性。2015年9月,去中心化的管理項目比特國(Bitnation)在區塊鍊上實施“電子公民”(e-Residents)計劃。使用者在其官網上通過區塊鍊登記成為Bitnation的“公民”,并獲得Bitnation“世界公民身份證”。2015年12月,Bitnation與愛沙尼亞政府簽署協定,将為“電子公民”項目提供公證服務,無論他們身居何處,在何處做生意,都可以在區塊鍊上享受結婚證明、出生證明、商務合同和其他服務。區塊鍊是一個公共賬本,全世界數以千萬計的計算機都存儲着其副本,具備公開公證的可複制性與不可更改性,比目前各國使用的傳統公證方法更安全。2016年6月,美國國安局向區塊鍊初創公司Factom撥款19.9萬美元用于物聯網裝置數字身份安全性開發,利用區塊鍊技術來驗證物聯網裝置,阻止因裝置欺騙而導緻的非授權通路,以此來確定資料完整性;美國區塊鍊公司Certchain為文檔建立資料指紋,提供去中心化的檔案所有權證明;OneName公司則提供了另一種身份服務,即任何比特币的使用者都可以把自己的比特币位址和自己的姓名、Twitter、Facebook等賬号綁定起來,相當于為每個社交賬戶提供了一個公開的比特币位址和進行數字簽名的能力。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

在國内,有一些研究機構也在開展區塊鍊在電子政務方面的應用研究。闵旭蓉等人[6]設計了一種電子證照共享平台,利用區塊鍊技術的去中心化、不可篡改、分布式共同記賬、非對稱加密和資料安全存儲等特點,實作電子證照的安全可信共享,實作各地、各部門和各層級間政務資料的互聯互通,支撐政府高效施政。黃步添等人[7]明确了電子證照參與者的權利和義務,基于聯盟鍊思想和輪值機制,設計區塊鍊平台的系統架構、資料結構和業務流程,提供電子證照的頒發、存儲、更新、驗證等功能,實作多中心、協同式電子證照管理,進而為電子證照擁有者以及相關應用系統提供便捷的電子證照服務。蔣海等人[8]提供了一種區塊鍊身份建構及驗證方法,有效緩解了因個别認證機構的問題影響使用者身份資訊準确性的情況,然而其原始資料來源為第三方認證機構,未能解決資料的真實性問題,且其隻進行身份驗證,未與其他證件錨定,擴充性不強,發揮的作用有限。

此外,有一些教育和科研機構将區塊鍊技術應用于教育證書領域。2015 年,麻省理工學院的媒體實驗室(The MIT MediaLab)應用區塊鍊技術研發了學習證書平台,并釋出了一個類似“比特币錢包”的手機App[9]。學習者可以利用該App存儲和分享自己的學習證書,随身攜帶、随時展示,且擁有重申成績的權力。學習者不能擅自更改學習證書的内容,但能自主決定将什麼證書展示給哪個通路者。在查詢時,将數字證書的密鑰點對點地發送給用人機關或學生等有關需求方,確定證書不會被惡意查詢。無獨有偶,位于舊金山的軟體教育訓練機構—Holberton School從2017年開始利用區塊鍊技術記錄學曆,并在區塊鍊上共享學生的學曆證書資訊。同樣,學分也可以通過這項技術認證和交換。對于學生來說,這一應用拓寬了他們獲得教育評價的途徑,友善了學習記錄和學曆資訊的儲存。從更長遠的眼光來看,利用區塊鍊記錄跨地區、跨院校甚至跨國學習者的資訊,可以使在不同環境中學習的學習者獲得同樣有效的學習記錄。區塊鍊技術在教育證書方面可能的應用方式包括:為線上教育提供有公信力和低成本的證書系統;作為智能合約,完成教育契約和存證;作為分布式的學習記錄存儲,記錄學習軌迹,共享學習學分。從應用規模和範圍來看,區塊鍊在教育領域的應用範圍可以小到單個教育機構、學校聯盟,大到全國甚至全球性的教育互認互通聯盟。

1.2 區塊鍊與電子證照的比對度分析

在電子證照應用中引入區塊鍊技術,可以借助區塊鍊的去中心化同步記賬、身份認證、資料加密和資料不可篡改等特征,確定電子證照資訊可信任且可追溯,使各社會主體共同建造、共同維護、共同監督,進而滿足公衆的知情權、監督權,增強電子證照的客觀性與可信度,提高政務工作效率及公民和法人的辦事效率。區塊鍊與電子證照的比對度分析如下所示。

(1)打破政府資訊壁壘:區塊鍊采用分布式資料庫架構,不需要跨部門、跨地區的資料集中,不需要建構多級資料管理中心,不改變政府部門的現有業務系統。區塊鍊建構新型的部門協作模式,提高其協同的流通效應,促進政府部門間資訊的可信流動。與中心資料庫集中共享模式比較起來,這種模式建設難度更低,實施可行性更高。

(2)規避道德風險:政府業務部門隻需要将市民資訊開放給市民使用,不需要對其他部門開放,防止使用者資訊洩露。同時,點對點查證實作證照資訊僅在持證人與查證人之間流動,規避第三方參與時的道德風險。

(3)可信的存在性證明:發證機構通過對電子證照檔案簽名,将發證記錄儲存在區塊鍊上,可證明其于某一确定時刻合法存在,杜絕證件僞造現象,進而促進社會互信,降低公衆信任成本和企業商業活動成本。

(4)持證人可監督證照使用過程:區塊鍊通過交易打包的形式儲存不可篡改的發證、用證、驗證及更改記錄。持證人可在用戶端實時檢視電子證照在何時何地被查驗和使用過,避免證照在不知情的狀況下被他人冒用,大大降低了使用風險。通過加蓋時間戳,區塊鍊銜接更新後的證照與原始版本,連續性也會得到保證。

(5)可審計性高:電子證照檔案經過哈希運算多點備份儲存在區塊鍊上,資料安全性高。由于加蓋了時間戳使得證件使用記錄可追溯,可為審計部門提供更可信的資料支撐,避免重複認證,減少資源浪費。

(6)證照資訊互信互通:主鍊進行身份認證,側鍊認證各種證照(結婚證、不動産證、學位學曆證、營業執照證、衛生許可證),側鍊與主鍊雙向錨定,實作證照資訊自由流動,積累大量應用資料,逐漸提供征信服務,助力誠信社會建設。

1.3 基于區塊鍊的可信電子證照方案設計

1.3.1 業務設計

基于區塊鍊的可信電子證照用于政府部門給公民發放電子證照,以取代紙質證照,并通過區塊鍊儲存不可篡改的發證、收證、查證記錄,使各社會主體共同建造、共同維護、共同監督,進而滿足公衆的知情權、監督權,增強電子證照的客觀性與可信度。

從業務功能上來說,可信電子證照應用包括登記、發證、收證、查驗幾個環節,如圖1-2所示。登記環節由公民在指定業務部門完成實名登記,申請開通電子證照;發證環節由公民根據需要申請個人電子證件,并由政府或第三方機構發放電子證照;收證環節用于公民接收、存儲、管理自己的電子證照;查驗環節主要由查驗從業人員對公民提供的電子證照進行查驗,證明個人身份或辦理相關業務。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

1. 登記

實作公民電子證照的日常開通、登出、變更申請工作。公民根據個人在指定的業務部門完成實名登記後,即可辦理電子證照的開通、登出、更改等日常業務。

2. 發證

實作公民電子證照的發放。公民申請開通電子證照後,由公民提出申請,可信電子證照應用平台根據申請資訊為公民發放個人電子證照。電子證照通過彩信、手機用戶端等幾種管道進行發放,申請的個人電子證照通過手機用戶端進行統一管理。具體流程如下:

(1)持證人通過手機用戶端向政府的發證機構提供個人資訊,申請一個數字身份。

(2)發證機構稽核持證人資訊,生成持證人的數字身份;發證機構用其私鑰對持證人的數字身份簽名後,發送給持證人,以及向電網資訊中心報審/備案。

(3)持證人使用自己的公鑰對接收到的有發證機構簽名的數字身份進行加密,并送出數字身份區塊鍊。

(4)數字身份區塊鍊完成驗證和共識過程,實作數字身份的記賬。

3. 查驗

實作從業人員對公民電子證照的查驗,對公民身份進行識别、核對,完成個人身份證明。查驗人員可通過手機用戶端、PC工作端進行查驗操作,查驗操作記錄儲存在統一管理中心,以保證事後審計。具體流程如下:

(1)持證人出示用戶端上的數字身份碼,供查證人掃描;

(2)查證人利用發證機構的公鑰驗證數字身份是否為發證機構所發;

(3)查證人對持證人數字身份資訊進行查證。

可信電子證照應用平台包括統一管理中心、用證端、發證端和查證端四部分。其中統一管理中心為用證端、發證端和查證端提供基礎支撐功能服務和資料網絡服務。用證端是提供給公民使用,即持證人擷取、管理及使用電子證照的應用程式,持證人可以通過彩信、手機用戶端兩種方式擷取電子證照。發證端将與政府的各個業務系統實作對接,采用嵌入式,不影響現有業務系統的運作,并提供相應的調用發證服務。查驗端是提供給查驗從業人員查驗電子證照時使用的應用程式,其可以安裝在PC端,也可以安裝到移動端。

1.3.2 架構設計

從業務流程上看,基于區塊鍊的可信電子證照是一個典型的分布式應用(DApp),是以我們采用以太坊的技術底層作為支撐,其基礎技術架構自下而上包括資料層、網絡層、共識層、合約層和應用層。結合電子證照應用的需要,我們設計了如下技術架構(見圖1-3),主要分為技術層、服務層和使用者層。

□技術層運用以太坊平台,将證照資訊及使用記錄進行區塊化封裝,連接配接成區塊鍊;

□服務層以技術層為基礎,向使用者提供會員制服務、區塊鍊服務、電子證照服務;

□使用者層主要表現形式為公民使用者App、發證機構前端,以實作使用者與使用者之間、使用者與發證機構之間的資訊互動。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

如圖1-4所示,對資料進行區塊化封裝,每個區塊細分為區塊頭和區塊體兩部分。其中,區塊目前的版本号、上一個區塊的位址、時間戳、目前區塊哈希值與随機數封裝在區塊頭内;目前區塊的交易數量以及經過驗證的、區塊建立過程中生成的所有記錄封裝在區塊體中。區塊體由Merkle樹組成,在Merkle樹的葉子節點上,儲存着每一筆發證、收證、查證和換證的記錄,這些資料通過兩兩Hash計算向上形成Merkle樹的根記入區塊頭。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

根據不同證件的業務類型,采用主鍊和側鍊[10]雙向錨定的設計加以區分。如圖1-5所示,主鍊用于身份證明,使用者利用身份證、護照或社保卡在主鍊上完成身份認證,再通過主鍊錨定其他電子證照;不同的證照對應各自的側鍊,以便于劃分不同的業務資料,提高登記、查驗效率。側鍊的雙向錨定技術允許信任在不同網絡間傳遞,建立個人信用體系;同時允許釋出試用版本的電子證照區塊鍊,對主鍊不造成影響。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

1.3.3 互動設計

1. 身份認證階段

身份認證系統主要涉及區塊鍊平台、使用者App和背景管理系統的互動。對于業務系統新增賬號分3個不同的角色:普通使用者、制證機關使用者、查驗機構使用者。普通使用者身份認證如圖1-6所示,發證機構身份認證如圖1-7所示。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

首先,使用者登入系統ID,背景管理系統進行身份認證。如果通過則将使用者身份資訊寫入身份管理資料庫,并向使用者傳回注冊成功資訊,否則重新注冊。

其次,注冊區塊鍊ID,由使用者資訊(姓名、機關、城市、國家及其他代表使用者身份的資訊)生成全網唯一的身份辨別,根據這一身份辨別,判斷使用者是否為新使用者。我們利用Hash算法生成全網唯一身份辨別。原則上,同樣的輸入會産生同樣的Hash輸出,而不同的輸入産生的輸出肯定不同。這類的Hash算法有很多,我們主要采用SHA3 、最大量2128算法。背景管理系統可以儲存目前區塊鍊中所有使用者的全網唯一身份辨別,可将認證機構根據使用者資訊生成的全網唯一身份辨別與存儲過的全網唯一身份辨別進行對比,來判斷該使用者是新使用者還是老使用者:若未找到存儲過的全網唯一身份辨別則為新使用者,否則為老使用者。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

2. 發證、收證階段

收發證系統主要涉及使用者端、區塊鍊平台、發證機構前端和政府業務庫的互動,如圖1-8所示。

首先,使用者A由App向發證機構B請求簽發電子證照。

其次,政府業務庫未查找到證照記錄則傳回申請步驟,查找成功則通過發證機構前端進行制證發證,發證機關簽名,通過請求資訊擷取使用者A(持證人)的公鑰(位址)。

再次,發證機構用自己的私鑰和使用者A的公鑰加密,平台輸出該筆交易的Hash值,向全網廣播使用者A的發證記錄,記錄證件資訊的區塊編号,寫入區塊鍊。其他機構收到了發證機構B的廣播資訊,并對使用者A的身份資訊進行确認。

最後,持證人在App上驗證發證機構簽名,確定資訊未被篡改,在區塊鍊上用私鑰解密完成收證,發證機構公鑰解密作為存證。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

3. 換證階段

換證系統同樣涉及使用者端、區塊鍊平台、發證機構前端和政府業務庫的互動,如圖1-9所示。

使用者A由App向發證機構B請求更改電子證照,輸入A的區塊鍊位址、發證組織機構代碼以及使用者公鑰加密的證件資訊。發證機構B接收到使用者A的更新請求後,首先根據使用者資訊查詢該使用者的已有身份證書,如果未找到,則更新失敗;如果找到已有身份證書,則比較已有證書中的使用者公鑰、頒發者、有效期等資訊與更新請求中的資訊是否一緻,如果一緻則更新失敗,如果不一緻則為使用者建立新的電子證書(同發證步驟)。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

4. 查驗階段

查驗系統主要涉及查證人使用者端、持證人使用者端、區塊鍊平台的互動,分為遠端查驗(見圖1-10)和線下查驗(見圖1-11)。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章
帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

遠端查驗步驟如下:

(1)查證人C通過使用者端直接向持證人A申請查驗證照資訊,若持證人A拒絕請求則查證失敗,通過請求則會調出帶有發證機構B簽名的電子證照,由查證人C用其公鑰加密後,向其他節點廣播查證記錄;

(2)查證人C驗證發證機構簽名,用私鑰解密套用模闆進行證照查驗。

遠端查驗滿足了使用者随時随地進行證照查驗的需求,大幅節省了社會交往、商務活動的成本。

線下查驗則首先需要查證人C掃描持證人A的含有其自身ID辨別的二維碼,之後向持證人A發出證照查驗申請,并按遠端查驗步驟進行。

1.4 關鍵技術及方法

1.4.1 以太坊的賬戶體系

從計算機科學的角度出發,以太坊可以看作是一個分布式狀态機,其中交易區塊等同于狀态轉換函數,新的交易區塊由從狀态A到狀态B的狀态轉換記錄構成。是以,以太坊就像一個巨大的虛拟狀态引擎或去中心化的計算機,可供多方共享計算平台并基于此運作智能合約。以太坊有一種原生資産—以太币,它是以太坊生态系統中的價值基礎。以太币用于調整營運智能合約的激勵機制,同時提高網絡的安全性。

與比特币比較起來,以太坊是一個應用程式平台,而不僅是加密貨币。比特币主要用于交易,而以太坊則可以執行更為複雜的規則,是一個用于建構分布式應用程式的平台。以太坊有一個圖靈完備的腳本語言,利用程式代碼将合約規則執行個體化成智能合約。智能合約是表達、驗證并協商或強制執行數字合約的一段計算機代碼,它可以在沒有任何第三方的情況下被以太坊網絡自動執行。以太坊的腳本語言比比特币的腳本語言要強大得多,可以實作複雜的智能合約規則。借助以太坊計算平台,開發人員可以用分布式應用程式(DApp)替代集中式應用程式。因為沒有集中的資料庫可以成為黑客的目标,DApp極大地增強了網絡安全性。典型的DApp案例包括去中心化的内容釋出平台Steemit、社交網絡Synereo、去中心化的打車平台LaZooz、音樂版權平台Ujo Music和去中心化的就業市場Ethlance等。

比特币和以太坊之間的另一個差別在于,比特币是基于UTXO(未花費的交易(tx)輸出)的,而以太坊是基于賬戶體系的區塊鍊。在比特币中,交易的所有輸入必須在UTXO資料庫中才有效。UTXO是先前交易中未支出的金額,需要确認為未花費用作為目前交易的輸入,比特币使用者的可用餘額是由其私鑰控制的UTXO總和。而以太坊使用基于賬戶的模型,使用者的可用餘額記錄在使用者的賬戶中,該賬戶具有使用者的位址、餘額以及可選代碼字段中的任何資料。例如在比特币中,Alice擁有控制一組UTXO的私鑰;在以太坊中,Carol擁有控制由位址、餘額和代碼字段組成的賬戶的私鑰。通過賬戶模型,以太坊節點隻需更新其賬戶餘額而不是存儲每個UTXO,是以更節省空間。同時,以太坊也更直覺,因為智能合約是一種更有效的程式設計機制,其可以在賬戶之間轉移餘額,而不是不斷更新UTXO集來計算使用者的可用餘額。

以太坊有兩種賬戶類型:外部賬戶(EOA)和合約賬戶,這兩種賬戶都有使用者位址和以太币餘額。EOA通常被用于某種形式的外部實體(如個人或公司),這類使用者在注冊以太坊網絡時都被配置設定為EOA賬戶。EOA具有加密位址,它可以發送交易(将以太币轉移到其他賬戶或觸發合約代碼)。第二種賬戶類型是合約賬戶,這些賬戶具有位址、以太币餘額以及任何關聯的合約代碼。代碼執行由從其他合約或EOA中收到的交易或消息(函數調用)觸發。這意味着合約是以太坊網絡上的自主賬戶,其他賬戶(EOA或合約賬戶)可以與它們進行互動,但沒有人控制它們(因為一旦啟動,它們就是自治的)。由于其他程式可以調用合約上的函數,是以可以與合約賬戶互動或執行某些交易,但是不能直接控制合約賬戶。以太坊賬戶以交易為媒介,與以太坊網絡上的其他賬戶、其他合約和合約狀态進行互動。

以太坊某一時刻的所有賬戶狀态構成了整個以太坊的網絡狀态,它們需要就每個賬戶的目前餘額、存儲狀态和合約代碼達成共識。每個新的區塊都需要擷取前一個區塊的資訊并更新新的以太坊網絡狀态,每個網絡節點都必須就新的網絡狀态達成一緻。是以,交易區塊是以太坊網絡狀态之間的狀态轉換函數。

1.4.2 許可鍊的節點準入機制

目前有很多以太坊項目都是基于以太坊公鍊開發的,同時以太坊也可用于建構聯盟鍊和私有鍊。公鍊的特征是任何人都可以加入、讀取區塊鍊資料和發送交易,一般需要激勵機制來鼓勵記賬節點(挖礦);聯盟鍊是由若幹個機構或組織共同參與管理的區塊鍊,每個機構或組織都運作着一個或多個節點共同參與記賬;私有鍊的寫入權限由某一個組織或機構控制,參與節點的資格由該組織或機構嚴格限制。與公鍊的任何人都可以随時加入不同,未經許可的節點不可以加入到聯盟鍊和私有鍊,是以聯盟鍊和私有鍊又被稱為許可鍊,需要進行權限設計。許可鍊擁有更高的共識效率、更好的隐私保護和更強的安全性,能被更好地應用于金融、政務等領域。考慮到電子證照資料共享業務的安全性需求,本章以許可鍊的方式設計和搭建區塊鍊底層平台,并加入節點準入機制。任何參與區塊鍊的網絡節點都需要先完成身份注冊,通過驗證後,其數字身份才能被允許接入私有鍊網絡中參與交易,形成自主可控的底層區塊鍊平台。

具體來說,以類似會員制的方式實作一種區塊鍊節點的準入機制,通過會員制的注冊服務對區塊鍊參與者的身份和權限進行管理。區塊鍊網絡中的分布式記賬節點、資料共享方節點、查驗方節點、其他通路節點等,都需要事先完成節點注冊,以使其數字身份合法。特别的,分布式記賬節點作為區塊鍊底層平台的核心節點,由政府部門統一部署和維護,并有這些節點執行整個區塊鍊的共識記賬功能,其他參與節點無權成為分布式記賬節點。參與節點通過區塊鍊用戶端完成會員注冊後,系統會自動完成注冊節點公私鑰的配置設定,并生産合法的數字身份即交易位址。

1.4.3 以太坊的共識機制

通過共識機制,區塊鍊網絡能夠在決策權高度分散的去中心化分布式系統中讓各節點高效地針對區塊資料的有效性達成共識,完成新區塊的确認和記賬。區塊鍊上的典型共識算法有多種,如工作量證明(PoW)、權益證明(PoS)、代理權益證明(DPoS)、實用拜占庭将軍(PBFT)、驗證池(Pool)等。

最為常用的共識算法是比特币使用的PoW(Proof of Work)共識算法:首先收集網絡上廣播的交易封包資訊,驗證有效性,若合法則加入候選交易隊列,打包成區塊結構,并算出該區塊的Block Hash;然後通過不斷對随機數NOUNCE試錯并做哈希運算,直到Block Hash和NOUNCE合并後的哈希是由N個(N為目前難度)前導零構成;最後找到礦工目前看到的最長鍊,并将目前區塊的哈希、之前區塊的哈希、随機數添加到區塊的頭部,通過這種方式将剛剛得到的區塊連接配接到這個最長鍊的最後形成新的區塊。

PoW算法共識達成的周期較長,約10分鐘才能産生1個新區塊,不适合商業應用。是以随後又出現了很多效率更高的共識算法,例如PoS(Proof of Stake)共識。它本質上是采用權益證明來代替PoW中的基于哈希算力的工作量證明,由系統中具有最高權益而非最高算力的節點獲得區塊記賬權。權益展現為節點對特定數量貨币的所有權,稱為币齡或币天數(Coin days)。币齡是特定數量的币與其最後一次交易的時間長度的乘積,每次交易都将會消耗掉特定數量的币齡。PoS共識過程僅依靠内部币齡和權益而不需要消耗外部算力和資源,從根本上解決了PoW共識算力浪費的問題,并且能夠在一定程度上縮短達成共識的時間,因而比特币之後的許多競争币均采用PoS 共識機制。

DPoS(Delegated Proof of Stake)共識的基本思路類似于“董事會決策”,即系統中每個股東節點可以将其持有的股份權益作為選票授予一個代表,獲得票數最多且願意成為代表的前101個節點将進入“董事會”,按照既定的時間表輪流對交易進行打包結算并且簽署(即生産)一個新區塊。DPoS共識機制中每個節點都能自主決定其信任的授權節點且由這些節點輪流記賬生成新區塊,因而大幅減少了參與驗證和記賬的節點數量,可以實作快速共識驗證。

著名的R3聯盟超級賬本(Hyperledger)使用PBFT(Practical Byzantine Fault Tolerance)共識機制,通過運作3類基本協定(一緻性協定、檢查點協定和視圖更換協定)将拜占庭系統共同維護為一個狀态,使得所有節點采取的行動一緻。其優點是記賬節點有準入機制,系統有強一緻性和最終态,不會分叉;缺點是當有1/3或以上記賬人停止工作後,系統将無法提供服務。

驗證池(Pool)共識不需要依賴代币就可以工作,在成熟的分布式一緻性算法(Paxos、Raft)基礎之上,可以實作秒級共識驗證,更适用有多方參與的多中心商業模式。不過,Pool驗證池也存在一些不足,例如該共識機制能夠實作的分布式程度不如Pow機制等。

在以太坊中,新區塊的建立時間是12秒左右,而比特币是10分鐘。這意味着以太坊每12秒就有一個新的交易區塊産生,交易執行幾乎是即時的。以太坊使用了所謂的魔鬼協定(Ghost Protocol)來協調共識,并提供激勵機制讓網絡阻塞時間變得更為短暫。截至2017年12月,比特币的完整賬本大小約為180 GB,以太坊的完整賬本大小約為225 GB,但是運作以太坊節點隻需要20~30 GB的空間。以太坊雖然曾經使用PoW共識機制,但其采用的一緻性算法和比特币是不同的。2018年,以太坊改用了自己建立的PoS與PoW混合的共識機制—Casper投注共識,期待這種新的共識機制給以太坊注入新的活力。

1.4.4 以太坊虛拟機與智能合約

以太坊的核心元素是以太坊虛拟機(Ethereum Virtual Machine,EVM),它是智能合約的執行環境。EVM分散儲存在以太坊網絡的每個節點上,智能合約代碼被對外隔離,并分布在每個節點上執行,是以以太坊EVM又被稱為世界電腦。合同代碼不是用圖靈完備的進階程式語言編寫的,而是由簡單的、基于堆棧的低級程式語言編寫的,看起來就像JVM的位元組碼(Java虛拟機)。每個以太坊節點都運作EVM,這意味着對于以太坊網絡的參與者,每個節點都參與驗證新塊是否有效以及計算是否已正确,都是運作EVM代碼的獨立執行個體。由于每個節點都參與計算,雖然不一定是最高效的模型,但它具有很高的加密安全性。

從技術上講,EVM以狀态轉換作為函數的運作模式,其工作原理是将一串參數輸入EVM,以擷取整個以太坊網絡的新區塊狀态和gas數量,具體過程為輸入(block_state,gas,memory,transaction,message,code,stack,pc)→EVM→輸出(block_state,gas)。其中block_state是以太坊網絡的全局狀态,包括所有賬戶、賬戶餘額和長期存儲;gas是運作這些計算所需的費用,由計算的類型和工作量決定;memory是執行記憶體;transaction代表交易;message是有關交易的中繼資料;code就是代碼本身;stack和pc是與執行相關的堆棧和程式計數器。這一串參數被輸入到EVM以生成整個以太坊網絡的新block_state和賬戶擁有的新gas數量。

以太坊EVM的設計目标有5個:簡單、高效、确定性、專用化和安全性。EVM設計簡單,可以輕松證明智能合約的安全性,這也有助于保護平台本身。EVM元件盡可能緊湊,以提高空間效率。EVM具有确定性,即相同的輸入狀态應始終産生相同的輸出狀态。确定性的虛拟機必然會限制應用範圍,例如以太坊的HTTP請求不可用。EVM具有專用的内置函數,例如可以輕松處理20位元組位址加密的加密函數、用于自定義加密的子產品化指數算法、讀取區塊資料、讀取交易資料的函數,以及與block_state互動的函數。以太坊EVM的安全性在于每次計算都要預先消耗gas,這增加了DoS攻擊的成本,使得攻擊者無法發動大規模的無效合約。EVM的主要程式設計語言是Solidity,智能合約用Solidity寫好後,通過Solidity Compiler(solc)編譯并生成EVM代碼。合約語言的複雜性通過Solidity Compiler進行管理,但在架構層面,Solidity仍然是一種簡單的基于堆棧的語言。

智能合約是在以太坊EVM上自動執行的合約代碼,一般包括合約所有人、合約對象、合約條款、合約算法、合約觸發條件等内容。對于可信電子證照應用,資料共享規則被轉換為智能合約并部署在區塊鍊上之後,正常共享條款和違約處理條款就可以自動履行,且執行過程由區塊鍊完整記錄,其執行狀态可被随時檢視和審計,進而提供一個公平、公正、公開的合約執行環境。此外,通過智能合約還可對參與方身份進行權限檢查,針對交易者身份進行通路控制。

用智能合約完成可信電子證照應用的注冊、發證、查驗等過程,具體包括5個主要功能子產品和5個API。5個主要功能子產品為公民使用者App、發證機構前端、區塊鍊平台、政府業務庫和背景身份管理資料庫;5個API包括注冊區塊鍊使用者、發送制證資訊、查驗電子證照資訊、查詢使用者公鑰和查詢電子證明資訊,具體分析如下所示。

1. 注冊區塊鍊使用者

用于新使用者注冊區塊鍊資訊管理賬戶。對于業務系統新增賬號來說分為3個不同的角色:普通使用者、制證機關使用者、查驗機構使用者。

輸入:賬戶名稱(用于登入系統的ID)。

輸出:賬戶位址(注冊使用者在區塊鍊上的位址,用于使用者之間傳輸資訊)和賬戶公私鑰(普通使用者的公私鑰用于使用者證件資訊的加解密,制證機關使用者的公私鑰用于對發證機構的數字簽名進行驗證,查驗機構使用者的公私鑰用于對查驗資訊的加解密)。

2. 發送制證資訊

用于制證機構使用者存儲新增證件資訊以及發送給辦證使用者。以制證機構使用者在區塊鍊上給辦證使用者發送一筆交易為載體,把新增的證件資訊儲存在區塊鍊上,并發送給辦證使用者。

輸入:申請制證使用者的區塊鍊位址(發證機構制證後給該位址使用者發送制證資訊)、發證機構組織機構代碼(發證機構的唯一标示)、申請制證使用者的證件資訊(需要使用者公鑰加密)。

輸出:該筆交易的Hash值(交易資訊位址唯一辨別)、記錄證件資訊的區塊編号(交易資訊位址唯一辨別)。

3. 查驗電子證照資訊

用于普通使用者向查驗機構發送證照資訊。以普通使用者在區塊鍊上給查驗使用者發送一筆交易為載體,把電子證照資訊發送給查驗使用者。

輸入:查驗使用者的區塊鍊位址(普通使用者的電子證照資訊)、發證機構組織機構代碼(發證機構的唯一标示)、被查驗普通使用者的證件資訊(需要查驗使用者公鑰加密)。

4. 查詢使用者公鑰

根據區塊鍊交易位址查詢對應的公鑰資訊,用于普通使用者同步賬戶時擷取制證機關使用者的公鑰資訊來驗證制證資訊的數字簽名。

輸入:位址資訊。

輸出:公鑰資訊。

5. 查詢電子證照資訊

根據區塊數以及交易Hash查詢電子證照資訊,用于普通使用者更新電子證照資訊,或者普通使用者的新移動裝置同步電子證照資訊,以及查驗方查詢普通使用者的電子證照資訊。

輸入: 使用者區塊鍊交易位址(指定查找的交易位址)、記錄交易資訊的區塊數(指定查找的區塊)、記錄電子證照的交易Hash(指定查找的交易)。

輸出:制證機構組織機構代碼(擷取發證機構資訊)、電子證照資訊(擷取電子證照具體資訊)。

1.4.5 基于區塊鍊的資料安全共享

1. 電子證照資料的存儲與接入

由于區塊鍊是一個共享的賬本,為了保證電子證照資料的私密性,共享資料不會直接存儲在區塊鍊上,而是通過智能合約将其錨定為區塊鍊上的數字資産。當以資料庫方式提供時,将政府業務庫中共享的資料同步一份到其前置機的ODS中後,再将該部分共享資料在ODS中的通路資訊加密後作為數字資産的中繼資料;當以資料檔案方式提供時,是将政府業務庫中可共享的資料經過加密後,寫到ODS的檔案系統中,形成一個共享資料檔案,再将該共享資料檔案的完整性哈希值作為數字資産的中繼資料存儲在區塊鍊上,而共享資料檔案本身依然存儲在政府業務庫前置機的ODS中。

其中,數字資産包括頭資訊和數字資産中繼資料兩部分,具體分析如下。

(1)頭資訊:包括版本号、資料類型、雜湊演算法。其中,版本号表示數字資産解析标準使用的版本的編号;資料類型表示數字資産是非結構化資料(檔案存儲方式)還是結構化資料(資料庫存儲方式);雜湊演算法表示計算檔案完整性所采用的雜湊演算法,如MD5、SHA1、SHA256、SHA3等,當資料類型為非結構化資料時該字段才生效。

(2)數字資産中繼資料:如果共享資料為結構化資料,則數字資産中繼資料表示政府業務系統前置機ODS的通路接口資訊的加密字元串;如果共享資料為非結構化資料,則數字資産中繼資料表示共享資料檔案的完整性哈希值。即,結構化資料的數字資産為:版本号+資料類型+數字資産中繼資料;非結構化資料的數字資産為:版本号+資料類型+雜湊演算法+數字資産中繼資料。

資料共享方通過區塊鍊用戶端釋出數字資産時,數字資産被記錄在交易負載中後送出到預置智能合約,實作數字資産的釋出。

可信電子證照實際上是采用一種鍊上鍊下相結合的存儲方式,以此來實作共享資料的存儲與接入,并能保障資料在存儲上的私密性和區塊鍊的存儲效率。這樣做的好處是,在區塊鍊的持續記賬過程中,可防止區塊鍊的鍊上資料過度膨脹,保障交易效率。具體而言,對占用空間較小的文本資料直接采用鍊上存儲,對占用空間較大的資料或者檔案則将通路這類資料的中繼資料資訊采用鍊上存儲,檔案本身采用鍊下存儲。鍊下存儲可以是任意網絡檔案系統、檔案連結、點對點分布式檔案系統等,如IPFS等。

2. 共享資料注冊與釋出

區塊鍊通過将共享資料轉化為數字資産,再通過智能合約來對共享資料即數字資産在區塊鍊上進行注冊與釋出。釋出數字資産的智能合約由政府業務系統提供,并由政府業務系統通過其前置終端部署在區塊鍊上。智能合約部署完成後,其合約的内容可被區塊鍊中所有參與方共享和檢視,但智能合約的所有者隻有一個,即該智能合約的部署者也即政府業務系統。通過智能合約,政府業務系統可以友善地實作鍊下共享資料與鍊上數字資産的關聯。

基于智能合約實作數字資産的注冊與釋出,智能合約的所有者即為該數字資産的所有者,以此來明晰數字資産的所有權。智能合約的每次觸發執行均會對觸發消息的發送者做一次使用者權限檢查,隻有數字資産擁有者即智能合約的所有者才有權更改智能合約的共享規則,甚至轉移數字資産的所有權。

此外,數字資産所有者可以在智能合約中預先設定一個可授權數字身份清單,列出具有共享數字資産擷取權限的需求方,并維護該清單。智能合約在執行時會比對請求者身份,隻有清單中的數字身份才能通過智能合約來請求共享資料。

圖1-12所示以出生醫學證為例,給出了電子證照資料共享的流程和部署架構。其中市民的出生醫學證明資料存儲于政府内網的業務系統,通過前置終端将經過Hash運算和電子簽名的某個市民的資料發送給他本人,并在區塊鍊上儲存為電子證件。出生醫學證明聯盟鍊位于政府部門内外網的隔離區,查驗終端通過專用通道通路鍊上資料完成電子證照的查驗,以此做到使用者隻擁有本人資料的通路權限,提高資料的安全性與私密性。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

3. 全局共享資料資源目錄

區塊鍊用戶端通過掃描區塊鍊的方式,擷取區塊鍊上已認證智能合約注冊并釋出的數字資産,以形成一個全局的共享資料資源目錄。查驗方通過其區塊鍊用戶端中的全局共享資料資源目錄,可以友善地查找所需的資料資源,擷取相應的智能合約規則,并發送資料共享請求。

全局共享資料資源目錄是一個公開的目錄。在區塊鍊上,雖然所有的參與者都能檢視到有哪些資料被共享,并擷取對應的智能合約内容,但智能合約保證了隻有被授權的和符合權限觸發規則的查驗方才能觸發資料共享流程的執行,智能合約在這裡起到了通路控制的功能。

4. 資料安全共享執行流程

在區塊鍊上綜合使用數字簽名、加密算法、權限管理、通路控制等技術手段,對電子證照資料共享過程進行安全防護,保障資料不被洩露,同時提供可信的共享全過程的流程記錄。智能合約一旦擷取到正确的需求方共享請求後,會自動遷移到等待共享方傳回請求确認狀态,以及等待共享方傳回完成确認狀态。當出現狀态逾時或者其他異常時,智能合約均會進入預先設定的相應的處理流程,以保障共享過程的完整性。在整個過程中,區塊鍊中的每一次交易送出,都需要有發送者的數字簽名,智能合約可基于此判定雙方的數字身份,實作權限控制。

5. 全流程周期的共享管理

在管理上,可信電子證照利用區塊鍊在資料防篡改方面的特性,打通了電子證照共享資料的存儲、共享、管理等環節,保證了資料共享在事前、事中、事後全流程周期的可審計,保證流程可追溯。同時,由于區塊鍊上所有交易驗證,都需要有發送者的數字簽名來保障,是以就在參與者之間建立了身份的信任關系。

1.4.6 搭建及部署以太坊私有鍊

如1.4.2節提到的,可信電子證照采用許可鍊作為區塊鍊技術底層。許可鍊分為聯盟鍊和私有鍊兩種,為簡單起見,本節将以私有鍊為例,讨論如何搭建并部署一條屬于自己的以太坊私有鍊。

考慮到便捷性,我們提供私有鍊底層平台的部署腳本,基于該腳本可實作私有鍊的自動化快速部署。在環境準備方面,私有鍊平台部署在政府内網,區塊鍊節點運作于若幹PC Server,在IP層保證區塊鍊節點間的互聯互通。

□測試環境 :3台全節點伺服器(虛拟機)。

□伺服器系統:centos 6.8。

□伺服器性能:4核,8GB記憶體。

□以太坊用戶端:geth(Go語言版本的用戶端,如圖1-13所示)。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

搭建及部署以太坊私有鍊的具體步驟如下。

第一步:部署主節點,在該節點上生成創世區塊。

首先,通過制定的參數配置,在控制台啟動geth服務,如圖1-14中方框部分所示。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

在圖1-14中,通過參數console啟動一個帶指令行的geth服務。接着,通過帶有指令行的geth服務,注冊一個新使用者。

□personal.newAccount("test1234”):注冊新使用者的web3接口。

□0xfc3147e7d648b3513f3fbad853ddc242e7f003ba:注冊成功後為新使用者生成的位址address,對于以太坊來說也是公鑰,記住這個位址,在配置創世節點的時候需要。

新使用者建立成功後,輸入指令 “exit” 退出服務,如果不退出,geth服務會自動同步公鍊區塊,搭建私有鍊則不需要同步以太坊公鍊。

然後,通過創世節點配置配置檔案(genesis.json),初始化創世節點。初始化配置檔案内容如下:

{

"alloc": {

"0xfc3147e7d648b3513f3fbad853ddc242e7f003ba": {     //創世節點的初始使用者位址,我們剛建立的使用者位址   
  "balance": “1000000000000000000000000000000” //初始化賬戶的以太币,1(eth) = 1^18(wei) (eth為以太币的基本機關, wei為以太币的最小機關)
}           

},

"nonce": "0x0000000000000042”, //随機數,用于挖礦,詳細資訊可以參考以太坊黃皮書

"difficulty": "0x020000”, //設定區塊挖礦複雜度,設定太高,産出區塊的速度會比較慢,設定太低,産出垃圾區塊(分叉)的機率會比較高

"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000”, // 與nonce一起配合用于挖礦,詳細資訊可以參考以太坊黃皮書

"coinbase": "0x0000000000000000000000000000000000000000”, // coninbase位址

"timestamp": "0x00”, //時間戳

"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000”, //創世區塊父區塊的位址,由于是創世區塊,沒有父區塊,是以為0

"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa”, //備注資訊

"gasLimit": “0x4c4b40” // 設定gas的消耗總量限制,用于限制區塊能包含交易的資訊綜合,這裡我們用于私鍊測試開發,是以填最大值

}

擷取創世節點配置檔案的參數以後,通過指令來初始化創世節點:

geth --datadir data init genesis.json            

運作上述指令後會看到圖1-15所示的界面。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

至此,創世節點的初始化就完成了,現在我們來啟動創世節點:

geth --datadir data --mine --etherbase 0 --minerthreads 2 --port 30303 --rpc --rpcapi "db,eth,net,web3,personal" --rpcaddr 10..129. --rpccorsdomain “*” console

運作上述指令後會看到圖1-16所示的界面。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

注意,需要記住圖1-16所示方框中的資訊,後面需要在從節點添加監聽位址來同步主節點的區塊。

我們的創世區塊的主節點已經啟動了。可以檢視創世節點的一些資訊,如圖1-17所示。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

在圖1-17所示指令中,指令含義分析如下所示。

eth.accounts :檢視目前geth服務下的賬戶清單;

eth.getBalacne(“0xfc3147e7d648b3513f3fbad853ddc242e7f003ba”) :查詢指定賬戶的餘額資訊,機關為wei。

至此,我們的創世節點已經成功啟動了。

啟動指令的參數如表1-1所示。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

第二步:部署從節點,并且同步主節點的區塊資訊。

首先,把主節點服務上的genesis.json複制到從節點伺服器,并初始化節點:

geth --datadir data init genesis.json            

運作上述指令,會看到如圖1-18所示的界面。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

然後,啟動從節點geth服務:

geth --datadir data console

從服務啟動成功,服務啟動後的顯示資訊與主服務的類似。

接着,在從伺服器上建立賬戶,與主服務建立賬戶相同:

personal.newAccount(?234test?;

“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs”

為了從服務添加對主服務的監聽,在從服務的geth服務控制台輸入如下指令:

admin.addPeer(“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”);

此時主從服務就可以互相同步區塊了。

添加創世節點的監聽端口有如下3種方式。

(1)在geth服務控制台使用如下指令:

admin.addPeer(“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”);

(2)在geth啟動參數設定,使用參數--bootbodes:

“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”

(3)使用配置檔案,添加檔案/static-nodes.json :

[

"enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303",

]

最後我們要讓主從服務的礦工工作了,目前該私有鍊的以太币隻能依靠礦工挖礦來産出。分别在主從節點的geth控制台輸入以下指令:

personal.unlockAccount(“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs”);

分别在對應的伺服器上填入對應的礦工使用者位址,即剛注冊的使用者的位址。這時,控制台需要我們輸入注冊時位址對應的使用者名(也就是注冊新使用者時設定的test1234)。

然後,使用miner.start(2) 指令開始挖礦,這裡需要設定cpu使用的個數。看到圖1-19所示的提示就說明已經開始挖礦了。之後可以使用miner.stop()指令來停止挖礦。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

至此,我們已經搭建好兩個全節點的區塊鍊服務了。可以使用腳本來啟動geth服務,而不需要在geth控制台中啟動相關服務。

建立geth.sh腳本:

geth --datadir /data/Ethereum/data --port 30303 --bootnodes "enode://b70d74575119486999877d08f07aa2e9cb4aa908

f78d3e58d91e19eb790a3723f8aedc25fd9823aa0e7cc2c4ca54c431ab785211cb111aa9c28461ca72adb67f@10.51.110.19:30303" --mine

--minerthreads 2 --nat "extip:10.51.110.21" --rpc --rpcapi "db,eth,net,web3,personal" --rpcaddr 10.51.110.21 --rpc

corsdomain “*” console

腳本啟用服務以後,可以通過curl指令來調用geth服務的json-rpc接口(rpc服務的位址就是啟動指令--rpcaddr設定的位址,服務端口預設為8545),例如:

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":[“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs", "latest"],"id":1}’ 10.51.110.21:8545

1.5 應用與實踐

本章讨論的基于區塊鍊的可信電子證照原型系統在中關村區塊鍊産業聯盟試點推廣的過程中,獲得了175萬的網絡投票和1萬多條使用者評論,吸引了極大的社會關注度,具體可見中關村區塊鍊産業聯盟官方網站

http://www.cyberledger.org/dasai/

圖1-20是可信電子證照的運作截圖,其中圖1-20a所示為持證人的所有證照一覽;圖1-20b所示為證照二維碼,包含該證件在區塊鍊上的業務資訊、區塊号、區塊位址、交易位址等資料,查證人可通過掃描該二維碼擷取持證人在區塊鍊上的證照資訊;圖1-20c所示為電子證件的原件,其中包含有發證機構的簽名以及證照二維碼;圖1-20d所示是用證和查證記錄的通知推送。可信電子證照将使用者的發證、查證、用證資訊儲存在區塊鍊上,不可篡改,可追溯性強,可以避免身份僞造和冒用。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章
帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

1.6 商業模式

1.6.1 市場空間及潛力

目前市場上還沒有完善的存證鍊服務。身份驗證、學曆驗證等都是某一類證照的查驗服務,無法形成個人、企業、組織的完整信用資料體系。

區塊鍊技術為政府、第三方機構的存證服務提供統一可信的服務平台,形成完整的存證服務鍊條,積累大量的信用資料,建構誠實可信的信用平台,為政府、金融機構、商業企業、社會組織提供信用服務,市場潛力巨大。

1.6.2 商業模式

我們可以采取與政府及第三方機構合作營運的方式(見圖1-21),由其提供證照業務資料,并在電子證照平台上發證;服務民生,為公衆使用者提供免費的存證服務,發展活躍使用者;對于有查驗需求的商業機構及社會組織,則按次數或流量收費,提供有償存證服務。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

1.6.3 應用前景

1. 實作公衆辦證“零跑動”

目前各行政機關在辦理或稽核相應證件時,仍然以紙質證件資訊為主,易造成證照材料損壞、丢失,并且群眾在辦理相關業務時,經常由于缺少某些材料而導緻數次往返。電子證照的産生可以從根本上解決目前政務活動中群眾多次往返、反複送出紙質材料的頑疾,群眾主動申請獲得電子證照,紙質證照審批後可以生成電子的電子證照,因其以二維碼的形式存儲于手機中,友善攜帶和使用,可以實作證照的無紙化審批,減少了紙質證照的使用,降低了社會成本與資源浪費,緩解了證件多、用證煩等證照亂象,如圖1-22所示。

2. 智慧政務

電子證照建設在不改變政府現有管理模式及制度的前提下,通過系統建構了業務部門之間的聯系,實作了申請、查證、驗證、用證的全程電子化管理,簡化了政府流程服務,符合珠海市提出的推進資訊化建設和應用以達到深化行政審批制度改革的目的,對推進珠海市電子政務發展起到了積極的作用,電子政務也将成為智慧城市發展的重要組成部分,在城市發展過程中,政府依托電子政務,在其管轄範圍最大限度發揮職能效能,創造更加智慧的城市環境。因電子證照系統可以提升政府部門行政服務效率,故其也會推動政府智慧轉型,向着為民、務實、廉潔、高效的服務型政府轉變。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章

傳統的證件驗證工作煩瑣,行政從業人員要投入大量精力進行人工檢查,既費時又費力,這種非資訊技術手段的工作模式使得行政從業人員無法快速響應群眾的多重需求。電子證照系統的建設将改變這一現狀,證照電子化可以對列入電子證照服務目錄的證照材料實行機器自動查驗,減少了人工檢查,這樣降低了行政成本,提高了政府原有體系的行政服務效率,也會提升行政服務機關在群眾心目中的滿意水準,如圖1-23所示。

3. 商務應用,助力誠信社會

虛假證照因其制作成本低廉、利潤高等原因而屢禁不止,假證擾亂了社會秩序,損害了社會誠信,也給行政審批工作帶來了不必要的麻煩。假證的危害很多,是以保證證件的真實性尤為重要,電子證照因其多重加密,并且要配合身份證明資訊共同使用等因素,大大提升其安全性,僞造電子證照的機率被降到了最低,保障了證照的真實性,也維護了證照持有人的權益。電子證照通過資訊技術手段有力地加強了社會誠信建設,符合十八屆四中全會《中共中央關于全面推進依法治國若幹重大問題的決定》中對信用工作的要求。圖1-24所示是将區塊鍊在商務應用的一個場景:企業招投标。傳統的競标方式是由企業代表通過向招投标中心遞交企業營業執照、完稅、社保證明、資質證明等一系列證件完成企業身份和資質驗證,然後再參與投标。在這個過程中需要招投标中心、投标企業反複驗證這些證件,安全系數相對較低,重複查驗效率也很低下;如果應用了區塊鍊電子證照,隻需要由企業代表出示企業證件二維碼,授權招投标中心在區塊鍊上線上查驗并永久儲存查驗結果,一次查驗可反複使用,安全系數高,查驗效率也将大大提高。

帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章
帶你讀《區塊鍊工程實踐 行業解決方案與關鍵技術》之一:基于區塊鍊的可信電子證照第1章