李晉江,張?zhí)炝?,?輝
(1.山東工商學院 計算機科學與技術學院,山東 煙臺 264005;2.山東工商學院 區(qū)塊鏈與應用技術學院,山東 煙臺 264005;3.山東工商學院 信息與電子工程學院,山東 煙臺 264005)
區(qū)塊鏈技術(Blockchain)起源于Nakamoto在2008 年發(fā)表的《比特幣:一種點對點電子現(xiàn)金系統(tǒng)》一文,是一種構建在點對點網(wǎng)絡上的全新分布式基礎架構與計算范式[1]。區(qū)塊鏈中的交易數(shù)據(jù)是通過鏈式結構存儲并驗證,各節(jié)點利用共識算法共同參與并管理和監(jiān)督數(shù)據(jù)的更新,節(jié)點間通信傳輸數(shù)據(jù)內容通過密碼學加密提高安全性,使用腳本化代碼編寫的智能合約自動執(zhí)行和操作數(shù)據(jù)。
區(qū)塊鏈針對傳統(tǒng)交易的信任和安全問題提出了技術創(chuàng)新。分布式賬本技術,多個不同的節(jié)點共同完成交易和記賬的過程,起到了監(jiān)督記賬的合法性。與以往的分布式存儲不同,區(qū)塊鏈涉及的分布式存儲在每個節(jié)點中都存儲了基于時間戳的鏈式結構的完整數(shù)據(jù),然而在傳統(tǒng)分布式存儲中是將有分布規(guī)則規(guī)定的多份數(shù)據(jù)存儲在不同的節(jié)點中。區(qū)塊鏈中的各個節(jié)點在網(wǎng)絡中的地位相同,配置資源相同,并通過共識機制確保存儲數(shù)據(jù)的安全性[2]。各節(jié)點間傳輸?shù)臄?shù)據(jù)信息經(jīng)過加密技術保護,不僅實現(xiàn)了對內容的保密性而且加強了對節(jié)點的認證。
隨著區(qū)塊鏈技術和以區(qū)塊鏈為基礎的數(shù)字貨幣發(fā)展迅速,諸多行業(yè)逐漸發(fā)現(xiàn),區(qū)塊鏈技術慢慢地在改變甚至顛覆各個行業(yè)和領域存在的潛力和價值。但是,目前由于區(qū)塊鏈技術方面人才培養(yǎng)和發(fā)展方面缺乏系統(tǒng)、全面、有效并受到認可的教育服務[3]。為此,我國高等教育應把握機遇,認真研究并大力開展區(qū)塊鏈技術計算機科學和跨學科教育課程。
國外對前沿技術的應用研究和教育教學起步比較早。目前,尼科西亞大學、普林斯頓大學和斯坦福大學等全球知名大學分別開設了“數(shù)字貨幣入門”“CS251 比特幣和加密電子貨幣”等課程[4]。哥倫比亞大學與IBM 公司合作,創(chuàng)立了區(qū)塊鏈和數(shù)據(jù)透明中心。麻省理工大學有一個數(shù)字貨幣計劃,幫助創(chuàng)建了加密貨幣工程和設計、共享公共分類賬等。
國內很多頂尖高校也開設并創(chuàng)辦了與區(qū)塊鏈技術相關的課程和項目,將區(qū)塊鏈加入本科或研究生的培養(yǎng)計劃中。清華大學創(chuàng)辦了x-lab,為具有區(qū)塊鏈技術的創(chuàng)業(yè)者提供更好的服務和平臺,把握最新的創(chuàng)業(yè)動態(tài),清華 x-lab 聯(lián)合鏈塊學院,為入駐團隊提供了區(qū)塊鏈行業(yè)與應用班課程。此外,清華大學還成立了全國高校區(qū)塊鏈創(chuàng)新聯(lián)盟——青藤鏈盟,全稱青藤區(qū)塊鏈聯(lián)盟,由清華 x-lab 聯(lián)合清華各院系教授籌備發(fā)起,由全國各大院校、科研機構、行業(yè)組織,共同發(fā)起組建的區(qū)塊鏈教育和產(chǎn)業(yè)聯(lián)盟。北京大學光華管理學院新金融與創(chuàng)業(yè)投資研究中心區(qū)塊鏈實驗室成立,旨在展開金融科技和監(jiān)管科技的研究。浙江大學成立了浙大計算機科學與技術學院區(qū)塊鏈研究中心,并正式開設區(qū)塊鏈與數(shù)字貨幣的課程,著重培養(yǎng)區(qū)塊鏈技術人才[5]。復旦大學與IBM共同探索,聯(lián)合創(chuàng)新,致力于IBM 區(qū)塊鏈研發(fā),成立了計算機科學技術學院“區(qū)塊鏈技術聯(lián)合創(chuàng)新中心”。武漢大學成立密碼學與區(qū)塊鏈技術實驗室,研究方向主要將區(qū)塊鏈與密碼學技術結合,打造出新的安全協(xié)議涉及方法[6]。
隨著區(qū)塊鏈的推廣和普及,加上它對于傳統(tǒng)行業(yè)模式的顛覆性的思想轉變以及帶來的各方面效益的提升,在未來的幾年內,各高校不僅會不斷開設區(qū)塊鏈技術的課程,而且會加大對于區(qū)塊鏈研究的投入。
區(qū)塊鏈是一種由時間順序將信息按順序相連的方式組合成數(shù)據(jù)結構,并利用共識機制達成一致來提高魯棒性,利用密碼學保證數(shù)據(jù)安全性的分布式賬本系統(tǒng)[7],是分布式數(shù)據(jù)存儲、點對點傳輸、共識機制、加密算法等計算機技術的新型應用模式。
分布式數(shù)據(jù)存儲是將集中的數(shù)據(jù)分散存儲在多臺獨立的設備上[8],提高了數(shù)據(jù)存儲的可靠性和安全性。各節(jié)點之間通過共識機制確保鏈上數(shù)據(jù)的正確性和存儲數(shù)據(jù)的一致性,共識機制是區(qū)塊鏈事務達成分布式共識的算法,建立各個節(jié)點一致明確的規(guī)則來保證分布式網(wǎng)絡的數(shù)據(jù)狀態(tài),是區(qū)塊鏈技術的重要組件[9]。非對稱加密算法進一步提高了系統(tǒng)安全性,有效認證區(qū)塊數(shù)據(jù)更新的合法性。
區(qū)塊鏈提出適合時代環(huán)境的創(chuàng)新思想得到廣泛的實踐應用離不開它完善的理論體系和綜合的核心特征[10]。區(qū)塊鏈具有去中心化、開放性、自治性、信息不可篡改和匿名性等特征[11]。
1)去中心化。
在區(qū)塊鏈點對點網(wǎng)絡中的各個節(jié)點既是服務的請求者也是服務的響應者,每個節(jié)點都互相信任并直接交換數(shù)據(jù),且分配了一定的資源和工作,在網(wǎng)絡中的地位是平等的。
2)開放性。
系統(tǒng)是高度開放的,底層和開發(fā)相關應用的代碼是透明的,因此整個系統(tǒng)是自治的,可以做到信息公開的最大化。
3)自治性。
區(qū)塊鏈中的規(guī)范和協(xié)議是采用協(xié)商一致的,讓整個系統(tǒng)中的每個節(jié)點能夠在去信任的自由安全環(huán)境下交換數(shù)據(jù)[12]。
4)信息不可篡改。
一個交易被發(fā)布到網(wǎng)上,并且通過了各節(jié)點的驗證寫入到了區(qū)塊鏈上,那么這個信息就會被永久地存儲起來,無權進行修改。
區(qū)塊鏈基于計算機科學理論和技術實現(xiàn),其底層技術涉及的知識內容包含在現(xiàn)代計算機科學類課程中。編程語言實現(xiàn)了區(qū)塊鏈節(jié)點間消息傳播以及智能合約等技術。區(qū)塊鏈其本質是區(qū)塊(數(shù)據(jù))間由密碼學相連而成的鏈式結構體,區(qū)塊中的交易數(shù)據(jù)存儲結構則是由哈希值組成的樹形結構以及在密碼學中同樣涉及的哈希函數(shù)。區(qū)塊鏈也是搭建在網(wǎng)絡上,節(jié)點間通訊遵循網(wǎng)絡協(xié)議。區(qū)塊鏈技術保密性依靠現(xiàn)代密碼學中非對稱加密技術。具體課程和知識點見圖1。
圖1 區(qū)塊鏈技術涉及計算機課程
編程語言實現(xiàn)了區(qū)塊鏈從理論層面到技術應用層面的轉變。如今區(qū)塊鏈的主流開發(fā)語言為Golang(以下簡稱為Go 語言),是由Google 開發(fā)的一種靜態(tài)強類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。HyperLedger Fabric大多數(shù)鏈代碼(使用HyperLedger Fabric 構建的智能合約)是用Go 編寫的,比特幣底層的源代碼也是由Go 編寫的。
Go 的語法接近于C 語言,在開設Go 語言之前須全面講解C 語言作為先行課。因為編程語言大致相同,接下來對比兩者的不同之處。從編程語法 上,Go 語 言 的基本數(shù)據(jù)類型要比C 語言更豐富;Go語言除了實現(xiàn)C 語言中條件判斷和循環(huán)等的基本功能以外,還對它們進行了增強。兩者在定義函數(shù)格式上不同,而且Go 語言中有方法這個概念。從編程思想上,C 語言是一門面向過程的編程語言,而Go 語言是一門面向對象的編程語言。
除了與C 語言的部分不同外,Go 語作為一種新型語言又在其基礎上加入了其他新增特性,例如接口、并發(fā)、反射和異常處理等,其中Go在語言級別上支持并發(fā)與協(xié)程,通過協(xié)程可以方便地實現(xiàn)API 的并行處理,達到處理效率的最大化,提升系統(tǒng)吞吐能力。不僅如此,Go 語言開發(fā)簡單、代碼描述效率高,通過少量的代碼就能實現(xiàn)框架的標準化,并以統(tǒng)一的規(guī)范快速構建API 業(yè)務邏輯。能快速構建各種通用組件和公共類庫,進一步提升開發(fā)效率,實現(xiàn)特定場景下的功能量產(chǎn)。
區(qū)塊鏈是一種基于鏈式的數(shù)據(jù)結構。數(shù)據(jù)結構課程是讓學生掌握數(shù)據(jù)在計算機中存儲形式、數(shù)據(jù)與數(shù)據(jù)之間存在的關系及對數(shù)據(jù)進行基本處理方法等。區(qū)塊鏈利用塊鏈式數(shù)據(jù)結構來驗證和存儲數(shù)據(jù)[13],每個區(qū)塊打包記錄了一段時間內發(fā)生的事務是對當前鏈的一次共識,并且通過記錄上一個區(qū)塊的哈希值進行關聯(lián),從而形成塊鏈式的數(shù)據(jù)結構。其中哈希指針實現(xiàn)了區(qū)塊間的關聯(lián)。
哈希指針不僅要存儲地址,還需要保存這個結構體的哈希值,可檢測結構體有沒有被篡改。每一個區(qū)塊包含前一個區(qū)塊的哈希指針,最后一個是最近新產(chǎn)生的區(qū)塊也有個哈希值存在系統(tǒng)中。每一個區(qū)塊的哈希值是把前一個區(qū)塊中的所有內容通過哈希函數(shù)算出,包括前一個區(qū)塊的哈希值[14],這樣后面的每一個區(qū)塊都與前面所有區(qū)塊有聯(lián)系,區(qū)塊結構見圖2。
圖2 區(qū)塊鏈鏈式結構
從宏觀角度上看,區(qū)塊鏈是由一個個區(qū)塊組成的鏈式存儲結構,每個區(qū)塊中的數(shù)據(jù)存儲結構則是樹形結構。樹形結構中的數(shù)據(jù)元素之間存在一對多的層次關系,利用這種特殊的關系實現(xiàn)區(qū)塊中的信息不可篡改性。
以區(qū)塊鏈技術作為底層架構的去中心化系統(tǒng)中的數(shù)據(jù)組織形式不同,比特幣中保存了一顆Merkle 樹,而以太坊針對3 種對象設計了3顆Merkle Patrcia 樹。MPT 是一種加密認證的數(shù)據(jù)結構,它融合了Merkle 樹和Trie 樹(前綴樹)兩種數(shù)據(jù)類型的優(yōu)點。Merkle 樹在區(qū)塊體中的結構見圖3。
在用戶查詢交易記錄和賬戶余額時,需要訪問的數(shù)據(jù)是存儲在樹形結構的葉子節(jié)點上,通過遍歷整個樹的結構才可以提取到數(shù)據(jù)。選擇合適的遍歷方法才能快速并且準確地找到所需要的信息。
一般而言,區(qū)塊鏈基礎模型是由自下而上的數(shù)據(jù)層、網(wǎng)絡層、共識層、激勵層、合約層和應用層組成。每層分別完成一項核心功能,各層之間互相配合,實現(xiàn)一個去中心化的信任機制。
圖3 區(qū)塊中的Merkle 樹
OSI 七層網(wǎng)絡模型,它將計算機網(wǎng)絡體系結構的通信協(xié)議劃分為七層,自下而上依次為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、會話層、表示層、應用層[15]。每一層中都有屬于自己的傳輸協(xié)議,完成自己相應工作及與上下層級之間進行溝通。從功能劃分層次上講,計算機網(wǎng)絡體系結構和區(qū)塊鏈基礎模型兩者有著共同之處,教師可通過全面講解網(wǎng)絡中各層的作用以及數(shù)據(jù)在各層間的傳輸方法和意義,對比區(qū)塊鏈的層級關系來熟悉區(qū)塊鏈基本架構。兩者在架構模型上的比較見圖4。
區(qū)塊鏈的底層網(wǎng)絡技術采用的是對等網(wǎng)絡(P2P),是一種分布式網(wǎng)絡通信技術,在互聯(lián)網(wǎng)的組成章節(jié)中著重講解對等方式,熟悉區(qū)塊鏈實現(xiàn)去中心化的結構。網(wǎng)絡中各節(jié)點間相互通信并傳播數(shù)據(jù),區(qū)塊在網(wǎng)絡上的傳遞過程涉及節(jié)點之間的連接管理、地址管理、Peer 節(jié)點的管理和Peer 之間同步區(qū)塊的協(xié)議等。計算機網(wǎng)絡中TCP面向連接的通信協(xié)議,通過三次握手建立連接,提供一種可靠數(shù)據(jù)流服務,并學習TCP 報文格式深化比特幣中的網(wǎng)絡協(xié)議中Peer 之間的協(xié)議消息、消息格式及包的封裝和解析以及Peer 節(jié)點之間的TCP 連接。網(wǎng)際協(xié)議IP 是TCP/IP 體系中兩個重要的協(xié)議之一,簡單了解網(wǎng)絡地址分類和協(xié)議中的3 個定義以及其他相關概念。
對等網(wǎng)絡使用DHT 技術中的Gossip 協(xié)議進行消息發(fā)布與傳播。在一個有界網(wǎng)絡中,Gossip協(xié)議中的每個節(jié)點都隨機地與其他節(jié)點通信,收到消息的節(jié)點也會重復該過程,最終所有節(jié)點的狀態(tài)都會達成一致。主要在分布式數(shù)據(jù)庫系統(tǒng)中各個節(jié)點同步數(shù)據(jù)時用,其最大特點是組成網(wǎng)絡的節(jié)點是對等節(jié)點,是非結構化網(wǎng)絡。
區(qū)塊鏈信息不可篡改和匿名性是依靠密碼學技術實現(xiàn)的。交易信息被打包成區(qū)塊發(fā)布到網(wǎng)絡上后,其他節(jié)點利用數(shù)字簽名和時間戳驗證每條交易信息的真?zhèn)巍?/p>
圖4 兩者架構模型
了解密碼學的理論基礎有利于學生更清晰地明白區(qū)塊鏈應用密碼學技術的作用和對信息加密過程。需著重講解密碼學中的兩個知識點哈希(Hash)和簽名。哈希函數(shù)是現(xiàn)代密碼學的基本構件之一,其中包含兩個重要的性質,一個是抗碰撞性(collision resistance),另一個是隱匿性(hiding)。
抗碰撞性中假設有兩個輸入x和y,哈希函數(shù)用H()來表示,如果滿足x≠y,H(x)=H(y),那就稱為哈希碰撞。在對一個信息取哈希值求摘要來檢測對內容的篡改,一旦改變了信息中的內容,那么它的哈希值也會隨著改變,根據(jù)性質無法找到與原信息內容不同但哈希值相同的信息,體現(xiàn)區(qū)塊鏈信息的不可篡改。
第二個性質是隱匿性(hiding),是指哈希函數(shù)的計算過程是單向的不可逆的。這個性質的前提是輸入空間足夠大并且分布足夠均勻,各種取值的可能性差不多,無法通過蠻力法找到輸入值。但大多數(shù)情況下,輸入空間并沒有足夠大,因此區(qū)塊鏈通過引入一個隨機數(shù)nonce,加到輸入值后同時取哈希值,這樣拼接能保證整個輸入是隨機,分布也足夠均勻。
經(jīng)過前面理論基礎和哈希函數(shù)學習后,在講解現(xiàn)代密碼學體系時,需熟悉掌握非對稱密鑰加密系統(tǒng)?!凹用茇泿拧敝衅毡橛玫搅藱E圓曲線數(shù)字簽名技術,橢圓曲線是公鑰加密體系的一種。在區(qū)塊鏈系統(tǒng)中每個節(jié)點都存在公鑰和私鑰對,公鑰用來加密,私鑰用來簽名,公鑰由私鑰產(chǎn)生。非對稱加密系統(tǒng)在區(qū)塊鏈中主要應用有兩個,分別是公鑰加密和公鑰認證。
區(qū)塊鏈技術不僅可以作為加密貨幣的底層架構,還可以為其他行業(yè)和領域注入新的活力,尋找突破瓶頸的方法。人工智能同樣被國務院印發(fā)《“十三五”國家信息化規(guī)劃》列入國家重點前沿技術重點發(fā)展項目。人工智能在近幾年發(fā)展迅速,在很多學科領域都獲得了廣泛應用,并取得了豐碩的成果,技術和理論都已成熟。將區(qū)塊鏈技術和人工智能相結合會產(chǎn)生無限可能并推動著社會的發(fā)展,同樣人工智能訓練模型結果可以存放在區(qū)塊鏈中降低應用遭受攻擊的風險。
區(qū)塊鏈技術作為我國戰(zhàn)略性前沿技術,其發(fā)展應用直接決定了未來高等教育的發(fā)展質量和競爭力。隨著區(qū)塊鏈技術的不斷發(fā)展和普及,越來越多的行業(yè)和領域已經(jīng)受到了影響并逐漸發(fā)生了顛覆性的改變,它也在慢慢地滲透到我們的生活當中。作為一名計算機學科教育工作者,因為相關領域內前沿技術不斷更新?lián)Q代,教師需要及時了解學習并將成熟的技術傳授給學生,不僅如此,國家的進步依賴于科技的應用成果,因此更需要在建設國家時貢獻自己的力量。