? ? ? ?摘要:
? ? ? ?區(qū)塊鏈?zhǔn)墙陙沓霈F(xiàn)了一項(xiàng)分布式共識(shí)技術(shù),基于區(qū)塊鏈共識(shí)協(xié)議結(jié)合智能合約技術(shù)可實(shí)現(xiàn)去中心化的數(shù)據(jù)共享。隱私保護(hù)是數(shù)據(jù)共享中的關(guān)鍵特性,原生區(qū)塊鏈沒有解決隱私保護(hù)問 題。利用數(shù)字摘要匹配算法提出了一種數(shù)據(jù)共享協(xié)議,該協(xié)議通過數(shù)字摘要空間的信息匹配,可在保護(hù)數(shù)據(jù)隱私的情況下實(shí)現(xiàn)數(shù)據(jù)的受控共享。基于協(xié)議的運(yùn)行邏輯,分析了協(xié)議執(zhí)行的正確性,參與雙方可實(shí)現(xiàn)數(shù)據(jù)交換共享。針對(duì)數(shù)據(jù)共享中的面臨的安全威脅,給出了安全性分析。
? ? ? ?內(nèi)容目錄:1 預(yù)備知識(shí)1.1 ?區(qū)塊鏈及其安全特性1.2 ?智能合約2 ?協(xié)議設(shè)計(jì)2.1 ?身份注冊(cè)與管理2.2 ?區(qū)塊鏈數(shù)據(jù)訪問接口2.3 ?隱私數(shù)據(jù)共享協(xié)議3??協(xié)議安全性分析3.1 ?正確性3.2 ?安全性區(qū)塊鏈技術(shù)是以比特幣為代表的加密數(shù)字貨幣系統(tǒng)中的底層技術(shù)。由于區(qū)塊鏈具有去中心化、公開透明等特點(diǎn),受到了研究者的廣泛關(guān)注。其主要解決了在沒有引入可信第三方的基礎(chǔ)上,相互不信任的節(jié)點(diǎn)之間達(dá)成共識(shí)的問題。抽象來看,區(qū)塊鏈可以看作是一個(gè)無(wú)中心化的可信第三方,進(jìn)而消除了中心化可信第三方的不可靠性。借助區(qū)塊鏈這種虛擬的可信第三方,參與者可以實(shí)現(xiàn) 雙方數(shù)據(jù)的共享訪問。尤其在開放性的網(wǎng)絡(luò)環(huán)境中,基于區(qū)塊鏈的數(shù)據(jù)共享能夠消除用戶對(duì)可信中心節(jié)點(diǎn)的依賴。在比特幣之后,又出現(xiàn)了多種改進(jìn)的區(qū)塊鏈協(xié)議f需要強(qiáng)調(diào)的是,區(qū)塊鏈技術(shù)本身并不提供隱私保護(hù)功能。雖然在比特幣系統(tǒng)中,通過隨機(jī)賬戶的引入,可以在一定程度上保護(hù)用戶的身份信息,但是區(qū)塊鏈上所有的交易數(shù)據(jù)本身依然是明文保存于交換的。在后續(xù)的加密數(shù)字貨幣中引入了更強(qiáng)的隱私保護(hù)功能也但是為了保護(hù)區(qū)塊鏈上一般數(shù)據(jù)的私密性,需要采用更多的密碼技術(shù)。在特定的場(chǎng)景下,如金融企業(yè)雙方需要共享用戶的違約等信用信息又不愿意泄露自己的用戶信息情況下,隱私保護(hù)的數(shù)據(jù)共享尤為重要。近年來,利用區(qū)塊鏈在不同行業(yè)實(shí)現(xiàn)數(shù)據(jù)共享的應(yīng)用也廣泛得到研究。本文基于區(qū)塊鏈技術(shù)設(shè)計(jì)了一套新的數(shù)據(jù)共享協(xié)議。在滿足多方數(shù)據(jù)共享的前提下,避免對(duì)非授權(quán)者泄露數(shù)據(jù)提供者擁有的數(shù)據(jù)信息與隱私,數(shù)據(jù)請(qǐng)求者也只能正確獲取在其權(quán)限范圍內(nèi)的數(shù)據(jù)。
? ? ? ?01預(yù)備知識(shí)
? ? ??1.1 ?區(qū)塊鏈及其安全特性
? ? ??區(qū)塊鏈由區(qū)塊+鏈構(gòu)成。以比特幣為例,所有交易信息在數(shù)字簽名后存儲(chǔ)在區(qū)塊上,每個(gè)節(jié)點(diǎn)在本地維護(hù)一份賬本副本。區(qū)塊鏈通過數(shù)字簽名等密碼學(xué)知識(shí)實(shí)現(xiàn)數(shù)據(jù)的防篡改、防抵賴等安全保護(hù),解決了拜占庭將軍問題四與雙花問題。Juan等 人于2015年證明了區(qū)塊鏈理論的安全性。區(qū)塊鏈作為一種新型的分布式多方記賬系統(tǒng),正逐漸由單純記錄數(shù)字貨幣的交易信息發(fā)展至承載產(chǎn)權(quán)、合約等價(jià)值存儲(chǔ),并在各大金融機(jī)構(gòu)的努力下衍生出了聯(lián)盟鏈與私有鏈。區(qū)塊鏈所能提供的安全性特性包括:(1)一致性:在分布式環(huán)境中,所有的參與 節(jié)點(diǎn)都能夠得到一致的數(shù)據(jù)結(jié)果。(2)存活性:即便有惡意節(jié)點(diǎn)存在,區(qū)塊鏈仍然能持續(xù)不斷地記錄新的數(shù)據(jù)。(3)公平性:因?yàn)橛姓\(chéng)實(shí)節(jié)點(diǎn)的存在,所有用戶的信息都能得到記錄和存儲(chǔ)。但是區(qū)塊鏈協(xié)議并不能提供數(shù)據(jù)的隱私保護(hù), 區(qū)塊鏈中所承載的數(shù)據(jù)所有參與節(jié)點(diǎn)均能接收,因此在需要隱私保護(hù)的場(chǎng)景應(yīng)疊加其他密碼技術(shù)。
? ? ??1.2 ?智能合約
? ? ??20多年前著名密碼學(xué)專家Nick Szabo提出智能合約這一概念。智能合約用計(jì)算機(jī)編程語(yǔ)言來實(shí)現(xiàn)傳統(tǒng)合約,它通過代碼來制定合約,執(zhí)行協(xié)議實(shí)現(xiàn)合約雙方的權(quán)利與義務(wù)。智能合約可以較好的控制價(jià)值的存儲(chǔ)與管理,與狀態(tài)機(jī)相似,通過定義多種狀態(tài)與規(guī)則,制定合約被觸發(fā)時(shí)所需的條件與相應(yīng)響應(yīng)邏輯自動(dòng)完成交易流程。然而,在區(qū)塊鏈技術(shù)出現(xiàn)以前,智能合約一直未能落地,因?yàn)閳?zhí)行智能合約需要靠可信的第三方來監(jiān)督合約不被篡改并被雙方可靠執(zhí)行,但傳統(tǒng)計(jì)算機(jī)程序無(wú)法保障這一點(diǎn)。將智能合約代碼與狀態(tài) 通過共識(shí)存放在區(qū)塊鏈上,保障了代碼執(zhí)行、資產(chǎn) 轉(zhuǎn)移過程的安全性以及存儲(chǔ)記錄的永久性。智能合約提高了自動(dòng)化交易水平,降低了交易成本,同時(shí)也保障了交易的安全性。基于區(qū)塊鏈的智能合約可以在金融等領(lǐng)域提供更多的應(yīng)用場(chǎng)景,這其實(shí)相當(dāng)于基于區(qū)塊鏈的安全多方計(jì)算。
? ? ??02協(xié)議設(shè)計(jì)
? ? ??為了簡(jiǎn)化討論,假設(shè)數(shù)據(jù)共享參與者為A、B兩方。數(shù)據(jù)提供者為A,數(shù)據(jù)請(qǐng)求者為B。數(shù)據(jù)提供者負(fù)責(zé)存儲(chǔ)數(shù)據(jù)索引與提供真實(shí)數(shù)據(jù),并對(duì)數(shù)據(jù)共享請(qǐng)求作權(quán)限校驗(yàn);數(shù)據(jù)請(qǐng)求者向數(shù)據(jù)提供者請(qǐng)求讀取數(shù)據(jù)的權(quán)限。應(yīng)用場(chǎng)景為,當(dāng)B知道數(shù)據(jù)的索引信息,則A向B提供該索引信息的數(shù)據(jù)查詢服務(wù),當(dāng)B不知道數(shù)據(jù)的索引信息,則B不能獲取A的任何數(shù)據(jù)信息。該場(chǎng)景適合于當(dāng)A、B有共同的客戶注冊(cè)信息時(shí)(如用戶名、身份證號(hào)等),雙方可共享信用數(shù)據(jù)。而 一方不能主動(dòng)查詢另一方的用戶信息。
? ? ??2.1 ?身份注冊(cè)與管理
? ? ??本協(xié)議中,參與者的身份由公鑰密碼基礎(chǔ)設(shè)施(PKI)加以保護(hù),注冊(cè)中心CA向外提供注冊(cè)與身份校驗(yàn)服務(wù)。區(qū)塊鏈的共識(shí)節(jié)點(diǎn)在加入共識(shí)前先進(jìn)行注冊(cè),并由CA簽發(fā)包含其公鑰的證書,通過CA 校驗(yàn)身份后才可加入共識(shí)網(wǎng)絡(luò)環(huán)境。普通參與者采 用同樣的機(jī)制獲得公鑰證書,并參與后續(xù)的數(shù)據(jù)共享協(xié)議。
? ? ??2.2 ?區(qū)塊鏈數(shù)據(jù)訪問接口
? ? ??區(qū)塊鏈作為一種數(shù)字化的、安全的總賬賬簿,具有防篡改的特性。用于共享交換的數(shù)據(jù)存放在區(qū)塊鏈上,協(xié)議定義三類與區(qū)塊鏈進(jìn)行交互的接口,分別為Tdata 與 Taccess 與 Tdeploy。Tdeploy:每個(gè)應(yīng)用為了提供特定的服務(wù)與功能都需要在上次部署智能合約,所以本系統(tǒng)在進(jìn)行數(shù) 據(jù)共享時(shí)需要通過deploy命令部署智能合約,即鏈碼 Chaincode 。Tdata:存儲(chǔ)數(shù)據(jù)協(xié)議。當(dāng)系統(tǒng)希望區(qū)塊鏈通過BuildBlock構(gòu)建區(qū)塊存儲(chǔ)數(shù)據(jù)時(shí),首先將數(shù)據(jù)打包成交易,并將列作為關(guān)鍵信息寫入交易,簽名后進(jìn)行 廣播,Peer收到交易后傳遞給共識(shí)插件進(jìn)行全網(wǎng)共識(shí)。Taccess:查找數(shù)據(jù)協(xié)議。以V作為關(guān)鍵信息遍歷區(qū)塊鏈中的區(qū)塊,找到其中所有的Transactions 信息。再遍歷Transactions以key為索引找到對(duì)應(yīng)的交易,校驗(yàn)其智能合約ID和操作類型,并驗(yàn)證其完整性后得到內(nèi)部payLoad數(shù)據(jù)。2.3 ?隱私數(shù)據(jù)共享協(xié)議假設(shè)數(shù)據(jù)提供者為A節(jié)點(diǎn),數(shù)據(jù)請(qǐng)求者為B節(jié)點(diǎn)。CA節(jié)點(diǎn)啟動(dòng)并進(jìn)行預(yù)注冊(cè)后,協(xié)議的具體流程如圖1所示。

圖1 ?隱私數(shù)據(jù)共享協(xié)議流程圖
? ? ??協(xié)議執(zhí)行流程為:
? ? ??(1) A用戶計(jì)算數(shù)據(jù)索引,該數(shù)據(jù)索引可根據(jù)不同的數(shù)據(jù)類型變化,例如,金融企業(yè)可以通過用戶名及身份證號(hào)來作為數(shù)據(jù)索引。A將數(shù)據(jù)索引通過哈希算法計(jì)算哈希值Hash(index)。以該哈希值作為Key, {userld,peerld}打包成一對(duì)參數(shù)作為data通過Tdata協(xié)議進(jìn)行存儲(chǔ),存儲(chǔ)的數(shù)據(jù)類型為STORE_JNDEX,同時(shí)將數(shù)據(jù)索引與真正數(shù)據(jù)之間的映射關(guān)系存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中。
? ? ??(2) B用戶通過數(shù)據(jù)索引查詢數(shù)據(jù),對(duì)該索引同樣計(jì)算哈希Hash (index),通過Taccess協(xié)議在區(qū)塊鏈中找到對(duì)應(yīng)的完整數(shù)據(jù)擁有者,查找類型為 STORE _INDEX。
? ? ??(3) B節(jié)點(diǎn)將數(shù)據(jù)索引與自己的身份信息做 Hash計(jì)算摘要后,通過區(qū)塊鏈底層P2P網(wǎng)絡(luò)作為 請(qǐng)求信息單播給提供者A。同時(shí)將之前的哈希值一同發(fā)送。可通過參數(shù)設(shè)置是否需要TLS/SSL安全信道進(jìn)行傳輸。這一步的目的是通知數(shù)據(jù)提供者本節(jié)點(diǎn)具有獲取共享數(shù)據(jù)的權(quán)限,是數(shù)據(jù)的合法使用者。(4) A節(jié)點(diǎn)接受請(qǐng)求,對(duì)B的身份信息與數(shù)據(jù)索引的正確性進(jìn)行校驗(yàn)。校驗(yàn)通過后,通過數(shù)據(jù)索引從本地?cái)?shù)據(jù)庫(kù)中找到真正數(shù)據(jù),并為B請(qǐng)求的數(shù)據(jù)隨機(jī)生成對(duì)稱密鑰Key。使用B的公鑰通過
加密后,利用Tdata協(xié)議將加密后的對(duì)稱 密鑰存儲(chǔ)在區(qū)塊鏈上,存儲(chǔ)類型為STORE_KEY。同 時(shí)將使用
即對(duì)稱加密后的數(shù)據(jù)也通過Tdata 協(xié)議存放在區(qū)塊鏈上,存儲(chǔ)類型為STORE_DATA。(5 ) B節(jié)點(diǎn)以hash (index+id)作為key通過Taccess獲取加密后的對(duì)稱密鑰后,使用私鑰
解密,并使用key對(duì)從區(qū)塊鏈上獲取的完整 數(shù)據(jù)進(jìn)行對(duì)稱解密即可完成數(shù)據(jù)共享過程。
? ? ??03協(xié)議安全性分析
? ? ??本節(jié)我們將對(duì)前一小節(jié)設(shè)計(jì)的協(xié)議進(jìn)行簡(jiǎn)單的 正確性與安全性的分析,并在協(xié)議中引入仲裁機(jī)制, 當(dāng)數(shù)據(jù)提供者與請(qǐng)求者在數(shù)據(jù)共享的過程中發(fā)生爭(zhēng)議時(shí)提供相應(yīng)的解決方案。依舊假設(shè)數(shù)據(jù)提供者為 A,數(shù)據(jù)請(qǐng)求者為B,真實(shí)數(shù)據(jù)用出表示,數(shù)據(jù)索引用index表示。
? ? ??3.1 ?正確性
? ? ??在本系統(tǒng)中,每個(gè)真實(shí)數(shù)據(jù)都會(huì)擁有一個(gè)對(duì)應(yīng)的數(shù)據(jù)索引。節(jié)點(diǎn)之間預(yù)先溝通或通過某種手段對(duì)這個(gè)映射關(guān)系達(dá)成一致。只有獲取提供正確的數(shù)據(jù)索引才有權(quán)利共享數(shù)據(jù)提供者擁有的真實(shí)數(shù)據(jù)。
? ? ??(1)?根據(jù)協(xié)議,A的本地?cái)?shù)據(jù)庫(kù)中會(huì)存儲(chǔ) data與index之間的映射關(guān)系。A對(duì)index進(jìn)行哈希計(jì)算,并將計(jì)算結(jié)果hash(index)與自己的身份信息存儲(chǔ)在鏈上,那么若B通過某種途徑獲取
;則它計(jì)算
后,如果index與index '相同,則hash(index)等于
,即B可以成功在鏈上找到對(duì)應(yīng)的區(qū)塊,并獲取A的身份信息。
? ? ??(2)B將 hash(index')+id(B)+hash(index+id(B)) 發(fā)送給A后,A計(jì)算本地是否有對(duì)應(yīng)的索引,并通過計(jì)算hash(index+id(B))是否與B傳過來的一致來檢測(cè)B身份標(biāo)識(shí)的有效性。若索引存在并且身份檢 查通過,則說明需要向B提供真實(shí)數(shù)據(jù)。A在本地 生成隨機(jī)對(duì)稱密鑰后,使用B的公鑰對(duì)對(duì)稱密鑰初進(jìn)行加密,并將
放在區(qū)塊上,由于B擁有index,則它在本地計(jì)算 hash(index+id(B)),即可在區(qū)塊鏈上找到對(duì)應(yīng)的區(qū)塊。B使用自己的私鑰即可成功解密獲取對(duì)稱密鑰key。
? ? ??(3)A在本地生成對(duì)稱密鑰key后,從本地?cái)?shù)據(jù)庫(kù)中根據(jù)index查詢到真正的數(shù)據(jù),并將data使用加密,將
放在區(qū)塊上。同樣,B可以在區(qū)塊鏈上根據(jù)hash(index+id(B))找到對(duì)應(yīng)的區(qū)塊,由于B之前已經(jīng)獲取了對(duì)稱密鑰key,那它就使用key進(jìn)行解密,成功拿到需要的最終數(shù)據(jù)。根據(jù)以上三步看到整個(gè)過程具有可行性與正確性,在雙方均配合的情況下,擁有數(shù)據(jù)索引的數(shù)據(jù)請(qǐng)求者可以成功從數(shù)據(jù)提供者中獲取數(shù)據(jù)。
? ? ??3.2 ?安全性
? ? ??現(xiàn)在分析協(xié)議的安全性,假設(shè)系統(tǒng)中存在攻擊者C, C可能已經(jīng)經(jīng)過CA的授權(quán),并且通過登錄成為了網(wǎng)絡(luò)中合法的成員。C試圖在沒有獲取索引的前提下,根據(jù)區(qū)塊鏈上的已有信息或者通過竊聽節(jié)點(diǎn)之間的通信流來嘗試得到真實(shí)數(shù)據(jù)。首先分析本協(xié)議如何抵抗被動(dòng)攻擊:(1) C無(wú)法獲知A擁有的數(shù)據(jù)索引信息。區(qū)塊鏈中存儲(chǔ)了 hash(index+id(A)),該類信息為數(shù)據(jù) 索引的散列值。對(duì)于該類信息,因?yàn)楸竟?jié)開始已分析了 SHA-256算法的單向性與抗強(qiáng)碰撞的能力,C 是無(wú)法根據(jù)已有信息反推得到index, C需要耗費(fèi)大量資源去隨機(jī)找到一個(gè)
使得
等于hash(index),可知C沒有能力得到關(guān)于index的任何信息。
? ? ??(2) C無(wú)法得到與B有關(guān)的對(duì)稱密鑰key的任何信息。根據(jù)設(shè)計(jì)的協(xié)議,鏈上存儲(chǔ)了
,該類信息存儲(chǔ)之后對(duì)真實(shí)數(shù)據(jù)加密的對(duì)稱密鑰。因?yàn)楸鞠到y(tǒng)底層有可信PKI基礎(chǔ)設(shè)施的支撐,并且節(jié)點(diǎn)或用戶在生成私鑰后一直保存 在本地從未對(duì)外公開或傳遞過。因此C無(wú)法獲得B 的私鑰,即他無(wú)法通過解密得到對(duì)稱密鑰key的任何信息。
? ? ??(3)?無(wú)法獲得真實(shí)數(shù)據(jù)。A將真實(shí)數(shù)據(jù)以
的形式存儲(chǔ)在鏈上, 即真實(shí)數(shù)據(jù)已經(jīng)被對(duì)稱密鑰key加密。在(2)中 我們有了C無(wú)法獲得對(duì)稱密鑰key的前提,因此C 無(wú)法對(duì)其進(jìn)行解密,即它無(wú)法得到真實(shí)數(shù)據(jù)的任 何消息。C還可以通過監(jiān)聽網(wǎng)絡(luò)信息進(jìn)行主動(dòng)攻擊,可能存在兩種主動(dòng)攻擊方式。第一通過模擬B的身 份信息來假裝自己是B,誘騙A認(rèn)為自己擁有數(shù)據(jù)索引,有權(quán)利獲取真實(shí)數(shù)據(jù);第二種情況是嘗 試將獲取的身份信息由B改成C。但下面將證明這 兩點(diǎn)依舊是不可行的。對(duì)于第一點(diǎn),雖然通過模擬 B, A會(huì)受騙并把加密后的對(duì)稱密鑰和真實(shí)數(shù)據(jù)存 放在區(qū)塊鏈上,但由于C沒有B對(duì)應(yīng)的私鑰,因此它依舊無(wú)法進(jìn)行解密。而為了實(shí)現(xiàn)第二點(diǎn),即使C 可以將id(B)改為id(C),但C同時(shí)需要構(gòu)造 hash(index'?+id(C)),即它需要重新計(jì)算{index+id(C)} 的散列值。前面分析過,C無(wú)法根據(jù)hash(index)得到index,即它無(wú)法計(jì)算得到hash(index'?+id(C))。因此,C通過嗅探網(wǎng)絡(luò)上的數(shù)據(jù)包進(jìn)行主動(dòng)攻擊仍然 無(wú)法得到關(guān)于真實(shí)數(shù)據(jù)的任何信息。同時(shí),節(jié)點(diǎn)B在于A的通信過程中,也只能獲取它擁有的index對(duì)應(yīng)的真實(shí)數(shù)據(jù)data,無(wú)法獲 得A擁有的其他數(shù)據(jù)的任何信息。
? ? ??04結(jié) 語(yǔ)
? ? ??本文針對(duì)用戶間數(shù)據(jù)共享的場(chǎng)景,基于區(qū)塊鏈以及智能合約技術(shù)給出了一種隱私保護(hù)的數(shù)據(jù)共享協(xié)議。該協(xié)議可以允許用戶實(shí)現(xiàn)具有共同索引的數(shù)據(jù)交換共享,避免單方面的數(shù)據(jù)流動(dòng)。同時(shí)協(xié)議過程由數(shù)據(jù)的擁有者主動(dòng)授權(quán),并且協(xié)議執(zhí)行過程可 實(shí)現(xiàn)公平仲裁。
(部分內(nèi)容來源網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除)