拿什么保护你,我的区块链
被納入新基建的區(qū)塊鏈,以數(shù)據(jù)不可篡改、可公開(kāi)監(jiān)管、便于查證的特性,廣泛應(yīng)用于有多方參與的系統(tǒng)中,為多方交互的信息(行為、數(shù)據(jù)等)提供可靠的存證。那么,在信息上鏈接受公開(kāi)監(jiān)管的同時(shí),能否為信息提供隱私保護(hù)呢?隱私保護(hù)的數(shù)據(jù)又如何能驗(yàn)證其可靠性呢?騰訊云區(qū)塊鏈?zhǔn)褂猛瑧B(tài)加密、零知識(shí)證明、可信計(jì)算等技術(shù),為區(qū)塊鏈上數(shù)據(jù)隱私和行為可靠性提供了多方位的保障,并且提供了對(duì)國(guó)密算法的支持,在金融、政務(wù)等場(chǎng)景中可以選擇適配SM2-SM3國(guó)密證書(shū)套件,完美對(duì)接國(guó)標(biāo)、行標(biāo)。那么騰訊云區(qū)塊鏈究竟是怎么做到同時(shí)兼顧隱私性、可靠性的呢?
“?術(shù)語(yǔ)小課堂:
隱私性:我有一個(gè)值,但我不告訴你是多少。
可靠性:我有一個(gè)值,我向你證明并且證明是我的。”
01
—
鏈上的交易場(chǎng)景
以鏈上交易為例,有三種能兼顧隱私性和可靠性的交易方案:同態(tài)加密(HE)、零知識(shí)證明(ZK-Proof)、可信計(jì)算(TEE)。如Fig. 1所示的轉(zhuǎn)賬場(chǎng)景是區(qū)塊鏈上常見(jiàn)的交易場(chǎng)景。在如Bitcoin、Ethereum等公有鏈中,這類交易是明文儲(chǔ)存在鏈上的,也就是說(shuō)任何人都可以通過(guò)區(qū)塊鏈提供的查詢功能獲得任意賬戶的余額、資金動(dòng)向等信息。
Fig. 1 鏈上交易:從賬戶??轉(zhuǎn)賬到賬戶??
在這筆交易中,需要公開(kāi)審計(jì)的是???,而需要保護(hù)的信息也正是?、、??、??、?。如何在證明???這個(gè)關(guān)系的同時(shí),不能泄露?、、??、??、?這幾項(xiàng)賬戶、交易信息呢?如果直接把賬戶余額?、?和轉(zhuǎn)賬金額??加密了,要如何在鏈上對(duì)新密文進(jìn)行公開(kāi)的驗(yàn)證呢?
02
—
鏈上的交易場(chǎng)景
舉個(gè)例子,我存在銀行的余額可進(jìn)行加密,銀行也不知道密鑰,這樣我的余額是保密的;但同時(shí),如果我消費(fèi)了10塊錢(qián),銀行能基于我的加密余額減掉相應(yīng)的錢(qián)。這就相當(dāng)于保護(hù)隱私的情況下,執(zhí)行交易。而這就是同態(tài)加密。
同態(tài)加密算法很多小伙伴都接觸過(guò)甚至使用過(guò)。這類加密算法具有將密文的運(yùn)算映射到明文的四則運(yùn)算的特性。使用同態(tài)加密可以直接對(duì)密文進(jìn)行運(yùn)算,以改變隱藏在密文中的明文。
2.1 同態(tài)加密簡(jiǎn)介:如何選擇同態(tài)加密算法?
????“?符號(hào)小課堂:
?????:?:是加密算法,為明文原文,為加密后的密文。
?????:?:是解密算法,為密文,為解密后所得明文。
?????????、、?:密文的同態(tài)加法、減法、乘法運(yùn)算符”
根據(jù)算法所支持的同態(tài)運(yùn)算,同態(tài)加密的能力各有不同。常見(jiàn)的、得到更多關(guān)注的同態(tài)運(yùn)算是四則運(yùn)算:
2.1.1 對(duì)加法同態(tài):(加法與減法在現(xiàn)有算法的數(shù)學(xué)結(jié)構(gòu)中是同類型的運(yùn)算)
? ? “?密文與密文相加:??
????密文與明文相加:??
????密文相反數(shù):??
????密文與密文相減:??
????密文與明文相減:??”
2.1.2?對(duì)乘法同態(tài)
? ? “?密文與明文相乘:??
?????密文與密文相乘:???”
騰訊云區(qū)塊鏈同態(tài)加密同時(shí)支持了Paillier公鑰加密與Lattice加密算法。
加法同態(tài)最容易支持,幾乎所有同態(tài)加密算法都支持對(duì)加法的同態(tài)運(yùn)算。而當(dāng)前比較實(shí)用的算法中,Paillier公鑰加密是除了支持對(duì)加法同態(tài)之外還能支持密文與明文相乘的同態(tài)加密算法。而全同態(tài)的能力,也就是對(duì)加法、乘法甚至除法的同態(tài)運(yùn)算都支持的能力,則多見(jiàn)于基于Lattice這種數(shù)學(xué)結(jié)構(gòu)設(shè)計(jì)的加密算法中。而基于Lattice的算法是post-quantum的,也就是說(shuō),即使在使用量子計(jì)算的環(huán)境中,這些算法仍然是安全不可暴力破解的,但這些算法本身的耗時(shí)也非常高。
Paillier這個(gè)基于DCRA假設(shè) (decisional composite residuosity assumption) 的算法,每秒可以計(jì)算上萬(wàn)次同態(tài)加法(上次作者親自benchmark是每秒15000次:在普通Linux系統(tǒng)上的Golang實(shí)現(xiàn),安全等級(jí)在2048 bit),而基于Lattice的BGV算法 (Brakerski-Gentry-Vaikuntanathan) 在相同安全性配置下每秒只能計(jì)算不到兩次(benchmark:同環(huán)境同安全等級(jí)下大約每次需要700-800毫秒)。這也就是安全等級(jí)、功能強(qiáng)度與性能的永恒的權(quán)衡(trade-off)。
那么強(qiáng)大的全同態(tài)加密就沒(méi)有用武之地了嗎?其實(shí)對(duì)于每10分鐘出個(gè)塊的公鏈,800毫秒的計(jì)算速度還是可以接受的。而在支持并要求快速出塊的場(chǎng)景下,我們還是選擇Paillier,畢竟兼顧了性能與可靠性。
Paillier在各種語(yǔ)言中都有開(kāi)源實(shí)現(xiàn),一部分實(shí)現(xiàn)是已經(jīng)受過(guò)大規(guī)模使用的洗禮。而基于Lattice的post-quantum算法們應(yīng)用并不廣泛,而親測(cè)除了效率之外,還是非常容易上手使用的。HElib是個(gè)C實(shí)現(xiàn),與其他語(yǔ)言的項(xiàng)目兼容性喜人。
2.2?處理同態(tài)加密中的負(fù)數(shù)
密碼學(xué)算法通常使用有限的數(shù)域作為明文、密文、簽名、公私鑰等的取值范圍,而且通常是循環(huán)的有限數(shù)域,比如???生成的整數(shù)域就是{??}這個(gè)集合,但取值會(huì)循環(huán),??會(huì)跳回?cái)?shù)域的第一個(gè)元素???。這類數(shù)域經(jīng)過(guò)平移可以使元素變成一半正一半負(fù)。例如??生成 {??},他與??生成的數(shù)域在數(shù)學(xué)結(jié)構(gòu)上是等效的,但在實(shí)際應(yīng)用中就引入了負(fù)數(shù),可以支持更多場(chǎng)景,因此變得更實(shí)用了。
同態(tài)加密這類密碼學(xué)算法在使用中也可以通過(guò)平移數(shù)域的方法,將原本只包含正整數(shù)的明文取值范圍變成包含負(fù)整數(shù)的取值范圍,并且這個(gè)改動(dòng)也只需要在加密、解密算法的實(shí)現(xiàn)中做一些工程改動(dòng)即可。常用的做法是,對(duì)于一個(gè)??生成的域,假設(shè)一個(gè)值為???,如果??,則直接使用??;否則計(jì)算
得到一個(gè)負(fù)數(shù)。這種映射方式可以保證明文、密文的計(jì)算是對(duì)應(yīng)的,不會(huì)出現(xiàn)判斷邊界導(dǎo)致的錯(cuò)誤。
2.3?處理同態(tài)加密中的小數(shù)
前文提到的這些同態(tài)加密算法,他們距離現(xiàn)實(shí)還有一個(gè)大障礙——原算法為整數(shù)設(shè)計(jì)。這也可以理解,因?yàn)檫@些密碼學(xué)算法全是基于數(shù)論的,他們所依賴的數(shù)學(xué)理論中,數(shù)學(xué)結(jié)構(gòu)都是以整數(shù)來(lái)表達(dá)的,對(duì)整數(shù)有天然的兼容性,而對(duì)小數(shù)就不是那么友好了。那么在使用時(shí),我們就需要對(duì)這些算法做一些兼容性的處理。其實(shí)這些處理都比較直觀,而且都是從工程上來(lái)解決,并不需要從理論上解決。
2.3.1 保留小數(shù)位數(shù)固定的場(chǎng)景:
例如記錄金額的數(shù)據(jù),通常保留兩位小數(shù)。這種場(chǎng)景中,加密前對(duì)所有數(shù)據(jù)都乘100化成整數(shù),解密后除以100取回原本的小數(shù)即可。只要不涉及密文與密文的乘法運(yùn)算,這種方法就可以解決小數(shù)的兼容問(wèn)題。
2.3.2 ?保留隨意位數(shù)小數(shù):
將數(shù)據(jù)的整數(shù)部分與小數(shù)部分拆開(kāi)進(jìn)行加密,在解密后重新組合。使用這個(gè)方案時(shí),要注意為保存小數(shù)部分的數(shù)據(jù)分量保留一部分緩沖位數(shù),當(dāng)密文計(jì)算導(dǎo)致進(jìn)位到整數(shù)部分時(shí),可以暫時(shí)將這部分整數(shù)值保留在這個(gè)密文中。用 Paillier 算法為例子,明文長(zhǎng)度允許為 2048 bit,作為小數(shù)分量的明文可以考慮使用 1024 位表示小數(shù),另外 1024位預(yù)留給可能進(jìn)位的整數(shù) (實(shí)際情況可能保留64位整數(shù)就很足夠了)。
2.3.3 準(zhǔn)確計(jì)算結(jié)果:
在需要準(zhǔn)確保留運(yùn)算結(jié)果的場(chǎng)景中,需要將計(jì)算中涉及到的小數(shù)化成分?jǐn)?shù),并把分子、分母拆開(kāi)分別加密。計(jì)算時(shí),以??為例,需要在密文上計(jì)算??和??作為結(jié)果的密文,解密后計(jì)算??。這種場(chǎng)景需要全同態(tài)算法支持。
2.4?使用同態(tài)加密保護(hù)交易隱私
回到鏈上交易的問(wèn)題,引入同態(tài)加密后,交易過(guò)程變成Fig. 2所示。
Fig.2 同態(tài)加密保護(hù)的鏈上交易
如圖中的計(jì)算,對(duì)等式??的驗(yàn)證可以轉(zhuǎn)化為密文上的驗(yàn)證:??。如此,鏈上數(shù)據(jù)全程都是密文,卻并不妨礙公開(kāi)監(jiān)管。
03
—
運(yùn)算合理性怎么保證——零知識(shí)證明
我不給你展示身份證,但是我要向你證明我已經(jīng)年滿18歲,這時(shí)候應(yīng)該怎么辦呢?
在上一部分,我們討論了使用同態(tài)加密來(lái)保護(hù)鏈上數(shù)據(jù)隱私又能提供公開(kāi)監(jiān)管的方案。如果在交易場(chǎng)景中,我們對(duì)賬戶余額做出一定的限制,比如?、?都不可以小于??(??是有可能小于??的),那么同態(tài)加密提供的方案就不能再交易執(zhí)行之前判斷這個(gè)交易是否符合限制條件了。這時(shí)候,我們可以引入另一個(gè)密碼學(xué)算法體系——零知識(shí)證明。
簡(jiǎn)單來(lái)說(shuō),零知識(shí)證明就是,我有一個(gè)??,我需要向你證明??滿足的一個(gè)關(guān)系,例如??或者??,我不告訴你??的準(zhǔn)確值還要說(shuō)服你??滿足的一個(gè)關(guān)系,例如??或者???,我不告訴你??的準(zhǔn)確值還要說(shuō)服你??滿足這個(gè)關(guān)系。一個(gè)直觀的例子如Fig.3所示。證明者P知道山洞中密道的存在,而驗(yàn)證者V并不知道。P先隨機(jī)選擇A、B兩條通道之一進(jìn)入山洞中,V來(lái)到洞口,隨機(jī)指定A、B之一要求P從指定通道走出山洞。多次實(shí)驗(yàn)后,V被說(shuō)服了P知道密道這一事實(shí),但V仍然不知道密道在哪里。而在區(qū)塊鏈交易場(chǎng)景中,我們需要的效果是所有人都被說(shuō)服??和??這個(gè)事實(shí),卻不知道?、?的具體值。在這部分,我們會(huì)詳細(xì)介紹如何使用Pedersen承諾、Bulletproofs零知識(shí)范圍證明來(lái)達(dá)到這個(gè)目標(biāo)。
? ? “?注:在這部分的算法里出現(xiàn)的大寫(xiě)字母變量為橢圓曲線上的點(diǎn),小寫(xiě)字母變量為數(shù)值。除法符號(hào)表示的是模擬運(yùn)算。?”
Fig.3 密道的零知識(shí)證明
3.1?Pedersen承諾(commitment) 算法[3]
承諾算法是一種提供數(shù)據(jù)綁定及數(shù)據(jù)保密的算法,有兩個(gè)基本接口:制作承諾 (commit)和打開(kāi)承諾 (open)。
??:輸入一個(gè)明文數(shù)值??和一個(gè)隨機(jī)致盲因子??,返回一個(gè)對(duì)??的承諾??。其中,致盲因子也稱為opening,可以視作對(duì)稱簽名算法的私鑰或者加密算法中的解密密鑰。
??:打開(kāi)承諾是驗(yàn)證一個(gè)承諾??是否與其宣稱綁定的值??真實(shí)綁定。??是制作承諾時(shí)所使用的致盲因子。
承諾具有兩個(gè)屬性:隱藏性 (hiding) 和綁定性 (binding)。
隱藏性:給出一個(gè)承諾???,無(wú)法算出其中綁定的數(shù)值??。更高的安全性則要求敵手選擇兩個(gè)數(shù)值,由被挑戰(zhàn)者任選一個(gè)制作成承諾,而敵手猜出正確數(shù)值的概率不高于??。
綁定性:給出一個(gè)承諾??及其綁定的數(shù)值和致盲因子對(duì)??使得??,無(wú)法找到另一組??使得??。
承諾的隱藏性可以為鏈上數(shù)據(jù)提供隱私保護(hù),而綁定性則可以為保密數(shù)據(jù)的鏈上公開(kāi)監(jiān)管提供可靠性保障。
3.1.1 Pedersen承諾算法詳情
Pedersen承諾是一個(gè)基于橢圓曲線 (EC) 的密碼學(xué)算法。我們?nèi)∮脵E圓曲線加法群上的兩個(gè)隨機(jī)基點(diǎn)?、?作為公共參數(shù)。
??:計(jì)算??作為??的承諾。
??:判斷??,若等式成立則返回??,否則返回??。
3.1.2 Pedersen承諾的同態(tài)運(yùn)算
Pedersen承諾支持部分同態(tài)運(yùn)算:承諾+ 承諾,承諾 + 數(shù)值,承諾 – 承諾,承諾 – 數(shù)值,承諾的相反數(shù),承諾??數(shù)值。
假設(shè)有兩個(gè)承諾??、???,和另一個(gè)數(shù)值??。
承諾 + 承諾:已知??,求??的Pedersen承諾
??
在??中,綁定的數(shù)值變成了??,而致盲因子opening變成了??。
承諾 + 數(shù)值:已知??和??,求??的Pedersen承諾
??
在??中,綁定的數(shù)值變成了??,而致盲因子仍然為??不變。
承諾 – 承諾:已知??,求??的Pedersen承諾
??
在??中,綁定的數(shù)值變成了??,而致盲因子變?yōu)??。
承諾 – 數(shù)值:
??
在??中,綁定的數(shù)值變成了??,而致盲因子仍為??。
承諾相反數(shù):
??
在??中,綁定的數(shù)值變成了??,而致盲因子變?yōu)??。
承諾??數(shù)值:
??
在??中,綁定的數(shù)值變成了??,而致盲因子變?yōu)??。
3.2 Bulletproofs零知識(shí)范圍證明(zk-range-proof)算法[4,5]
Pedersen承諾算法只能保證數(shù)值運(yùn)算正確地在密文 (承諾) 上進(jìn)行,而不能給運(yùn)算結(jié)果任何限制。而在特定場(chǎng)景中,例如轉(zhuǎn)賬——我們要求轉(zhuǎn)出賬戶的余額要大于轉(zhuǎn)出值,也就是運(yùn)算結(jié)果需要為非負(fù)數(shù)。零知識(shí)范圍證明可以提供在不公開(kāi)數(shù)值的情況下證明一個(gè)數(shù)在某個(gè)特定范圍內(nèi)的能力。
零知識(shí)證明具有三個(gè)特性:零知識(shí)、完備性和公正性。
零知識(shí):通過(guò)給出的證明、驗(yàn)證過(guò)程及公共信息,無(wú)法計(jì)算出證明中包含的隱藏命題組件。
完備性:按算法制作的對(duì)正確命題的證明都能通過(guò)驗(yàn)證。
公正性:由不正確的命題生成的證明無(wú)法通過(guò)驗(yàn)證。
在Bulletproofs零知識(shí)范圍證明中,要證明的基本命題是數(shù)值?〖μ〗?,其中??是需要隱藏的命題組件,?μ?是一個(gè)大于1的正整數(shù),實(shí)現(xiàn)時(shí)為了方便,通常取?μ?,零知識(shí)體現(xiàn)在從證明、驗(yàn)證過(guò)程中無(wú)法得出任何一個(gè)證明π所證明的命題中的??的值。
Bulletproofs也是一個(gè)基于EC的算法,并且使用Pedersen承諾作為證明的一部分用以綁定及隱藏??。其基本設(shè)計(jì)如下:
公共信息:?μ?
證明者的秘密輸入:??
1.???驗(yàn)證者隨機(jī)選擇??,計(jì)算??,其中??。驗(yàn)證者把??發(fā)送給證明者。
2.???證明者把??轉(zhuǎn)換為 bit 流的形式??,其中??。證明者隨機(jī)選擇??并計(jì)算??。注意??。
證明者現(xiàn)在需要證明??,而不公開(kāi)??。這種類型的零知識(shí)證明可以使用??protocol來(lái)進(jìn)行。以上的算法步驟都是需要驗(yàn)證者與證明者實(shí)時(shí)交互才能完成的。我們可以用 Fiat-Shamir 啟發(fā)式把交互式的證明轉(zhuǎn)化成非交互式的證明,也就是證明者算出一個(gè)非交互式證明之后,任何人都能在沒(méi)有證明者協(xié)助的情況下進(jìn)行驗(yàn)證 (類似簽名中的驗(yàn)簽)。關(guān)于??protocol?和 Fiat-Shamir 協(xié)議的基本概念,可以參考下面的知識(shí)小課堂。
證明輸入中的??其實(shí)是??的一個(gè) Pedersen 承諾。在轉(zhuǎn)換成非交互式證明后,驗(yàn)證過(guò)程主要驗(yàn)證了以下幾點(diǎn):
證明中的與承諾中綁定和隱藏的是同一個(gè)值;
證明中的在范圍內(nèi)。
多個(gè)不同的證明(除了致盲因子外,證明還有其他隨機(jī)因子)可以對(duì)應(yīng)同一個(gè)承諾,而多個(gè)不同的承諾不可能與同一個(gè)證明對(duì)應(yīng)通過(guò)驗(yàn)證。
3.3 任意范圍的證明
這個(gè)部分,我們討論如何把證明范圍??擴(kuò)展到任意范圍??。要證明??,我們可以證明??。結(jié)合 Pedersen 承諾的同態(tài)運(yùn)算,我們可以很容易地通過(guò)兩個(gè)非交互式證明完成任意范圍證明。
回到我們最初的交易場(chǎng)景中,鏈上數(shù)據(jù)以 Pedersen 承諾的形式上鏈,配合一個(gè)證明承諾中明文大于零的 Bulletproofs 證明,其他參與者就可以在不知道明文的情況下也能被說(shuō)服改明文大于零了。計(jì)算時(shí),利用 Pedersen 承諾的同態(tài)性質(zhì),其他鏈上參與者可以很容易地看到??這個(gè)關(guān)系,并且能通過(guò) Bulletproofs 的證明確認(rèn)??與??都大于零。
04
—
把計(jì)算邏輯放進(jìn)保險(xiǎn)箱——可信計(jì)算(TEE)
前面兩個(gè)小節(jié)為大家介紹了兩套解決區(qū)塊鏈上機(jī)密交易的密碼學(xué)體系。密碼學(xué)算法提供的安全等級(jí)是比較高的,但是他們也有他們的缺點(diǎn):兼容性問(wèn)題和運(yùn)算效率較低的問(wèn)題。面對(duì)安全等級(jí)、功能性和性能永恒的trade-off,我們還有工程+密碼學(xué)的解決方案——可信計(jì)算。
相較于密碼學(xué)算法,可信計(jì)算雖然無(wú)法在理論上嚴(yán)謹(jǐn)?shù)乇蛔C明安全 (推導(dǎo)到與NP問(wèn)題等效),但是在現(xiàn)實(shí)中攻破可信計(jì)算環(huán)境是非常困難的,而且他具有兼容性好、運(yùn)算靈活、運(yùn)算效率高的優(yōu)勢(shì),確實(shí)是一個(gè)非常優(yōu)秀的密碼學(xué)算法替代品。
可信計(jì)算本質(zhì)上是用硬件來(lái)構(gòu)建一個(gè)反沙箱環(huán)境,外部(包括OS)不能自主訪問(wèn)或更改可信硬件內(nèi)部的軟件、數(shù)據(jù)。結(jié)合一些簡(jiǎn)單的密碼學(xué)算法,可信硬件可以與外部進(jìn)行安全交互,以實(shí)現(xiàn)在可信環(huán)境中處理敏感數(shù)據(jù),然后以密文形式取出并提供可靠性認(rèn)證的目的。
舉個(gè)例子,騰訊計(jì)費(fèi)業(yè)務(wù)沉淀的風(fēng)控系統(tǒng),積累了大量精準(zhǔn)的風(fēng)控模型能力,如果外部合作游戲廠商希望借助于騰訊的風(fēng)控模型提高業(yè)務(wù)風(fēng)控效果,但又不希望將用戶信息的敏感數(shù)據(jù)對(duì)外暴露。這是就可我們通過(guò)可信計(jì)算確保風(fēng)控模型與用戶信息在可信域內(nèi)處理,并結(jié)合區(qū)塊鏈,保證交互留痕、可追溯以及透明性。
?
當(dāng)下主流的可信硬件有三種:
SGX (Software Guard Extension):Intel的處理器擴(kuò)展芯片,提供有限的安全指令集,有較強(qiáng)計(jì)算能力,在應(yīng)用層為軟件加固,本身無(wú)存儲(chǔ)能力。
TPM (Trusted Platform Module):TCG (AMD, HP, IBM, Intel, MS聯(lián)合項(xiàng)目) 的可信計(jì)算模塊,最先啟動(dòng),可用于從硬件到軟件的認(rèn)證鏈,本身?yè)碛休^弱的計(jì)算、存儲(chǔ)能力。
TrustZone:ARM架構(gòu)中的可信計(jì)算擴(kuò)展模塊,非公開(kāi)架構(gòu),與SGX行為相似。
由于 SGX 具有較強(qiáng)的計(jì)算能力,可以兼容的運(yùn)算邏輯靈活多樣(幾乎可以是圖靈完備的),所以我們以 SGX 為介紹主體。SGX 設(shè)計(jì)初衷是保護(hù)運(yùn)行環(huán)境不被信任域外的軟硬件讀寫(xiě)。這里的敵手包括本地環(huán)境中的 OS、hypervisor、BIOS、firmware 等,即使同系統(tǒng)中其他軟件受到提權(quán)攻擊,也不會(huì)影響信任域內(nèi)。
Fig.4 攻擊面對(duì)比:左圖黃色虛線框中為一般運(yùn)行環(huán)境的攻擊面,右圖黃色虛線框中為SGX環(huán)境中的攻擊面
SGX 硬件中有固有的兩個(gè)私鑰:root seal key 和 root provisioning key,分別用于衍生加密密鑰和認(rèn)證可靠性。這兩個(gè)私鑰是使用可編程只讀存儲(chǔ)器保存的。可編程只讀存儲(chǔ)器在燒制過(guò)一次之后無(wú)法更改,而且在 SGX 中無(wú)法被外部訪問(wèn)。SGX 的隔離原理如Fig. 5所示,其中 Enclave 是運(yùn)行外部傳入的邏輯的一個(gè)資源分片。
Fig.5 SGX的隔離、隱私保護(hù)、認(rèn)證
Provisioning key 的使用類似證書(shū),而Intel是一個(gè)證書(shū)發(fā)行 CA,會(huì)為所有 SGX 模塊的 provisioning key 頒發(fā)一個(gè)獨(dú)立的證書(shū)。Seal key 是絕對(duì)只存在于 SGX 內(nèi)的,且每一個(gè) SGX 硬件擁有一個(gè)唯一的 seal key (當(dāng)然隨機(jī)數(shù)存在碰撞,但概率極低),用于生成后續(xù)所有加密用私鑰或密鑰對(duì)。外部通過(guò) provisioning key 的證書(shū)體系驗(yàn)證 SGX 的可靠性:是否為可信環(huán)境,Enclave 中的運(yùn)行邏輯是否未被篡改。內(nèi)外通信時(shí),使用 seal key 衍生的密鑰加密。Provisioning 和 seal 兩個(gè)機(jī)制分別保證了可信計(jì)算的可靠性 (包括運(yùn)行邏輯不被篡改、結(jié)果被認(rèn)證) 和隱私性。
4.1 使用可信計(jì)算保護(hù)交易隱私
那么如何把可信計(jì)算 (TEE: trusted executionenvironment) 應(yīng)用到區(qū)塊鏈的機(jī)密交易場(chǎng)景中呢?首先,鏈上數(shù)據(jù)由 TEE 加密、簽名后,以密文+簽名組合的形式上鏈,也就是說(shuō)?、?賬戶余額的密文和簽名存于鏈上。在交易時(shí),外部調(diào)用方使用 TEE 的公鑰加密??并將密文傳入 TEE,TEE 上鏈取得?、?的密文和簽名,在驗(yàn)證簽名正確性后,TEE 使用自己的私鑰解密?、、?,計(jì)算出??和??,對(duì)??和??加密、簽名認(rèn)證后,輸出密文及簽名到鏈上。公開(kāi)監(jiān)管的區(qū)塊鏈參與者可以通過(guò)驗(yàn)證 TEE 簽名來(lái)驗(yàn)證鏈上數(shù)據(jù)是否可靠。鏈上交易的有效性需要由部署于 TEE 內(nèi)的邏輯來(lái)校驗(yàn),如果不符合,該邏輯需要拒絕交易。
4.2 鏈上鏈下的橋梁
TEE 也可以用于鏈上鏈下的互聯(lián)。一些場(chǎng)景中需要把計(jì)算邏輯部署在鏈下,而無(wú)法以智能合約的形式部署于區(qū)塊鏈上。例如一些國(guó)家或地區(qū)的數(shù)據(jù)不能跨地區(qū)傳到別的地區(qū)的區(qū)塊鏈上,只能在本地區(qū)對(duì)數(shù)據(jù)加工后傳出。這時(shí)候可以把數(shù)據(jù)處理邏輯部署到TEE 中,由 TEE 收集數(shù)據(jù)計(jì)算后,對(duì)結(jié)果進(jìn)行簽名認(rèn)證再傳到跨地區(qū)的區(qū)塊鏈上,區(qū)塊鏈節(jié)點(diǎn)只需要通過(guò)驗(yàn)證簽名、驗(yàn)證TEE的可靠性來(lái)決定是否接受該上鏈請(qǐng)求。
05
—
安全領(lǐng)域自主可控之光——國(guó)密算法
國(guó)密算法是一套包含對(duì)稱加密、非對(duì)稱加密、簽名、哈希等基本密碼學(xué)算法的,從算法設(shè)計(jì)、理論推導(dǎo)到開(kāi)發(fā)實(shí)現(xiàn)都是中國(guó)自主研發(fā)的密碼學(xué)算法集合。過(guò)去,商用密碼學(xué)算法是美國(guó)主導(dǎo)的。從理論到算法實(shí)現(xiàn)都是境外學(xué)者、工程師完成的。對(duì)于關(guān)系到安全的密碼學(xué)算法是否有設(shè)計(jì)上預(yù)留的后門(mén),我們并不確定。在諸如政務(wù)、軍事、金融等敏感領(lǐng)域,使用別人的算法存在敏感信息泄露、重要信息被篡改的風(fēng)險(xiǎn),因此國(guó)家推動(dòng)自主的密碼學(xué)算法勢(shì)在必行。
騰訊云區(qū)塊鏈中使用的密碼學(xué)算法,除了區(qū)塊鏈本身的哈希和簽名外,更重要是在通信過(guò)程中的證書(shū)上。騰訊云區(qū)塊鏈平臺(tái)基于自研的國(guó)密解決方案,提供了對(duì)國(guó)密證書(shū)的支持,在區(qū)塊鏈節(jié)點(diǎn)與節(jié)點(diǎn)、區(qū)塊鏈用戶與節(jié)點(diǎn)間的通信中同時(shí)支持使用傳統(tǒng) ECDSA-SHA256 證書(shū)和國(guó)密 SM2-SM3 證書(shū),在證書(shū)切換上做到配置時(shí)用戶自選、使用時(shí)用戶不感知。
目前國(guó)密算法的支持一方面符合了金融、政務(wù)以及各類企業(yè)的安全規(guī)范要求,另一方面可幫助我國(guó)區(qū)塊鏈技術(shù)實(shí)現(xiàn)安全上自主可控、不受制于人。
06
—
區(qū)塊鏈密碼安全特性的產(chǎn)業(yè)應(yīng)用
說(shuō)了一大堆,那么這些在騰訊云區(qū)塊鏈中使用到的安全技術(shù)究竟離我們的實(shí)際生活有多近呢?前文中提到的使用同態(tài)加密、零知識(shí)范圍證明實(shí)現(xiàn)的機(jī)密交易,使用可信計(jì)算實(shí)現(xiàn)的多方計(jì)算、鏈上鏈下互通究竟要怎么用呢?以下我們介紹一些實(shí)際場(chǎng)景的應(yīng)用。
在銀行、金融體系中,使用鏈上機(jī)密交易,通過(guò)將賬戶信息加密后放到區(qū)塊鏈上存證,交易請(qǐng)求中也對(duì)交易額進(jìn)行加密,以保護(hù)資金流,那么配合同態(tài)加密或零知識(shí)證明算法,可實(shí)現(xiàn)對(duì)鏈上密文的計(jì)算和對(duì)計(jì)算結(jié)果的驗(yàn)證,達(dá)到交易信息保密、交易事件可公開(kāi)監(jiān)管、交易結(jié)果可及時(shí)驗(yàn)證的效果。舉個(gè)例子,公司 A 和公司 B 作為區(qū)塊鏈分布式賬本的參與方,可以將自己的賬戶余額等信息采用同態(tài)加密的密文形式存到鏈上。這樣一來(lái),A 向 B 支付一筆款項(xiàng)時(shí),則可以通過(guò)同態(tài)運(yùn)算來(lái)執(zhí)行這個(gè)交易,并用零知識(shí)證明提供余額足夠支付這次交易的證明,整個(gè)商業(yè)互動(dòng)就可以在隱私保護(hù)中進(jìn)行。
在廣告投放的場(chǎng)景中,也可以用部署了可信計(jì)算的騰訊云區(qū)塊鏈來(lái)安全地聯(lián)合提取隱私數(shù)據(jù)中的可公開(kāi)信息。廣告歸因是一個(gè)典型的涉及多方數(shù)據(jù)共享的場(chǎng)景。這個(gè)場(chǎng)景主要參與方包括廣告投放商和廣告平臺(tái):廣告投放商擁有用戶購(gòu)買(mǎi)其產(chǎn)品或服務(wù)的交易信息,而廣告平臺(tái)擁有用戶對(duì)投放商投放在平臺(tái)上的廣告的瀏覽、點(diǎn)擊信息。在現(xiàn)行商業(yè)模式下,廣告投放商會(huì)根據(jù)瀏覽、點(diǎn)擊了廣告的用戶是否購(gòu)買(mǎi)產(chǎn)品或服務(wù)的情況來(lái)計(jì)算一個(gè)廣告轉(zhuǎn)化率,計(jì)算公式是:?轉(zhuǎn)化率瀏覽過(guò)廣告且購(gòu)買(mǎi)的用戶量瀏覽過(guò)廣告的用戶?。要得到轉(zhuǎn)化率數(shù)據(jù),就需要得到廣告投放商側(cè)購(gòu)買(mǎi)過(guò)產(chǎn)品的用戶集合與廣告平臺(tái)側(cè)瀏覽過(guò)廣告的用戶集合的交集。廣告投放商與廣告平臺(tái)可以使用第四部分提到的鏈上鏈下互通的機(jī)制把各自數(shù)據(jù)的存證放到區(qū)塊鏈上,而不公開(kāi)數(shù)據(jù)本身。需要計(jì)算轉(zhuǎn)化率時(shí),可以通過(guò)可信計(jì)算環(huán)境來(lái)驗(yàn)證鏈上存證與鏈下實(shí)際數(shù)據(jù),并在實(shí)際數(shù)據(jù)上進(jìn)行計(jì)算得到結(jié)果。整個(gè)過(guò)程不會(huì)泄露鏈下數(shù)據(jù)。
?
這期我們就介紹到這里。區(qū)塊鏈的安全應(yīng)用場(chǎng)景還有很多,希望這次的分享可以在思路上幫到大家。
?
[1] Schnorr, “Efficient identification and signatures for smartcards”, Crypto 1989
[2] Fiat, Shamir, “How to Prove Yourself: Practical Solutions toIdentification and Signature Problems”, Crypto 1986
[3] Pedersen, “Non-interactive and information-theoretic secureverifiable secret sharing”, Crypto 1991
[4] Camenisch, Chaabouni, Shelat, “Efficient Protocols for SetMembership and Range Proofs”, AsiaCrypt 2008
[5] Bunz, Bootle, Boneh, Poelstra, Wuille, Maxwell, “Bulletproofs:Short Proofs for Confidential Transactions and More”, S&P 2018
總結(jié)
以上是生活随笔為你收集整理的拿什么保护你,我的区块链的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么微信推荐这么快?
- 下一篇: 99.999%,提升ElasticSea