郭惠芳,王照平,劉寒冰
(黃河科技學院學院計算機科學系,鄭州450002)
畢業生就業、考研或出國升造時需要到學校開具一份在校學習成績報告,作為學生在校學習情況的證明,在這個過程中可能存在:①成績可能會被篡改,不排除由系統管理員在系統中篡改或由個人在紙質證明上進行篡改。②開具的證明是由學校印章來證明這份證明的有效性,但存在印章造假的可能。③可信度低造成用人單位對這份證明的采信度不高。當前大部分高校學生成績記錄系統是建立在傳統數據庫基礎之上的,其安全性也存在一定隱患,例如數據庫是可以被修改的,數據庫的日志也是可以被修改的。區塊鏈技術最突出的特點就是防篡改、可追溯,這些特征為構建一個可信的高校學生成績記錄系統提供了基礎。
一個實體是可信的,如果它的行為總是以預期的方式,達到預期的目標[1]。它一般有三個屬性:①能夠鑒別用戶的身份;②能夠確保信息在存儲或傳輸過程中不被篡改;③能夠保證用戶的隱私信息不被輕易泄漏。構建一個可信的成績記錄系統,我們將考慮這幾個方面的實現。
近年來,公有鏈技術應用于醫療、金融、認證以及政府管理等領域[2-5]。2016 年Learning Machine 與麻省理工學院媒體實驗室合作開發了Blockcerts,它基于比特幣網絡發布文憑,提供學歷、專業勞動力資格的認證,憑證可以防篡改并可驗證。雖然Blockcerts 在很多大學得到了應用,但開發者們仍然稱這個系統是一個實驗系統,并聲稱在訪問控制、隱私保護及使用的便捷性上仍在探索[6]。基于公有鏈基礎之上的系統具有以下幾點不足,①效率低,②沒有身份驗證不適合實際應用需求,③監管難。它的優點就是完全去中心化,可信程度高。
經調研,在國內的很多領域實施完全的去中心化是不現實的,并且也不符合我國相關法規[7]。大部分業務場景中存在監管機構,他們有一些權利或義務對交易進行一定程度的業務監督,還有一些領域不適合進行匿名交易,需要確認參與者身份。聯盟鏈技術增加了用戶的身份驗證功能,但缺點是去中心化不完全,帶來的影響是從技術來看可信度及安全性不如公有鏈,但有了身份驗證系統,系統的監管及審計可以集成到區塊鏈系統中,也就是說系統的安全性相比普通的數據庫系統好,仍然具有防篡改、可追溯獨特優勢。另外,從行政管理角度來看,監管和審計模塊又可以提升區塊鏈系統的安全性和可管理性。在具體實現中,綜合技術與行政管理兩個方面的優、缺點,可以取得更好的實踐應用。
在高校學生成績記錄系統中,參與學校是需要有身份證明的,教育主管部門需要在其中起到一個監管的作用,它有權對參與其中的高校進行管理。近年發展起來的聯盟鏈就是支持這樣的應用場景的區塊鏈技術,它由若干個機構(形成聯盟)共同參與管理,每個機構都運行著一個或多個節點,只允許系統內被授權的用戶讀寫或提交交易。超級賬本(Hyperledger)的子項目Fabric 是當前最為活躍、成熟的企業聯盟鏈的基礎設施。
Fabric 是一個多鏈架構,多個組織之間可以根據業務范圍的不同,構建不同的鏈(也稱為通道),在一個鏈上記錄著一個賬本,但它有多個備份同時保存在多個記賬節點上,由共識機制保持著同一個賬本的多個備份的一致性。鏈上除了有賬本,還有智能合約(也稱為鏈碼),它是開發者編寫的訪問賬本的接口。每筆交易的生成都需要調用相應的智能合約來完成,智能合約中體現每個鏈上交易生成的邏輯,如前置條件檢查等。Fabric 鏈是由不同種類的節點構成,對于開發者而言有三類節點比較關鍵。一類是背書節點,初始創建鏈時由管理員配置該鏈上交易的背書策略,即規定每個交易需要得到多少數量和身份的節點的確認,來保證多個備份的一致性;一類是排序節點,它將接受不同節點提交來的交易,排序并打包生成區塊廣播到記賬節點;還有一類就是記賬節點,每個記賬結點收到網絡中發來的新區塊,對其中每條交易進行驗證,確認有效才更新到本地的賬本中,防止并發可能產生的不一致。
下面描述了一個成績記錄(交易)上鏈的典型流程,如圖1 所示:1.提交交易,同時將參數上傳,如學生的成績信息;2.交易通過鏈上節點(peer)向配置的背書結點提出交易申請(proposal);3.背書節點模擬運行相應的智能合約,如果沒有沖突,并且身份認證通過,對前面運行的結果進行簽名返回;4.負責提交交易的節點收到所有背書的交易響應后進行拼接(若沒有沖突的話),向排序節點提交。排序節點將收到的交易按不同通道分別排序,并打包成塊(block);5.由排序節點將打包的塊廣播至記賬節點;6.記賬節點驗證交易,更新本地賬本,最后將結果返回給應用程序。

圖1 交易上鏈共識流程
Fabric 提供了訪問CA 的組件Fabric-ca 和一個自帶的CA 系統,為用戶提供身份認證服務。所有訪問系統的組織、節點以及用戶都需要擁有這個系統簽發的身份證書才能訪問這個區塊鏈網絡,節點間及用戶與節點之間的通信都由相應的私鑰進行簽名確認,它是構建一個可信的分布式系統的基礎。具體一點,鏈上數據的防篡改以及修改記錄的可追溯性是由下面幾點機制來保證的:
(1)賬本在多個節點中有備份,一個節點上的賬本被修改是無效的,共識機制保證多個副本的最終一致性。
(2)交易是通過執行智能合約提交上鏈的,智能合約的邏輯可以控制同一記錄的多次寫入;每一次對記錄的修改都會被記錄在賬本中,也可以利用這個特性通過審計環節對多次寫入的記錄進行事后審查。
(3)Fabric 的賬本和其他區塊鏈的結構類似,相鄰區塊之間由Hash 值串聯在一起,同時每個區塊中的所有交易由hash 二叉樹組織在一起的,如果修改其中一個區塊中的交易,則Hash 值驗證不通過。
構建一個可信的學生成績記錄系統,僅有以上基礎的保障是不夠的。表1 中列出了在系統設計中需要解決的問題及解決方法。從表中可看出,Fabric 系統提供了歷史記錄的防篡改以及可追溯,但用戶鏈上數據的訪問控制、敏感數據的保護以及細粒度的授權訪問并未提供系統層面的解決[8,9]。文中第3 節給出了一個高校學生成績記錄原型系統的構建,在此基礎之上,文中第4 節詳細闡述了表中列出的相關安全問題的解決方法。

表1 可信成績記錄鏈子任務解決方案
平臺的參與方由高校、教育主管部門以及學生或授權單位組成,管理部門對聯盟鏈中的成績記錄(賬本)進行審計、監管。該平臺是一個可擴展的分布式系統,一個地區可以構建一個成績記錄鏈,隨著平臺的運作,在有關部門授權下可以新增聯盟鏈或在現有聯盟鏈中新增高校成員。一個高校學生成績記錄系統的原型如圖2 如示。
圖下方的虛線框代表聯盟鏈網絡Net,其中通道Mychannel 是由若干個高校組成的一個成績記錄鏈,在Fabric 中通道就是一條鏈,用于記錄這些高校的學生成績記錄。通道內的節點用P1,P2,…,Pn 表示,節點Orderer 1…Orderer m 表示m 個排序節點,功能是排序交易并參與共識和區塊打包。圖中僅顯示了一條鏈(通道),在整個網絡(Net)中可以構建多個這樣的成績記錄鏈。我們在原型系統的鏈上設計了智能合約,其中包括讀記錄方法,創建記錄方法、審計多條記錄方法,同時在智能合約中依據訪問者的身份屬性進行鏈上數據的細粒度的訪問控制,在第4 部分有詳細闡述。中間方框表示由智能合約(也稱為通道的鏈碼)向外界暴露的訪問接口,例如寫入成績記錄、查詢、審計查詢等。圖的上方框內表示高校學生成績系統的應用程序(Application),此處用三種用戶角色來表示應用層的服務,其一是學生用戶或授權的用人單位,代表成績記錄查詢應用,產生成績證明文件;其二是學校授權的教務人員,代表成績上鏈應用;其三是教育主管部門,代表鏈上數據審計或流程檢查的應用。

圖2 高校成績記錄原型系統組成
學生成績記錄提交到系統后,就形成一條交易,其內容包括學生的基本信息和學生的成績列表。當交易經過排序被打包到區塊中并記錄到鏈上,就形成了學生成績鏈。每個區塊的頭部包含前一區塊頭的Hash值,以及當前區塊所有交易的Hash 值,這種機制保證了進入區塊中的交易是不能被更改或刪除的,達到防篡改的目的。
學生成績信息提交到系統,除了形成區塊上鏈,同時會寫入鏈上的狀態數據庫World State 中,它反映了每筆交易的結果。在狀態數據庫中記錄以JSON 結構存儲,每名學生分配一個唯一鍵值,采用:學校編號+姓名+學號的Hash 值作為鍵(為了測試方便,當前用學生編號代替),其對應的值就是學生基本信息及成績列表。當前我們實現的原型系統中學生基本信息包括學校名稱,編號,學號,畢業類別,畢業時間以及注冊時間;成績列表是以[課程名稱:分數]列表形式存儲,不同學生的課程列表長度和課程名可以不同。
成績記錄的每次改變,都會更新這個狀態數據庫的內容,它反映了最新的交易執行的結果,而交易的歷史記錄則記錄在區塊鏈(ledger)中,這個歷史記錄不可更改,用于事后追溯。
為了測試方便,先注冊了一個管理員身份,用它又注冊了一個成員用戶身份,通過命令行方式進行了成績記錄上鏈的測試,和成績記錄查詢功能的測試,圖3是上鏈后,查看鏈上CouchDB 數據庫的結果,可以看到上鏈的學生基本信息及成績記錄。圖4 是在命令行下運行查詢應用的結果,未來可以將這個結果用Web 應用封裝下。

圖3 學生成績記錄上鏈后在CouchDB中查看結果

圖4 通過查詢腳本查詢特定學生的成績記錄
雖然基于Fabric 構建可信系統,具有防篡改、可追溯的特性,但作為一個可用的高校學生成績記錄系統還需要解決鏈上交易數據的細粒度訪問控制、學生敏感信息的保護以及授權訪問等問題。Fabric 中可配置的角色種類較簡單,通過配置并不能解決上述用戶鏈上數據的安全訪問問題,我們通過多鏈、身份屬性及智能合約的設計完成上述系統需求。
Fabric 系統是一個多鏈系統,通過配置文件及相應的訪問控制組件MSP,可以設置系統鏈的訪問權限。而對于用戶鏈上數據的訪問權限主要是依賴智能合約或具體應用程序進行控制,對于智能合約的執行、以及讀、寫賬本的權限的設定,需要開發者來設計。我們采用的是一種基于用戶身份屬性的訪問控制方式。
CA 系統是設置訪問控制的基礎,每個用戶(Client)在CA 系統中都注冊取得了身份證書。在身份證書中可以設置它的角色、所屬組織、以及其名稱等,也可以加入更為詳細的分類,例如某個部門,賦予某種特定屬性等,這是下一步進行定制化訪問控制的關鍵。在高校學生成績記錄系統中用戶首先分為三類,一類是高校被授權的教務工作人員,他們是這個系統中可以記賬的用戶,所以在注冊此類用戶時設定其屬性“Writable”為“True”,意味著他可以提交交易,寫入賬本;而其他用戶的“Writable”設置為“False”;注冊普通用戶時設定其屬性“Readable”為“True”,意味著他只可一次讀取一個記錄的值;而對于教育主管部門的用戶將其屬性“Manager”設定為“True”;意味著他可以一次讀出多個記錄的值,方便其對記錄列表進行審計或檢查。
實現訪問控制的第一步,就是注冊用戶身份時將上述屬性由聯盟管理員進行設定,這些用戶的身份證書中就含有了這些屬性。第二步,在編寫智能合約中利用用戶身份證書中的屬性進行判斷和控制,智能合約中關鍵觸發函數invoke 有一個參數:stub shim.ChaincodeStubInterface,它提供了取得用戶證書字節碼方法stub.GetCreator,然后將它解析成certification 對象,就可以獲取證書中定義的相關屬性值了,利用這個值進行判斷,來區分不同用戶的訪問權限,以決定是否向具體的賬本訪問函數(讀或寫)分發當前這個請求。
將這個訪問控制代碼放在智能合約中的好處是安全、可信。身份證書是由CA 產生的,其中的信息是不能被篡改的,而訪問控制的判斷邏輯是寫在智能合約中的,智能合約是安裝在區塊鏈上的,對其每次的修改都會被自動記錄在系統鏈上(可追溯)。這樣的機制保證了這個環節的可信。但從軟件實現角度上來講,當前這種方法不算是一個好的訪問控制方法,因為它的規則寫在了智能合約(代碼)中,靈活性不夠,下一步可以研究使用系統鏈碼來配置用戶鏈碼的訪問控制的方法。
聯盟鏈允許聯盟內部授權用戶訪問鏈上數據,但對于敏感信息可能是不適合的,如果系統需要向外提供信息服務,隱私保護問題就更加突顯。
存儲在區塊鏈上的學生基本信息及成績信息屬于學生的隱私信息,如果鏈上的成績信息不經過加密處理,是可以被區塊鏈中其他用戶訪問的。為了構建一個可信安全的系統,我們采用對稱密鑰對上鏈的學生信息進行加密,其中密鑰的保存是一個必須解決的問題。我們在同一個系統中創建另一條密鑰鏈,它獨立于成績記錄鏈,學生成績上鏈時為每個學生隨機產生一個密碼串,并使用學生的公鑰進行加密保存在本區塊鏈網絡中的密鑰鏈中,只有用戶的私鑰才能訪問密鑰。這意味著只有學生本人才能讀取該加密密鑰。教務人員只有一次性寫入的權限,當學生需要出具成績證明時,可以在系統注冊并驗明身份,得到自己的密碼,用它對加密的成績記錄進行解密,就可以得到成績報告了。而其他用戶查詢得到的是加密后的信息,隱私信息得以保護。
對于用人單位或其他需要查看學生成績記錄的人員,他們需要取得學生的授權,即學生給出他們的基本信息(組成成績記錄的key)和解密的密鑰,他們就可以從該系統中訪問得到解密后的成績報告了。
對于高校主管部門,可以定時或在發生投訴或舉報時進行審查或審計,主要對以下幾個方面進行審查:①通過管理員用戶身份對系統鏈上數據進行檢查,用戶鏈碼是否被修改過。如果修改過,可以查看修改時間、用戶帳號及備案信息,判斷是否符合相關審核程序與授權許可。②對特定高校隨機抽查學生的成績記錄,看在成績記錄鏈上是否存在多次改寫記錄。可以通過相關權限查看賬本上的歷史記錄。③定時在成績記錄鏈上驗證指定區塊區間的相鄰區塊Hash 值是否吻合。即檢查當前區塊的pre-hash 字段值是否為上一區塊的頭的hash 值,以及當前區塊頭的Datahash 是否為本區塊所有交易的hash 值等。④讀取交易上鏈的背書策略,審查其是否符合相關規定。
構建一個可信的系統和服務是一件困難的事,區塊鏈技術為我們提供了一些核心支持,例如防篡改、可追溯性等。但在許多應用場景中有不同的要求,例如要求有安全性的保障、隱私保護及高可用性、方便性等,許多要求是相互矛盾的,如何在現有的區塊鏈技術基礎上構建出符合現實可用的應用系統,仍是一個挑戰。在高校學生成績記錄鏈的構建過程中,主要解決了智能合約細粒度訪問控制、鏈上敏感信息的保護及授權訪問等問題。當前已完成一個原型系統的構建,可以完成成績上鏈、查詢等功能。下一步就是將加密及授權訪問進一步完善并結合前端系統的開發,形成一個可信的、可用的高校學生成績記錄系統。
構建一個可信的系統和服務是一件困難的事,區塊鏈技術為我們提供了一些核心支持,例如防篡改、可追溯性等。但在許多應用場景中有不同的要求,例如要求有安全性的保障、隱私保護及高可用性、方便性等,許多要求是相互矛盾的,如何在現有的區塊鏈技術基礎上構建出符合現實可用的應用系統,仍是一個挑戰。在高校學生成績記錄鏈的構建過程中,主要解決了智能合約細粒度訪問控制、鏈上敏感信息的保護及授權訪問等問題。當前已完成一個原型系統的構建,可以完成成績上鏈、查詢等功能。下一步就是將加密及授權訪問進一步完善并結合前端系統的開發,形成一個可信的、可用的高校學生成績記錄系統。