翟社平, 楊媛媛, 張海燕, 趙江明
(1. 西安郵電大學(xué) 計算機學(xué)院,陜西 西安 710121; 2. 西安郵電大學(xué) 教務(wù)處,陜西 西安 710121)
區(qū)塊鏈(Blockchain)是一種具有去中心化、可追溯、不可篡改、安全可靠等特性的分布式數(shù)據(jù)庫,集成了P2P(Peer-to-Peer)協(xié)議、數(shù)字加密技術(shù)、共識機制、智能合約等技術(shù),摒棄了傳統(tǒng)中心節(jié)點維護的模式,采用多方用戶共同維護的方式,實現(xiàn)多方間的信息監(jiān)督,進而保障數(shù)據(jù)的可信度與完整性。區(qū)塊鏈平臺可以分為公有鏈、私有鏈和聯(lián)盟鏈,公有鏈中所有的節(jié)點均可以自由的加入或退出,私有鏈嚴格限制參與節(jié)點的資格,聯(lián)盟鏈由若干個參與機構(gòu)共同管理。比特幣于2008年被中本聰提出[1],是數(shù)字貨幣最成功的案例,同樣也是區(qū)塊鏈最典型的應(yīng)用。此外,區(qū)塊鏈在多個方面也拓展出了其獨特的應(yīng)用價值,并表現(xiàn)出了重塑社會的潛力。
各國政府部門高度重視區(qū)塊鏈技術(shù)發(fā)展并積極探索區(qū)塊鏈的全面應(yīng)用。美國以太坊平臺Ethereum基于區(qū)塊鏈為用戶提供可編程智能合約開發(fā)服務(wù),微軟公司在Azure云計算平臺的基礎(chǔ)上推出了BaaS服務(wù)等。雖然國內(nèi)區(qū)塊鏈起步較晚,但爆發(fā)的速度要比國外更快。在政策方面,2016年2月,中關(guān)村區(qū)塊鏈產(chǎn)業(yè)聯(lián)盟成立;2017年5月,中國第一個區(qū)塊鏈標準《區(qū)塊鏈參考架構(gòu)》正式發(fā)布,區(qū)塊鏈的基本標準得以確立;2018年5月20日,工業(yè)和信息化部聯(lián)合多個研究機構(gòu)撰寫的《2018年中國區(qū)塊鏈行業(yè)白皮書》在北京發(fā)布[2]。在技術(shù)方面,2017年1月,眾享比特團隊發(fā)布ChainSQL,被稱為全球首個基于區(qū)塊鏈技術(shù)的數(shù)據(jù)庫應(yīng)用平臺;2017年4月,騰訊發(fā)布TrustSQL,提供企業(yè)級區(qū)塊鏈基礎(chǔ)設(shè)施和云服務(wù)。截至2018年3月底,中國以區(qū)塊鏈為主營業(yè)務(wù)的公司數(shù)量已達456家。
區(qū)塊鏈作為分布式數(shù)據(jù)庫的代表,其所有節(jié)點存有區(qū)塊鏈上所有用戶交易信息,這便對區(qū)塊鏈的保密性能有著較高要求。區(qū)塊鏈是一個去中心化的點對點網(wǎng)絡(luò),節(jié)點間相互不信任,不存在中心節(jié)點,因此在區(qū)塊鏈上進行交易同樣需要保證交易信息在不安全信道上的安全傳輸,維護交易的完整進行。為此,密碼學(xué)技術(shù)在區(qū)塊鏈中占有最核心地位。在區(qū)塊鏈中,密碼學(xué)技術(shù)保障了用戶隱私和交易數(shù)據(jù)的安全性,保證數(shù)據(jù)一致性等。本文概述了區(qū)塊鏈基礎(chǔ)架構(gòu),包括數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、合約層和應(yīng)用層。以比特幣為例,分析區(qū)塊鏈在隱私保護方面中仍存有在的問題,介紹這些問題現(xiàn)有的解決方案,其中包括混幣機制、零知識證明、環(huán)簽名等技術(shù),詳細闡述密碼學(xué)技術(shù)在區(qū)塊鏈中如何進行隱私保護以及交易維護。
根據(jù)區(qū)塊鏈科學(xué)研究所創(chuàng)始人Melanie Swan的觀點,區(qū)塊鏈技術(shù)已經(jīng)經(jīng)歷了以比特幣為代表的多技術(shù)組合創(chuàng)新的區(qū)塊鏈1.0階段,以由數(shù)字資產(chǎn)轉(zhuǎn)移的以太坊代表的區(qū)塊鏈2.0階段。區(qū)塊鏈技術(shù)的典型應(yīng)用主要包括比特幣、以太坊、超級賬本等,盡管它們在具體實現(xiàn)上各有不同,但在整體體系架構(gòu)上存在著諸多共性。如表1所示,區(qū)塊鏈平臺可分為五個層次:網(wǎng)絡(luò)層、共識層、數(shù)據(jù)層、合約層和應(yīng)用層。
表1 區(qū)塊鏈體系架構(gòu)
數(shù)據(jù)層主要利用塊數(shù)據(jù)結(jié)構(gòu)保障數(shù)據(jù)存儲的完整性,每個數(shù)據(jù)塊將一段時間內(nèi)接收到的數(shù)據(jù)交易封裝到一個帶有時間戳的數(shù)據(jù)區(qū)塊中,并鏈接到當前最長的主區(qū)塊鏈上存儲,形成最新區(qū)塊。該層涉及區(qū)塊存儲、鏈式結(jié)構(gòu)、哈希算法、Merkle樹、時間戳等主要技術(shù)。其中,比特幣的數(shù)據(jù)結(jié)構(gòu)為Merkle樹,以太幣的數(shù)據(jù)結(jié)構(gòu)為Merkle Patricia樹,超級賬本的數(shù)據(jù)結(jié)構(gòu)為Merkle Bockt樹。
共識層中主要包含共識機制,能夠在決策權(quán)高度分散的去中心化系統(tǒng)中使得各節(jié)點高效地針對區(qū)塊數(shù)據(jù)的有效性達成共識。比特幣采用的共識機制為工作量證明(proof of work,PoW),以太坊采用的共識機制為PoW和權(quán)益證明(proof of stake,PoS),超級賬本采用的共識機制為實用拜占庭容錯(practical byzantine fault tolerance,PBFT)和投機拜占庭容錯(speculative byzantine fault tolerance,SBFT)。
合約層主要包括的智能合約是區(qū)塊鏈可編程特性的基礎(chǔ),能夠自動執(zhí)行合約條款的計算機化程序,以代碼和數(shù)據(jù)集合的形式存儲在區(qū)塊鏈上,通過區(qū)塊鏈節(jié)點在時間或事件的驅(qū)動下以分布式的方式執(zhí)行,所有相關(guān)條款都由代碼編成,能夠進行自動結(jié)算,通過簽名或其他外部數(shù)據(jù)信息觸發(fā)事件來執(zhí)行。比特幣中腳本功能有限,只能稱為合約的雛形,以太坊、超級賬本分別采用了不同的編程語言進行合約編寫。
網(wǎng)絡(luò)層包括各類數(shù)據(jù)傳輸協(xié)議以及驗證機制等。區(qū)塊鏈是典型的P2P網(wǎng)絡(luò),所有節(jié)點采用扁平拓撲結(jié)構(gòu)連接,沒有中心節(jié)點,任意兩個節(jié)點可進行自由交易,任意節(jié)點可以隨時加入或退出網(wǎng)絡(luò)。區(qū)塊鏈中的P2P協(xié)議主要用于節(jié)點間信息傳輸,不同的應(yīng)用場景所采用的協(xié)議不同,比特幣與以太坊采用TCP協(xié)議完成,超級賬本采用HTTP/2協(xié)議完成。
應(yīng)用層主要包括比特幣、以太坊和超級賬本。比特幣主要是進行數(shù)字貨幣交易,以太坊在數(shù)字貨幣基礎(chǔ)上加入去中心化應(yīng)用,超級賬本則不支持數(shù)字貨幣交易,主要是企業(yè)級的區(qū)塊鏈應(yīng)用。
哈希算法是將任意長度的消息序列映射到較短的固定長度值的函數(shù),具有易計算性、單向性、抗碰撞性和高靈敏度等特征[3]。通常用于確保數(shù)據(jù)完整性,即驗證數(shù)據(jù)是否被非法篡改,當被檢驗的數(shù)據(jù)發(fā)生變化時,其相應(yīng)的哈希值也會發(fā)生變化,因此即使數(shù)據(jù)處于不安全的環(huán)境中,也可以依據(jù)數(shù)據(jù)的哈希值檢測數(shù)據(jù)的完整性。
對區(qū)塊鏈來說,哈希函數(shù)可以用來做區(qū)塊和交易的完整性驗證。在區(qū)塊鏈中,每個區(qū)塊的頭部信息中會存儲著前一個區(qū)塊的信息的哈希值,任何用戶可以比對計算得出的哈希值和存儲的哈希值,來檢測前一個區(qū)塊的信息的完整性。
哈希指針是一種數(shù)據(jù)結(jié)構(gòu),除了包含通常的指針外,還包含一些數(shù)據(jù)信息以及與這些信息相關(guān)的密碼哈希值,其中正常的指針用于取信息,哈希指針用于驗證信息是否被篡改[4]。如圖1所示,區(qū)塊鏈即為一類使用哈希指針的鏈表,每個塊通過使用哈希值順序連接,根據(jù)哈希值驗證區(qū)塊中包含的數(shù)據(jù)是否改變,從而確保塊信息的完整性。
區(qū)塊鏈中的區(qū)塊保存了全網(wǎng)所有數(shù)據(jù)信息,主要由包含元數(shù)據(jù)的區(qū)塊頭和包含所有交易數(shù)據(jù)的區(qū)塊體組成[5]。區(qū)塊的每個數(shù)據(jù)塊通常包括區(qū)塊頭(header)和區(qū)塊體(body)。區(qū)塊頭封裝先前的區(qū)塊哈希(prev-block),當前區(qū)塊的難度目標和當前區(qū)塊解隨機數(shù)(nonce)、Merkle根(Merkle- root)以及時間戳(Timestamp)等信息。
圖1 區(qū)塊鏈鏈式結(jié)構(gòu)
前一區(qū)塊哈希:區(qū)塊哈希是區(qū)塊鏈的關(guān)鍵字段,該字段是將前一個塊的數(shù)據(jù)信息進行哈希運算的結(jié)果,將鏈上的所有區(qū)塊順序連接,形成從創(chuàng)建塊到當前塊的最長主鏈。每個塊不僅具有前一個塊的位置信息,而且還可以根據(jù)前一區(qū)塊哈希值驗證區(qū)塊中包含數(shù)據(jù)的完整性。
隨機數(shù)(Nonce):每個數(shù)據(jù)區(qū)塊的頭部信息中都含有一個隨機數(shù),初始值為0,運行比特幣礦機的結(jié)點對區(qū)塊整體數(shù)據(jù)進行SHA256運算,當隨機數(shù)計算出來的SHA256值不滿足要求時,隨機數(shù)自動加一,繼續(xù)進行SHA256運算,直到SHA256值比當前數(shù)據(jù)區(qū)塊SHA256值小時,新區(qū)塊產(chǎn)生。因此,生成新的區(qū)塊的過程實際上是計算SHA256值,并與目標值比較的過程,比特幣數(shù)據(jù)區(qū)塊生成的這一過程被稱為工作量證明。
時間戳:區(qū)塊鏈技術(shù)要求獲得記賬權(quán)的節(jié)點必須在當前數(shù)據(jù)區(qū)塊頭中加蓋時間戳,表明區(qū)塊數(shù)據(jù)的寫入時間,主鏈上各區(qū)塊是按照時間順序依次排列的。時間戳可以作為區(qū)塊數(shù)據(jù)的存在性證明,有助于形成不可篡改和不可偽造的區(qū)塊鏈數(shù)據(jù)庫,從而為區(qū)塊鏈應(yīng)用于公證、知識產(chǎn)權(quán)注冊等時間敏感的領(lǐng)域奠定了基礎(chǔ)。
難度目標:難度目標是使整個網(wǎng)絡(luò)的計算力大致每10分鐘產(chǎn)生一個區(qū)塊所需要的難度數(shù)值。難度目標由區(qū)塊鏈網(wǎng)路根據(jù)過去兩周的計算結(jié)果,自動重新計算未來兩周的難度目標。難度目標由區(qū)塊中的SHA256值所決定,通過控制區(qū)塊頭(Block Header)中的SHA256值應(yīng)恰好落在可控范圍目標區(qū)間之內(nèi)來增加或減少難度目標。
Merkle根:Merkle樹是最初由著名密碼學(xué)家Merkle提出的哈希二叉樹,用于快速驗證大規(guī)模數(shù)據(jù)的完整性。Merkle樹主要是哈希二叉樹或多叉樹。如圖2所示,Merkle樹通常包含區(qū)塊的交易數(shù)據(jù)庫,區(qū)塊頭的根哈希(即Merkle根),以及沿底層區(qū)塊數(shù)據(jù)到根哈希的所有分支。Merkle樹操作過程通常將塊體的數(shù)據(jù)分組,并將生成的新散列值插入Merkle樹中。因此遞歸直到只留下最后一個根哈希并記錄為塊頭的Merkle根,最后構(gòu)造成樹結(jié)構(gòu)。比特幣采用雙SHA256哈希函數(shù),即將任意長度的原始數(shù)據(jù)經(jīng)過兩次SHA256哈希運算后轉(zhuǎn)換為長度為256位的二進制數(shù)字來統(tǒng)一存儲和識別。
圖2 Merkle樹
交易列表:交易列表中保存有很多筆交易記錄的詳細信息,其中包括每一筆交易的生成時間、交易編號、比特幣金額、付款人等信息。在數(shù)據(jù)塊中,由于每一比特幣支出和接收的交易是寫在一起的,因此具有可追溯性。
密碼學(xué)的核心技術(shù)包括對稱加密和非對稱加密,非對稱加密也稱為公鑰加密,可以很好地解決對稱加密中密鑰早期分發(fā)的問題。非對稱加密算法擁有兩個不同的加密密鑰和解密密鑰,即公鑰和私鑰。
私鑰通常需要通過隨機數(shù)算法生成,公鑰通過進行不可逆算法計算得出。非對稱加密算法具有公私鑰分開、可在不安全信道傳輸?shù)膬?yōu)點,同樣,具有處理速度低、加密強度低的缺點,且需要基于數(shù)學(xué)問題來保證非對稱加密算法的安全性。
比特幣系統(tǒng)中的密鑰對包括一個私鑰,和由其衍生出的唯一的公鑰,密鑰對是由公鑰加密生成的。在比特幣交易的支付環(huán)節(jié),收件人的地址是由一個公鑰生成,稱為比特幣地址,即收款方[6-7]。
如圖3所示,私鑰(k)是一個數(shù)字,通常是隨機選出的,公鑰(K)是私鑰通過橢圓曲線乘法進行加密生成,比特幣地址(A)由公鑰使用一個單項加密Hash函數(shù)生成比特幣地址。
圖3 比特幣地址生成
生成一個比特幣私鑰在本質(zhì)上是在1到2256之間選一個數(shù)字,需要保證選取的結(jié)果是不可預(yù)測或不可重復(fù)的。比特幣采用操作系統(tǒng)底層的隨機數(shù)生成器來產(chǎn)生256位的隨機數(shù)作為私鑰,將隨機生成的私鑰k為與曲線上已定義的生成點G相乘,以獲得曲線上的另一點,即相應(yīng)的公鑰K。比特幣密鑰的生成點都是采用secp256k1標準中的生成點,一個私鑰k乘以G將得到相同的公鑰K。橢圓曲線依托離散對數(shù)問題,k和K之間的關(guān)系是固定的,但只能單項運算,即從k得到K,從K難以得到k。
用戶地址的生成在不同平臺上采用了不同算法,比特幣采用SHA256與RIPEMD160雙哈希得出比特幣地址,以太坊采用Keccak256算法生成以太幣地址。其中,比特幣生成過程,以公鑰K為輸入,計算其SHA256哈希值,再計算哈希后數(shù)值的RIPEMD160哈希值,得到一個長度為160位的數(shù)字,作為公鑰哈希,最后將公鑰哈希進行Base58編碼形成比特幣地址。
數(shù)字簽名系統(tǒng)包含簽名算法和驗證算法;簽名算法對消息進行一定運算,從而生成一個由簽名密鑰控制的數(shù)字簽名,簽名者掌握簽名密鑰以及簽名算法的具體流程,因此簽名密鑰、簽名算法的安全性得以保證。驗證算法通過驗證所接收消息的數(shù)字簽名進而驗證消息的有效性,驗證算法和驗證密鑰全網(wǎng)公開,任何消息接收者都可以查看和使用,即全網(wǎng)所有人都可以使用其對所接收的消息進行有效性驗證。
在以區(qū)塊鏈為底層技術(shù)的密碼貨幣系統(tǒng)中,數(shù)字貨幣所有者將該數(shù)字貨幣的上一個交易單內(nèi)容和下一個擁有者的地址進行哈希計算,將使用自己私鑰對信息進行數(shù)字簽名后的數(shù)據(jù)附加在交易列表的最后,發(fā)送給接受者[8]。接受者需要對所接受的信息進行簽名驗證,以證明上一位擁有者的信息,進而驗證該交易的擁有者。區(qū)塊鏈中每筆交易同時記錄該貨幣當前的所有者、前一所有者、下一所有者。因此可以實現(xiàn)貨幣的全程可追溯,有效避免了雙重支付、虛假交易等問題[9]。
如圖4所示,用戶2與用戶3進行付款交易,當用戶2需要向用戶3支付10個比特幣時,首先要在交易單上記錄金額和該比特幣的來源。用戶2的10個比特幣來自于用戶1,因此,完成用戶2對用戶3的支付交易,需要記錄比特幣的來源、支付的金額、以及用戶2的數(shù)字簽名。
圖4 交易的簽名和驗證
在交易認證過程中,簽名主要由付款人來完成,交易的付款人首先對上一筆交易的交易數(shù)據(jù)信息進行哈希運算得到其哈希值,付款人使用自己的私鑰對該哈希值進行加密,加密后的數(shù)據(jù)將作為上一交易數(shù)據(jù)信息的數(shù)字簽名與上一交易數(shù)據(jù)同時發(fā)送給接收方。接收方收到信息之后,將對交易的合法性進行驗證,使用與上一步相同的哈希函數(shù)從接收的交易數(shù)據(jù)信息得到哈希摘要,之后利用付款人的公鑰對上一步附加的數(shù)字簽名進行解密得到另一哈希摘要。通過對兩個摘要進行對比,可確保交易單有效性,若二者內(nèi)容相同,接受方就能確認交易單有效。
共識機制用于確定區(qū)塊鏈網(wǎng)絡(luò)中的記帳節(jié)點,并用于確認交易信息,保證各區(qū)塊數(shù)據(jù)的一致性同步。早期的比特幣區(qū)塊鏈使用了工作證明機制,該機制嚴重依賴節(jié)點算力來確保比特幣網(wǎng)絡(luò)分布式記賬的一致性。隨著區(qū)塊鏈技術(shù)的發(fā)展和各種競爭性貨幣的出現(xiàn),研究人員提出了各種機制,可以在不依賴計算能力的情況下達成共識。例如,股權(quán)證明、委任權(quán)益證明(delegated proof of stake, DPOS),以及一些分布式一致性算法,如PBFT,Raft等算法,這些共識機制各有利弊,應(yīng)用場景也各不相同。
PoW機制依賴分布式節(jié)點之間的計算能力競爭,確保整個網(wǎng)絡(luò)區(qū)塊鏈數(shù)據(jù)的一致性和安全性。每個節(jié)點貢獻自身算力,通過類似暴力破解的方法尋找一個合適的隨機數(shù),使得區(qū)塊頭元數(shù)據(jù)經(jīng)過SHA256運算后得到的哈希值小于區(qū)塊頭中難度目標值,即
H(n‖h)≤t,
(1)
其中H為SHA256哈希函數(shù);n為隨機數(shù);h為區(qū)塊頭部數(shù)據(jù),主要包含前塊哈希、Merkle根等內(nèi)容;t為難度目標,t值越小,n值越難找到;第一個尋找到隨機數(shù)的節(jié)點則可獲得新區(qū)塊的記賬權(quán)。以比特幣網(wǎng)絡(luò)為例,PoW的共識流程如下。
(1) 廣播階段:網(wǎng)絡(luò)中節(jié)點打包交易并且將新交易廣播至全網(wǎng)。
(2) 節(jié)點計算階段:全網(wǎng)每個單節(jié)點收集過去10分鐘的所有交易,以Merkle樹形式組織從而計算出Merkle根填入?yún)^(qū)塊頭。同時節(jié)點將區(qū)塊頭的Nonce值從0依次遞加1,直至區(qū)塊頭的兩次SHA256哈希值小于或等于當前網(wǎng)絡(luò)中的難度目標值。
(3) 新區(qū)塊生成:第一個找到正確隨機數(shù)的節(jié)點闊的新區(qū)塊的記賬權(quán),同時獲得挖礦獎勵,該獎勵包含該區(qū)塊中所有交易的交易費以及新區(qū)塊的區(qū)塊獎勵。節(jié)點打包區(qū)塊后,向全網(wǎng)廣播新區(qū)塊。
(4) 驗證階段:網(wǎng)絡(luò)中其他節(jié)點接收到新區(qū)塊后首先驗證其正確性及有效性,通過數(shù)字簽名驗證交易的有效性,同時計算隨機數(shù)的正確性。驗證無誤后,節(jié)點將該新區(qū)塊加入本地區(qū)塊鏈中,并基于該塊構(gòu)建下一區(qū)塊。
區(qū)塊鏈技術(shù)中存儲交易信息的全局賬本是公開的,任何加入?yún)^(qū)塊鏈網(wǎng)絡(luò)的節(jié)點都可以獲得完整的副本。通過分析全局賬本中的交易記錄,潛在攻擊者有可能對用戶的交易隱私和身份隱私帶來威脅[10]。交易隱私威脅指包含交易詳情的一些潛在威脅,例如攻擊者通過對一系列交易記錄進行深層次分析獲得一些有價值信息,包括特定賬戶的資金余額、交易詳情、關(guān)聯(lián)賬戶、資金流向等。身份隱私威脅主要是指交易者身份泄露的潛在威脅,攻擊者在分析交易數(shù)據(jù)的基礎(chǔ)上,可以通過結(jié)合一些背景知識獲得交易者的身份信息。
為了對抗這種攻擊,目前的保護措施主要包括混幣(coinjoin)、環(huán)簽名(ring signature)、零知識證明(Zero-Knowledge Proof)等[11]。達世幣(Dash)采用混幣措施,由混幣節(jié)點將多筆交易合并為一筆交易,進而隱藏付款地址與收款地址之間的關(guān)系。門羅幣(Menero)采用環(huán)簽名,它認可驗證簽名,不可知曉簽名者身份,進而隱藏交易發(fā)送者的身份信息。零幣(Zerocash)采用零知識證明,在不泄露交易信息以及額外信息的條件下,向驗證者證明交易的正確性。
混幣機制在數(shù)字貨幣中加入可信第三方,將所有交易的輸入與輸出地址打亂,進而實現(xiàn)貨幣的混合。在混幣機制中,存在三個角色:混幣提出方、混幣制定的接收方、系統(tǒng)中的可信第三方。具體的混幣過程首先由混幣提出者將貨幣發(fā)送給可信第三方,可信第三方通過相應(yīng)算法進行混幣,然后將混幣后的數(shù)字貨幣發(fā)送至提出方設(shè)定好的接受方。由此,混幣機制可以用以下公式表示為
CM(Z1,CA(Z0,m),A)→CA(Z0,m),
(2)
公式(2)的左側(cè)表示混幣提出人向可信中間人發(fā)送的信息,右側(cè)表示可信第三方經(jīng)過處理之后想接收方發(fā)送的信息?;鞄盘岢鋈说淖罱K目的是將消息(Z0,m)發(fā)送給接收方的地址A,首先將消息(Z0,m)用接受者A的密鑰CA進行加密,得到CA(Z0,m),接下來在加密的信息上加入可信第三方的驗證消息Z1和接收方地址A,對添加后的信息采用可信第三方的密鑰CM進行加密,得到CM(Z1,CA(Z0,m),A),可以有效避免消息在不安全信道上傳輸時被截獲或篡改??尚诺谌绞盏叫畔⒑螅紫炔捎米约旱拿荑€對消息進行解密,可以得到Z1,CA(Z0,m),A,但仍然無法獲得Z0,m??尚诺谌浇饷芎笮枰炞CZ1是否正確,判斷無誤后,將CA(Z0,m)發(fā)送給接收方A。接收方采用自己的密鑰進行解密,獲得Z0,m,完成此次通信[12]。
此類混幣機制稱為基于中心節(jié)點的混幣機制,由可信第三方完成混幣的過程,首先混幣的提出者將數(shù)字貨幣發(fā)送給可信第三方節(jié)點,可信第三方可以收取多個用戶發(fā)來的資金,將所收到的資金進行分配,最后根據(jù)混幣提出方指定的金額和地址進行貨幣轉(zhuǎn)移?;鞄艡C制避免了資金直接由發(fā)送方到達接收方,對資金的流向形成了干擾,進而避免攻擊者通過資金流向獲取隱私信息。
達世幣是一種較常見的數(shù)字貨幣,采用了中心化的混幣機制。達世幣的可信第三方節(jié)點在混幣過程中需要交納一定金額的押金,一旦主節(jié)點進行非法操作,押金即被沒收,避免混幣節(jié)點存在破壞行為,提升可信第三方節(jié)點的可信度。除此之外,達世幣還引入了鏈式混合和盲化的思想,鏈式混合是指用戶交易時可以隨機自主的選擇多個主節(jié)點進行混合。盲化技術(shù)是指用戶不需要將輸入和輸出發(fā)送到交易池,而是指定主節(jié)點將輸入和輸出傳遞到另一主節(jié)點。因此,對于主節(jié)點而言很難獲得用戶的真實身份,避免了中心節(jié)點被破壞而泄露用戶隱私信息的問題。
零知識證明是由Goldwasser等在1989年提出的,是一種兩方協(xié)議或多方協(xié)議,參與人包括證明者和驗證者,零知識證明可以實現(xiàn)證明者在不透漏任何隱私信息的情況下,驗證者可以判斷某個消息的有效性,實現(xiàn)有效證明。零知識證明的原理可以用描述為:對于語言L,令〈P,V〉是其交互證明系統(tǒng)。如果對于每個概率多項式時間交互機V*,都存在一個概率多項式時間算法M*,使得{〈P,V*〉(x)}x∈L和{M*(x)}x∈L總體是計算不可區(qū)分的,則稱〈P,V〉是計算零知識的。
2013年提出Zerocoin概念,是一種較為常見的數(shù)字貨幣,采用了零知識證明技術(shù),可以實現(xiàn)完全匿名的數(shù)字貨幣[13]。Zerocoin中的匿名集合中包括現(xiàn)有的所有Zerocoin,Zerocoin系統(tǒng)可以通過“鑄幣”方法使比特幣轉(zhuǎn)換成Zerocoin。用戶進行Zerocoin交易時,首先通過零知識證明算法證明自己的Zerocoin存于系統(tǒng)中并且沒有已經(jīng)被花費。但零幣扔然存在許多問題,例如Zerocoin無法由比特幣系統(tǒng)生成;Zerocoin的貨幣金額不可任意切分Zerocoin不支持非交互交易,并且零知識證明過程過于繁瑣。為此許多新的方案被提出,SASSON等人提出了Zerocash方案最為典型。
Zerocoin技術(shù)在比特幣主鏈上增添了一條側(cè)鏈,進而實現(xiàn)了隱私保護。當交易被提出時,會被拆分成多個規(guī)模較小的交易,并發(fā)送到全網(wǎng)中,在交易接受者地址之前多個交易會被合并成原交易。Zerocash技術(shù)則采用承諾函數(shù)將信息進行封裝,其中包括交易的發(fā)出者、接受者、金額等,在驗證的過程中,采用了零知識證明技術(shù),可以有效的保護交易發(fā)出者、接受者的地址信息以及交易的具體金額。由此可見,采用Zcash進行交易時,需要采用公私鑰對進行驗證。
但Zcash仍然存在許多不足,在Zcash發(fā)送交易的參數(shù)初始化時存在中心化的問題,很大的對去中心的特點以及用戶的隱私保護造成了影響。零知識證明過程過于繁瑣,證明生成過程的效率過低,需要消耗大量時間,嚴重影響了數(shù)字貨幣的高效性。
環(huán)簽名是一類只有環(huán)成員,沒有管理者的數(shù)字簽名方案,具有無條件匿名性,正確性和不可偽造性三個特性。具有較高的安全性,攻擊者根據(jù)所獲取的消息無法判斷當前簽名是由哪位生成,當攻擊者擁有環(huán)成員私鑰的情況下,也難以進行破解。同時,簽名可被所有其他環(huán)成員驗證真實性,其他成員無法偽造該簽名者的簽名,攻擊者也無法對某個消息偽造簽名。
門羅幣采用了大量密碼學(xué)技術(shù)實現(xiàn)隱私保護,最為核心的是基于換簽名的混幣機制。該混幣機制是去中心化的混幣操作,沒有第三方的存在,有效的避免了中心節(jié)點被破壞等問題。此外,門羅幣中也采用了隱藏地址技術(shù),可以實現(xiàn)地址的隱藏,交易的發(fā)送者采用隱藏地址技術(shù)生成臨時地址,全網(wǎng)上的所有用戶需要對該條交易信息進行驗證,進而判斷該條交易是否是發(fā)送給自己,并且只有交易的接受者才能解密該條消息。利用隱藏地址技術(shù),全網(wǎng)的用戶都可以看到該條交易,并對交易的有效行進行驗證,并且無法確認交易的接受者[14]。
此外,環(huán)簽名技術(shù)也可以實現(xiàn)不可追蹤性,交易發(fā)送者利用隨機數(shù)生成器生成私鑰,使用橢圓曲線加密算法生成對應(yīng)公鑰,同時得到與之對應(yīng)的密鑰鏡像。一個密鑰鏡像對應(yīng)一個簽名,其目的是判斷簽名的唯一性和不可復(fù)制。交易發(fā)送者在所有的交易列表中隨機選取n個交易,與自己的公鑰組成n+1個交易集合T。利用T、隨機數(shù)集合、私鑰以及非交互式挑戰(zhàn)最終得到最后的簽名。
在區(qū)塊鏈備受關(guān)注的如今,數(shù)據(jù)安全和隱私保護受到了嚴峻的挑戰(zhàn),先進的密碼學(xué)技術(shù)可有效解決此類問題,但仍存在存在薄弱環(huán)節(jié)。私鑰的生成是采用計算機系統(tǒng)中的隨機數(shù)生成器生成,稱為偽隨機,具有一定規(guī)律性,存在被破解的威脅。SHA-2算法目前雖然并沒有有效的方法破解此系列算法,但是一旦被破解,區(qū)塊鏈中所有數(shù)據(jù)的隱私和安全將不復(fù)存在。數(shù)字加密技術(shù)貫穿區(qū)塊鏈系統(tǒng),是區(qū)塊鏈系統(tǒng)的核心技術(shù),密碼學(xué)的研究對區(qū)塊鏈的發(fā)展將起到?jīng)Q定性作用。
現(xiàn)有的數(shù)字貨幣應(yīng)用已較為成熟,例如比特幣、零幣、門羅幣等。但區(qū)塊鏈在其他領(lǐng)域的研究才剛剛開始。區(qū)塊鏈作為一種新的網(wǎng)絡(luò)技術(shù),仍需要研究人員進行相關(guān)應(yīng)用的研究,為區(qū)塊鏈的進一步應(yīng)用提供技術(shù)基礎(chǔ)。