摘 要:在Linux環(huán)境下使用Hyperledger Fabric官方提供的軟件開發(fā)工具包設(shè)計(jì)實(shí)現(xiàn)了高校學(xué)生檔案管理系統(tǒng)。首先在Fabric網(wǎng)絡(luò)中創(chuàng)建通道,搭建相關(guān)人員組成的系統(tǒng)結(jié)構(gòu),然后編寫智能合約,通過業(yè)務(wù)層調(diào)用智能合約實(shí)現(xiàn)客戶端的功能,最后設(shè)計(jì)Web界面,實(shí)現(xiàn)了學(xué)生檔案信息的錄入、查詢、修改功能。本系統(tǒng)為高校學(xué)生檔案提供了分布式的管理方案,避免了集中式管理帶來的安全問題,且通過區(qū)塊鏈中的各類密碼學(xué)方法,保證了數(shù)據(jù)的存儲安全和訪問安全,且能永久保存學(xué)生檔案信息的修改記錄,營造了安全的使用環(huán)境。
關(guān)鍵詞:聯(lián)盟鏈;區(qū)塊鏈;檔案管理
中圖分類號:TP315
基金項(xiàng)目:甘肅省高等學(xué)校創(chuàng)新基金項(xiàng)目“基于區(qū)塊鏈的高校數(shù)字檔案訪問控制方法研究”(2020A-117)。
1 引言
高校學(xué)生檔案信息作為學(xué)生在校期間學(xué)習(xí)生活的證明材料,記錄了學(xué)生選修的課程及成績、參加的社團(tuán)、受到的獎(jiǎng)勵(lì)懲罰情況、參與的各類社會實(shí)踐活動(dòng)、校外培訓(xùn)經(jīng)歷及考取的各類證書等[1]。隨著高校學(xué)生人數(shù)的不斷增多,學(xué)生的檔案管理也面臨諸多問題,如學(xué)生檔案的添加和查詢過程繁瑣,數(shù)字檔案管理系統(tǒng)用戶的使用權(quán)限分配方式不能適應(yīng)動(dòng)態(tài)的需求,檔案數(shù)據(jù)的集中管理造成服務(wù)器負(fù)載過重,且集中式的管理面臨單點(diǎn)故障,一旦服務(wù)器被惡意節(jié)點(diǎn)攻擊,進(jìn)而刪除或篡改了檔案信息,就會造成無法挽回的損失[2]。為了解決集中式檔案管理帶來的各種安全隱患,檔案的分布式存儲和管理成為了人們研究的熱點(diǎn)[3-4]。近年來興起的區(qū)塊鏈技術(shù)正是一種分布式的數(shù)據(jù)管理模式。區(qū)塊鏈?zhǔn)且粋€(gè)分布式的數(shù)據(jù)庫,數(shù)據(jù)存儲在區(qū)塊中,區(qū)塊和區(qū)塊之間通過指針鏈接,后一個(gè)區(qū)塊中記錄前一個(gè)區(qū)塊的地址和哈希值。區(qū)塊鏈系統(tǒng)中的每個(gè)節(jié)點(diǎn)都存儲完整的賬本,惡意節(jié)點(diǎn)如果要篡改某個(gè)節(jié)點(diǎn)中的賬本數(shù)據(jù),會使該節(jié)點(diǎn)的賬本與其余節(jié)點(diǎn)不一致,在這種情況下,該節(jié)點(diǎn)會重新將系統(tǒng)中被大部分節(jié)點(diǎn)認(rèn)可的賬本同步到本地,進(jìn)而阻止篡改行為的實(shí)施;對于賬本數(shù)據(jù)的修改也會被當(dāng)成交易記錄存儲在下一區(qū)塊中[5]。區(qū)塊鏈的這些特點(diǎn)使其具有防篡改、可追溯、公開透明等特點(diǎn),能夠很好解決集中式檔案管理系統(tǒng)存在的諸多問題。然而,比特幣中的區(qū)塊鏈技術(shù)是一種公共區(qū)塊鏈技術(shù),即任意節(jié)點(diǎn)均可加入該區(qū)塊鏈系統(tǒng),而無須經(jīng)過許可。這會造成區(qū)塊鏈系統(tǒng)節(jié)點(diǎn)過多,可擴(kuò)展性差,如比特幣系統(tǒng)龐大的賬本數(shù)據(jù),阻礙了存儲資源受限的用戶加入比特幣系統(tǒng),另外,所有的交易記錄均透明地存儲在區(qū)塊鏈中,所有用戶均可查詢,存在用戶隱私泄露的風(fēng)險(xiǎn)。而高校學(xué)生檔案管理系統(tǒng)的用戶有相對固定的分類,如:學(xué)生用戶、高校檔案管理人員、招聘企業(yè)、政府管理機(jī)構(gòu)工作人員等,各類用戶必須經(jīng)過身份驗(yàn)證,才可對系統(tǒng)中的數(shù)據(jù)進(jìn)行查詢和修改。因此,公共區(qū)塊鏈不適用于高校學(xué)生檔案管理系統(tǒng)。在公共區(qū)塊鏈系統(tǒng)中增加了用戶權(quán)限管理的區(qū)塊鏈系統(tǒng)稱為許可鏈,即參與到區(qū)塊鏈系統(tǒng)中的每個(gè)節(jié)點(diǎn)都是經(jīng)過授權(quán)的,不允許未經(jīng)許可的節(jié)點(diǎn)接入系統(tǒng)。許可鏈通過限制用戶身份,一方面保障了系統(tǒng)的性能,另一方面提高了用戶的隱私保護(hù)級別。許可鏈可分為私有鏈和聯(lián)盟鏈,高校學(xué)生檔案系統(tǒng)的用戶類別不同,因此,選用聯(lián)盟鏈的形式更符合實(shí)際需求。由IBM公司開發(fā)的聯(lián)盟區(qū)塊鏈框架Hyperledger Fabric,是目前最優(yōu)秀的企業(yè)級的聯(lián)盟鏈實(shí)現(xiàn)架構(gòu)之一,因此,文章設(shè)計(jì)開發(fā)了基于Hyperledger Fabric的高校學(xué)生檔案管理系統(tǒng),以期能為高校學(xué)生檔案管理提供更多的便利。
2 Hyperledger Fabric技術(shù)
Hyperledger Fabric是區(qū)塊鏈技術(shù)的一個(gè)具體實(shí)現(xiàn),用戶可以在其上通過多種語言(Nodejs、go、Java)編寫自己的智能合約,實(shí)現(xiàn)不同的區(qū)塊鏈應(yīng)用[6]。Hyperledger Fabric中共有4類不同的節(jié)點(diǎn),介紹如下:
(1)用戶節(jié)點(diǎn)(Client)。Client節(jié)點(diǎn)的作用是向區(qū)塊鏈系統(tǒng)提交交易提案。首先將提案提交給所有的背書節(jié)點(diǎn),背書接收到提案請求后會對提案進(jìn)行驗(yàn)證,驗(yàn)證通過后向Client節(jié)點(diǎn)發(fā)送確認(rèn)背書消息,當(dāng)Client節(jié)點(diǎn)收集到足夠的背書消息后,即可向排序節(jié)點(diǎn)發(fā)送交易提案。
(2)對等節(jié)點(diǎn)(Peer)。所有Peer都會行使記賬功能,即驗(yàn)證交易,保存賬本,這是區(qū)塊鏈系統(tǒng)中節(jié)點(diǎn)最基本的功能。部分Peer節(jié)點(diǎn)擁有背書的功能,即對Client節(jié)點(diǎn)提交的交易背書,具體哪些Peer可以背書,是由鏈碼確定的。每個(gè)組織中還有一個(gè)Peer充當(dāng)代表,與其他組織進(jìn)行信息交互,代表身份的確定是由配置文件制定。
(3)排序節(jié)點(diǎn)(Orderer)。Orderer節(jié)點(diǎn)接收經(jīng)過背書的提案,并對所有提案進(jìn)行排序,將排序結(jié)果發(fā)送給Peer節(jié)點(diǎn)。
(4)證書管理中心(CA)。CA接收用戶的注冊申請,驗(yàn)證用戶身份,并為驗(yàn)證通過的用戶頒發(fā)證書。
通過以上角色分析可知,Hyperledger Fabric中的共識過程包括3步,即背書、排序和驗(yàn)證。系統(tǒng)中所有用戶各司其職,共同管理一筆交易,實(shí)現(xiàn)了交易數(shù)據(jù)的公開透明存儲。為了實(shí)現(xiàn)不同的用戶權(quán)限管理,在Hyperledger Fabric中,允許用戶建立不同的通道,數(shù)據(jù)只在通道內(nèi)部公開,通道外部的用戶無法獲取通道內(nèi)部的數(shù)據(jù),保證了用戶的隱私安全。
Hyperledger Fabric目前支持兩種狀態(tài)數(shù)據(jù)庫:即LevelDB和CouchDB,LevelDB 是嵌入在 Peer 中的默認(rèn)鍵值對狀態(tài)數(shù)據(jù)庫。CouchDB 是一種可選的替代 levelDB 的狀態(tài)數(shù)據(jù)庫,它不僅可以根據(jù) key 值進(jìn)行相應(yīng)的查詢,還可以根據(jù)應(yīng)用場景的需求實(shí)現(xiàn)復(fù)雜的查詢功能。因此,選用CouchDB數(shù)據(jù)庫,來實(shí)現(xiàn)高校學(xué)生檔案管理系統(tǒng)中各類查詢請求。
3 系統(tǒng)的設(shè)計(jì)
3.1 用戶分類
根據(jù)高校學(xué)生檔案管理的實(shí)際情況,結(jié)合已有文獻(xiàn)資料[7],可將系統(tǒng)的用戶分為以下幾類:
(1)學(xué)生用戶:即檔案所有者,注冊通過后可以根據(jù)本人的身份證號或姓名查詢檔案信息,但不能修改信息,可以向系統(tǒng)管理員提交修改申請,申請通過后,由系統(tǒng)管理員負(fù)責(zé)修改。
(2)系統(tǒng)管理員:一般是高校指定的檔案管理人員,擁有最高的權(quán)限,通過各種方式查詢檔案信息,審核用戶的注冊請求,進(jìn)行檔案信息的添加、修改,但需提交教育管理部門審核后才可完成。
(3)教育管理部門:查詢檔案信息,對檔案的添加和修改請求進(jìn)行審核,但不能添加和修改檔案信息。
(4)培訓(xùn)單位:注冊通過后可以向系統(tǒng)管理員提交申請?zhí)砑訉W(xué)生培訓(xùn)經(jīng)歷的請求,系統(tǒng)管理員通過審核后即可將數(shù)據(jù)添加至賬本數(shù)據(jù)庫。
(5)企業(yè)用戶:可以查詢學(xué)生的學(xué)歷學(xué)位信息和獎(jiǎng)懲信息,為企業(yè)初步篩選人才,提高招聘效率。
3.2 系統(tǒng)的功能
基于聯(lián)盟區(qū)塊鏈的高校學(xué)生檔案管理系統(tǒng)的業(yè)務(wù)流程包括用戶注冊登錄、檔案錄入、檔案修改、檔案查詢等操作,具體介紹如下。
(1)注冊登錄功能。
1)有權(quán)限的用戶才能登錄系統(tǒng)進(jìn)行相應(yīng)操作,首次使用系統(tǒng)的用戶注冊后方可獲得用戶名和密碼;
2)用戶填寫相關(guān)信息,即用戶名和密碼,通過驗(yàn)證后進(jìn)入系統(tǒng)。
(2)檔案錄入。若用戶擁有管理員權(quán)限,則其索引界面有增加學(xué)生檔案的按鍵,點(diǎn)擊后需按要求輸入信息,系統(tǒng)將檔案信息寫入后臺數(shù)據(jù)庫,此時(shí)產(chǎn)生新的交易記錄。添加檔案信息的流程如下:
1)管理員用戶點(diǎn)擊添加檔案信息進(jìn)入添加頁面;
2)按要求輸入學(xué)生相關(guān)信息;
3)點(diǎn)擊提交按鈕后,若所有輸入均通過正則表達(dá)式的驗(yàn)證,系統(tǒng)將信息寫入數(shù)據(jù)庫,不符合規(guī)范,則提示管理員重新輸入。
(3)檔案修改。同檔案錄入一樣,管理員擁有修改權(quán)限。修改檔案信息的流程如下:
1)管理員用戶點(diǎn)擊進(jìn)入學(xué)生信息修改頁面;
2)對已有信息進(jìn)行修改,編輯完成后點(diǎn)擊提交修改按鈕;
3)若所有輸入均通過正則表達(dá)式的驗(yàn)證,系統(tǒng)將在數(shù)據(jù)庫中用新的信息覆蓋舊信息,但是會同時(shí)將修改記錄存儲在區(qū)塊鏈中。
(4)查詢功能。所有用戶均可查詢信息,不同的用戶可瀏覽的信息不同。系統(tǒng)根據(jù)用戶的查詢關(guān)鍵字(如按身份證號、專業(yè)查詢)在數(shù)據(jù)庫中查找,若找到則根據(jù)用戶身份類別返回相對應(yīng)信息,若未找到則提示用戶查詢失敗。
3.3 檔案信息數(shù)據(jù)表的設(shè)計(jì)
本設(shè)計(jì)中檔案信息表主要有學(xué)生姓名、性別、學(xué)號、身份證號、出生日期、所學(xué)專業(yè)、成績、畢業(yè)論文等級、教師評語、獎(jiǎng)懲信息、培訓(xùn)經(jīng)歷、考取的證書等,字段名稱及類型見表1。
3.4 聯(lián)盟鏈的業(yè)務(wù)流程設(shè)計(jì)
首先需要搭建Hyperledger Fabric網(wǎng)絡(luò),然后通過使用鏈碼相關(guān)的應(yīng)用程序接口(API)編寫鏈碼,定義需要的查找方式,完成增加、修改、用戶身份驗(yàn)證、通道的設(shè)計(jì)等相關(guān)功能。在鏈碼主文件編寫完成之后,使用Fabric-SDK-Go提供的API對鏈碼進(jìn)行安裝并實(shí)例化。業(yè)務(wù)層的設(shè)計(jì),包括接收前端頁面采集到用戶交互信息和用戶輸入的檔案信息,并提交到相應(yīng)的數(shù)據(jù)處理模塊,數(shù)據(jù)處理模塊通過調(diào)用鏈碼來實(shí)現(xiàn)對應(yīng)操作。本系統(tǒng)選用Golang語言提供的Web服務(wù)器來設(shè)計(jì)實(shí)現(xiàn)系統(tǒng)的前端交互頁面,實(shí)現(xiàn)用戶友好的人機(jī)界面。
4 系統(tǒng)的實(shí)現(xiàn)
4.1 實(shí)驗(yàn)環(huán)境
本系統(tǒng)選用目前較為穩(wěn)定的Hyperledger Fabric 1.2版本,Docker的版本是docker-ce-18.09,所用的系統(tǒng)其他配置環(huán)境及軟件版本見表2。
基于聯(lián)盟區(qū)塊鏈的系統(tǒng)流程描述如下:
(1)初始化Fabric SDK并對其進(jìn)行實(shí)例化;
(2)創(chuàng)建通道;
(3)將指定的Peers加入通道中并實(shí)例化組織的MSP客戶端;
(4)配置鏈碼文件的位置,安裝并實(shí)例化鏈碼程序;
(5)根據(jù)通道配置文件,創(chuàng)建通道的客戶端。
4.2 系統(tǒng)模塊設(shè)置
在Hypeledger Fabric中,系統(tǒng)功能主要通過編寫鏈碼層的代碼來實(shí)現(xiàn),鏈碼層是檔案管理系統(tǒng)各類用戶和聯(lián)盟區(qū)塊鏈系統(tǒng)的接口。首先需要導(dǎo)入Fabric提供的系統(tǒng)功能包,然后編寫鏈碼程序,完成之后將鏈碼程序打包放入文件夾內(nèi),該文件夾內(nèi)的程序能通過調(diào)用Fabric-SDK-Go來實(shí)現(xiàn)對數(shù)據(jù)庫的操作,具體的文件信息見表3。
業(yè)務(wù)層通過相關(guān)API調(diào)用鏈碼的方法,來實(shí)現(xiàn)對數(shù)據(jù)庫的各種操作,業(yè)務(wù)層主要包含兩個(gè)文件,分別是domain.go和eduService.go,其中domain.go用來實(shí)現(xiàn)鏈碼端和業(yè)務(wù)層的交互,注冊并調(diào)用業(yè)務(wù)事件,eduService.go用來通過Fabric SDK來定義CouchDB數(shù)據(jù)庫操作,包括保存信息(SaveEdu),查詢信息(FindEdu)等模塊,其中,查詢模塊實(shí)現(xiàn)了通過身份證號碼、學(xué)號和姓名查詢的方式,供用戶調(diào)用。
4.3 系統(tǒng)功能的實(shí)現(xiàn)
本系統(tǒng)采用Golang語言提供的Web服務(wù)器來實(shí)現(xiàn)系統(tǒng)的前端交互。學(xué)生和檔案系統(tǒng)管理員均可進(jìn)行檔案信息的添加操作,添加用戶檔案信息的界面截圖如圖1所示。
在本系統(tǒng)中,CouchDB中的數(shù)據(jù)以Json文檔的形式存儲。該數(shù)據(jù)庫的底層是一個(gè)B-tree的存儲結(jié)構(gòu),確保了其易用性和并發(fā)性。
當(dāng)客戶端進(jìn)行信息查詢操作時(shí),后端會收到鏈碼注冊事件,若事件成功執(zhí)行,則會將該事件的相關(guān)信息保存到數(shù)據(jù)庫中,即用戶查詢學(xué)生檔案信息的記錄會被保存下來。每個(gè)鏈碼事件都有唯一的事件編號,該事件會以區(qū)塊鏈數(shù)據(jù)記錄的形式存儲在區(qū)塊鏈賬本中,保證了數(shù)據(jù)查詢記錄的可追溯性,提高了系統(tǒng)的安全級別。
用戶對檔案信息進(jìn)行修改時(shí),在CouchDB數(shù)據(jù)庫中用最新的信息覆蓋舊信息,產(chǎn)生唯一的鏈碼事件編碼,并且修改記錄也會被保存下來,以區(qū)塊鏈數(shù)據(jù)記錄的形式存儲在區(qū)塊鏈賬本中。
為了進(jìn)一步保證數(shù)據(jù)使用情況的可追溯性,增加檔案數(shù)據(jù)的安全性,本系統(tǒng)以表格的形式顯示信息的修改記錄,見表4,該頁面展示了某同學(xué)的檔案信息從開始添加到最新版本的修改歷程。
5 小結(jié)
文章介紹了基于Hyperledger Fabric的高校學(xué)生檔案管理系統(tǒng),該系統(tǒng)利用區(qū)塊鏈的透明、可追溯、不可篡改的特性實(shí)現(xiàn)了檔案的分布式管理,解決了高校學(xué)生檔案管理中面臨的各類安全問題,經(jīng)過測試,系統(tǒng)能滿足不同用戶的功能和性能需求,為學(xué)生檔案的管理和保存提供了新的解決方法和思路。
參考文獻(xiàn):
[1]" 郭惠芳,王照平,劉寒冰. 基于區(qū)塊鏈的可信高校學(xué)生成績記錄系統(tǒng)設(shè)計(jì)[J]. 現(xiàn)代計(jì)算機(jī),2020(11):92-97.
[2]" 朱蓉. 信息化時(shí)代高校學(xué)生檔案規(guī)范化管理研究[J]. 蘭臺世界,2021(3):85-88.
[3]" 周小韻. 區(qū)塊鏈技術(shù)在學(xué)生檔案管理中的應(yīng)用模式探究[J].南京理工大學(xué)學(xué)報(bào)(社會科學(xué)版),2019,32(6):52-57.
[4]" 朱林,劉躍. 基于區(qū)塊鏈技術(shù)的高校學(xué)生日常行為管理系統(tǒng)研究[J]. 西南民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2019,45(3):290-295.
[5]" Minoli D, Occhiogrosso B. Blockchain mechanisms for IoT security[J]. Internet of Things,2018,1:1-13.
[6]" 余璨璨,戚湧,趙學(xué)龍,等. 基于Fabric的停車管理區(qū)塊鏈系統(tǒng)[J]. 計(jì)算機(jī)應(yīng)用,2019,39(S1):192-197.
[7]" 陳香,劉晉偉. 數(shù)字轉(zhuǎn)型背景下的文件分類探討:基于高校檔案工作視角[J]. 檔案學(xué)研究,2020(2):107-111.