零知識(shí)證明:區(qū)塊鏈隱私保護(hù)利器區(qū)塊鏈
零知識(shí)證明是一種加密方案,最初在20實(shí)際80年代由MIT研究人員在論文中提出。“零知識(shí)協(xié)議是一方(證明方)可以向另一方(驗(yàn)證方)證明某事是真實(shí)的方法,除了這一具體陳述是真實(shí)的事實(shí)以外,不透露任何額外的信息。
報(bào)告摘要:
零知識(shí)證明是一種基于概率的驗(yàn)證方式,驗(yàn)證的內(nèi)容包括“事實(shí)類陳述”和“關(guān)于個(gè)人知識(shí)的陳述”。驗(yàn)證者基于一定的隨機(jī)性向證明者提出問題,如果都能給出正確回答,則說明證明者大概率擁有他所聲稱的“知識(shí)”。Zerocoin(零幣協(xié)議)將零知識(shí)驗(yàn)證用于鑄造零幣和贖回零幣過程中,以隱藏了一筆交易對(duì)應(yīng)的發(fā)送方和接收方信息,Zerocash(零鈔協(xié)議)采用更新穎的zkSNARKs技術(shù),將需要驗(yàn)證的交易內(nèi)容轉(zhuǎn)換成證明兩個(gè)多項(xiàng)式乘積相等,結(jié)合同態(tài)加密等技術(shù)在保護(hù)隱藏交易金額的同時(shí)進(jìn)行交易驗(yàn)證。缺點(diǎn)在于若網(wǎng)絡(luò)收到攻擊超發(fā)零鈔,則無法發(fā)現(xiàn)或采取措施;Zerocoin和Zerocash均需要進(jìn)行預(yù)先的“信任設(shè)置”,沒有達(dá)到真正的“去信任”。英特爾SGX、zkSTARKs等新技術(shù)有可能解決上述問題,但仍需經(jīng)過實(shí)踐的檢驗(yàn)。
一、零知識(shí)證明原理
零知識(shí)證明是一種加密方案,最初在20實(shí)際80年代由MIT研究人員在論文中提出。“零知識(shí)協(xié)議是一方(證明方)可以向另一方(驗(yàn)證方)證明某事是真實(shí)的方法,除了這一具體陳述是真實(shí)的事實(shí)以外,不透露任何額外的信息。例如對(duì)于現(xiàn)在登錄網(wǎng)站而言,在Web服務(wù)器上存儲(chǔ)了客戶的密碼的哈希值,為了驗(yàn)證客戶實(shí)際上知道密碼,目前大部分網(wǎng)站采用的方式是服務(wù)器對(duì)客戶輸入的密碼進(jìn)行哈希計(jì)算,并與已存結(jié)果對(duì)比,但是這種方式的弊病在于服務(wù)器在計(jì)算時(shí)就可以知道客戶的原始密碼,一旦服務(wù)器被攻擊,用戶的密碼也就泄露了。如果能夠?qū)崿F(xiàn)零知識(shí)證明,那么就可以在不知道客戶密碼的前提下,進(jìn)行客戶登錄的驗(yàn)證,即使服務(wù)器被攻擊,由于并未存儲(chǔ)客戶明文密碼,用戶的賬戶還是安全的。
基本的零知識(shí)證明協(xié)議是交互式的,需要驗(yàn)證方向證明方不斷詢問一系列有關(guān)其所掌握的“知識(shí)”的問題,如果均能夠給出正確回答,那么從概率上來講,證明方的確很有可能知道其所聲稱的“知識(shí)”。例如某人聲稱知道一個(gè)數(shù)獨(dú)難題的答案,一種零知識(shí)證明的方式是驗(yàn)證方隨機(jī)指定這一次按列、按行還是按九宮格來檢測,每次檢測不需要看到數(shù)字?jǐn)[的具體位置,只需要檢測出來是否包含了1-9個(gè)數(shù)字即可,只要驗(yàn)證的次數(shù)足夠多,那么可以大概率相信證明方是知道數(shù)獨(dú)題目的解的。但是這樣簡單的方式還不能讓人相信證明方和驗(yàn)證方均沒有作假,在數(shù)獨(dú)的案例中,兩者有可能事先串通好,從而使得證明方在不知道答案的前提下通過驗(yàn)證。如果他們想讓第三方信服,驗(yàn)證方必須也要證明自己每次的檢測方案是隨機(jī)的且自己沒有和證明方串通。
由于第三方觀察者難以驗(yàn)證交互式零知識(shí)證明的結(jié)果,因此當(dāng)我們向多人證明某些內(nèi)容時(shí),我們需要付出額外的努力和成本。而非交互式的零知識(shí)證明顧名思義,不需要互動(dòng)過程,避免了串通的可能性,但是可能會(huì)額外需要一些機(jī)器和程序來決定試驗(yàn)的序列:例如在數(shù)獨(dú)的例子中,通過程序的方式來決定哪一次按行、哪一次按列來檢測,但是這個(gè)試驗(yàn)序列必須保密,否則驗(yàn)證方預(yù)先知道了試驗(yàn)的序列就有可能利用這個(gè)信息,提前準(zhǔn)備,在并不知道真實(shí)“知識(shí)”的情況下通過驗(yàn)證。
零知識(shí)證明的內(nèi)容可以概括為兩類:“事實(shí)”類陳述:例如證明“一個(gè)特定的圖可以進(jìn)行三著色。”或者“一個(gè)數(shù)N是合數(shù)”;關(guān)于個(gè)人知識(shí)的陳述:例如“我知道這個(gè)特定圖的染色方案”或者“我知道N的因式分解”。
但并不是所有的問題都有零知識(shí)證明的加密方案,Goldreich, Micali 和 Wigderson 給出了理論上存在零知識(shí)證明解的有效范圍。他們發(fā)現(xiàn)對(duì)于在多項(xiàng)式時(shí)間內(nèi)可以驗(yàn)證解的決策問題(問題的答案僅為是/否),存在已知的零知識(shí)證明方案。只需要在這樣NP問題中找到想要證明的論述,并轉(zhuǎn)化為三色問題的一個(gè)實(shí)例,那么就可以利用已有的協(xié)議實(shí)現(xiàn)零知識(shí)證明。由于三色問題屬于NPC問題,任何其他的NP問題都可以轉(zhuǎn)化為這個(gè)問題的實(shí)例。
二、區(qū)塊鏈中的零知識(shí)證明應(yīng)用
在區(qū)塊鏈上的交易中,如比特幣和以太坊網(wǎng)絡(luò)網(wǎng)絡(luò),除了使用地址來替換交易雙方的真實(shí)身份,使得交易具有部分匿名性以外,發(fā)送、接收地址和金額都是已知的,別人有可能通過網(wǎng)絡(luò)上的各種信息、和現(xiàn)實(shí)世界發(fā)生的交互記錄等將比特幣地址和真實(shí)身份對(duì)應(yīng)起來,也因此具有隱私暴露的隱患。Zerocoin設(shè)計(jì)了一種全新的思路,無法通過交易歷史分析來獲得用戶真實(shí)身份。Zerocoin里需要消耗一定價(jià)值的要交易的貨幣,以生成具有獨(dú)特序列號(hào)的一枚零幣。零知識(shí)證明可以在不透露花費(fèi)了具體哪個(gè)貨幣的基礎(chǔ)上,驗(yàn)證出你的確花了這筆錢。為了將這筆錢轉(zhuǎn)給他人,邏輯上需要我們使得這枚零幣不能再被別人花費(fèi),零幣的辦法是大家共同維護(hù)一個(gè)作廢列表,存著所有已經(jīng)花費(fèi)的零幣的序列號(hào)。礦工在驗(yàn)證這筆花費(fèi)交易時(shí)運(yùn)用零知識(shí)證明的方法,不需要知道具體花掉哪一個(gè)零幣,也可以驗(yàn)證零幣的序列號(hào)是否在作廢列表里。由于花費(fèi)交易并沒有輸入地址和簽名的信息,整個(gè)交易過程中,礦工也并不知道這個(gè)零幣的來源,因此也就難以對(duì)交易歷史進(jìn)行分析而獲取用戶身份。
在零幣里,交易的金額是可以知道的,而采用zkSNARKs技術(shù)的Zerocash連交易金額都可以隱密,賬本唯一公開記錄的唯一內(nèi)容就是交易的存在性。可以證明對(duì)于NP中的所有問題存在zkSNARKs。它引入了多項(xiàng)創(chuàng)新技術(shù),使它們可以在區(qū)塊鏈中使用。最重要的是,zkSNARKs減少了證明的大小和驗(yàn)證它們所需的計(jì)算量。它的過程可以簡述為。
1. 將要驗(yàn)證的程序拆解成一個(gè)個(gè)邏輯上的驗(yàn)證步驟,將這些邏輯上的步驟拆解成由加減乘除構(gòu)成的算數(shù)電路。
2. 通過一系列的變換將需要驗(yàn)證的程序轉(zhuǎn)換成驗(yàn)證多項(xiàng)式乘積是相等的,如證明t(x)h(x)= w(x)v(x)。
3. 為了使得證明更加簡潔,驗(yàn)證者預(yù)先隨機(jī)選擇幾個(gè)檢查點(diǎn)s,檢查在這幾個(gè)點(diǎn)上的等式是否成立。
4. 通過同態(tài)編碼/加密的方式使得驗(yàn)證者在計(jì)算等式時(shí)不知道實(shí)際的輸入數(shù)值,但是仍能進(jìn)行驗(yàn)證。
5. 在等式左右兩邊可以同時(shí)乘上一個(gè)不為0的保密的數(shù)值k,那么在驗(yàn)證(t(s)h(s)k)等于(w(s)v(s)k)時(shí),就無法知道具體的t(s)、h(s)、w(s)、v(s),因此可以使得信息得到保護(hù)。
不同于Zerocoin的密碼學(xué)原語RSA累加器,zkSNARKs技術(shù)較新,未經(jīng)廣泛驗(yàn)證,存在風(fēng)險(xiǎn),同時(shí)由于更強(qiáng)的匿名性,Zerocash的漏洞也更難發(fā)現(xiàn),和Zerocoin相比,Zerocash由于交易金額信息也是未知的,所以如果有攻擊者無限制地發(fā)行零鈔,這樣的情況是無法檢測的。
除此以外Zerocoin 和Zerocash均需要提前內(nèi)置生成參數(shù),用戶在使用這些網(wǎng)絡(luò)的時(shí)候必須信任這些參數(shù)沒有被泄露,但是一旦這些參數(shù)被泄露,整個(gè)網(wǎng)絡(luò)將面臨毀滅性打擊。復(fù)雜的信任設(shè)置使得Zerocash存在爭議,即使他們設(shè)計(jì)了一套“儀式”(例如錄下砸壞存有密鑰電腦的過程)來證明自己。
可能的解決辦法包括利用像英特爾SGX和ARM TrustZone這樣的現(xiàn)代“可信執(zhí)行環(huán)境”。就英特爾的SGX技術(shù)而言,即使應(yīng)用程序、操作系統(tǒng)、BIOS或VMM遭到了破壞,私鑰也是安全的。除此以外,最新提出的zkSTARKs技術(shù)不需要進(jìn)行信任設(shè)置。
根據(jù)zkSTARKs白皮書中所述,zkSTARKs是首次實(shí)現(xiàn)既可以不依賴任何信任設(shè)置來完成區(qū)塊鏈驗(yàn)證,同時(shí)計(jì)算速度隨著計(jì)算數(shù)據(jù)量的增加而指數(shù)級(jí)加速的系統(tǒng)。它不依賴公鑰密碼系統(tǒng),更簡單的假設(shè)使得它理論上更安全,因?yàn)樗ㄒ坏募用芗僭O(shè)是散列函數(shù)(如SHA2)是不可預(yù)測的(這一假設(shè)也是比特幣挖掘穩(wěn)定性的基礎(chǔ)),因此也使其具有抗量子性。作為一種新穎的技術(shù),和zkSTARKs一樣,它也需要經(jīng)過時(shí)間的檢驗(yàn)。
參考文獻(xiàn):
Zcoin中文社區(qū),《Zcoin和Zcash: 相似性和不同處》.http://www.zcoinchina.org/zcoin-and-zcash/
Zcash團(tuán)隊(duì),《What are zk-SNARKs?》https://z.cash/technology/zksnarks.html.
零幣技術(shù)白皮書《一種通過使用零幣協(xié)議(zerocoin protocol)來保障賬務(wù)隱私的加密貨幣》
Christian Reitwiessner,《zkSNARKs in a nutshell》,https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/
Matthew Green,《Zero Knowledge Proofs: An illustrated primer》,https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/
老錢,《一個(gè)數(shù)獨(dú)引發(fā)的慘案:零知識(shí)證明(Zero-Knowledge Proof)》,http://www.sohu.com/a/224915382_117959
文章版權(quán)為哈希未來所有,如需轉(zhuǎn)載,請聯(lián)系哈希未來工作人員。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。