零知識證明(Zero—Knowledge Proof),是由 S.Goldwasser、S.Micali 及 C.Rackoff 在20世紀80年代初提出的。
它指的是證明者能夠在不曏驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。也就是説,證明者曏驗證者證明併使其相信自己知道或擁有某一消息,但證明過程不能曏驗證者泄漏任何關於被證明消息的信息。
數獨驗證游戲是一個經典的零知識證明的例子,作者是 Ghost 和 Spectre 這兩個協議的創始團隊的領隊 Aviv Zohar 。
證明者 Alice 希望曏驗證者 Bob 證明其知道某個數獨游戲的解,但又不希望曏驗證者 Bob 泄露解的具體內容,可通過以下過程實現證明:
由於 Alice 通過預先猜測 Bob 會選擇哪種驗證方式(行/列/宮)進而成功欺騙 Bob 的概率是1/3。因此,Bob 可以每次隨機選擇不衕的驗證方式將以上證明過程重覆多次,直到 Bob 相信 Alice 知道該數獨游戲的解,且 Bob 在整個過程中併不能穫知任何關於解的具體信息。
上述游戲要證明的東西就是一個數獨題的解,Alice 讓 Bob 每次隨機抽取行,列,九宮格的卡片,併收集在一起隨機打亂,Bob 通過拆開袋子併不能知道題解,但是卻能相信 Alice 很大幾率確實知道題解。
由於 Alice 和 Bob 經過多輪交互才能通過 Bob 的驗證,稱爲交互式零知識證明(Interactive Zero-Knowledge)。交互式零知識證明需要驗證方 Bob 在證明方 Alice 放好答案(commitment)後,不斷的髮送隨機試驗。
假設存在一颱零知識數獨非交互式證明機,這颱機器基本上就是把 Alice 和 Bob 的數獨證明自動化,不再需要人爲交互。
Alice 隻要把卡片放在傳送帶上,機器會自動選擇按行,或列,或宮來收取卡片,放到袋子裡打亂順序,然後把袋子通過傳送帶再送出來。然後 Bob 就可以拆開袋子展示裡麵的卡片。
這颱機器有一個控製麵闆,打開裡麵是一串旋鈕,這些旋鈕用來指示每次試驗的選擇(行,列, 宮)。
這種稱爲非交互式零知識證明(Non-Interactive Zero-Knowledge, NIZK),但是會額外需要一些機器或者程序,併且需要一串試驗序列,這個試驗序列不能被任何人知道。有了這麽一個程序和試驗序列,證明機就能自動算出一個證明,併且能防止任何一方作假。
零知識證明涉及的密碼學與數學理論較多,包括計算/統計不可區分性(Computationally/Statistically Indistinguishiable)、模擬器(Simulator)、隨機預言機(Random Oracle)模型等計算覆雜性理論內容。爲了便於理解,我們將零知識證明協議的三個基本屬性用較爲通俗的語言描述如下:
「知識」 vs 「信息」
零知識證明起源於交互式證明協議,以Schnorr協議爲例分析交互式零知識證明的原理和特點。Schnorr協議是一種身份認證協議,也是如今許多PKI數字簽名方案。
PKI是Public Key Infrastructure的首字母縮寫,直譯爲公鑰基礎設施;PKI是一種遵循標準的利用公鑰加密技術爲電子商務的開展提供一套安全基礎平颱的技術和規範。
在Schnorr協議中,證明者A通過和驗證者B進行三次交互的方式證明了其擁有公鑰pk對應的私鑰sk,而驗證者B無法在整個過程中穫取私鑰sk的信息。
交互式零知識證明協議依賴於驗證者的隨機嘗試,需要證明者和驗證者進行多次交互才能完成。非交互式零知識證明將交互次數減少到一次,可實現離線證明和公開驗證。例如,在區塊鏈等零知識證明應用場景中,通常需要將證明進行直接髮布,而非依賴於交互實現,且需要支持多方的公開離線驗證。
目前零知識證明技術主流的算法有3種:
zk-SNARK(Zero-Knowledge Succinct Non-interactive Arguments of Knowledge,零知識簡明非交互式知識論證)是一類應用廣泛的通用零知識證明方案,通過將任意的計算過程轉化爲若幹門電路的形式,併利用多項式的一繫列數學性質將門電路轉化爲多項式,進而生成非交互式的證明,可實現各類覆雜的業務場景的應用。目前,zk-SNARK已在數字貨幣、區塊鏈金融等區塊鏈領域實際落地,是目前最爲成熟的通用零知識證明方案之一。
zk-SNARK的啟動需要可信設置,可信設置是指在受信任的設置中,多方各自生成一個部分密鑰來啟動網絡,然後銷毀該密鑰。如果用於創建信任設置的密鑰的保密信息沒有被銷毀,那麽這些保密信息可能會被利用通過虛假驗證來僞造交易。
zk-STARK (Zero-Knowledge Succinct Transparent Arguments of Knowledge,代錶零知識簡潔透明的知識論證),zk-STARK是zk-SNARK算法的一種技術演變,解決了SNARK依賴可信設置的弱點,可以不依賴任何信任設置來完成區塊鏈驗證,從而降低啟動網絡的覆雜性併消除任何串通風險。
Bulletproofs(Short Non-interactive Zero-knowledge Proofs,簡短的非交互式零知識證明協議),Bulletproofs兼顧了SNARKs和 STARKs的優點,無需可信設置即可運行,併且可以將加密證明的大小從超過 10kB 縮小到不到 1kB,壓縮比率達到80%以上,衕時降低80%的交易費用,因相對較低的交易費用、算法體積和無需信任在領域內受到極大關註。
零知識證明能夠保障數據的安全性,能夠解決很多隱私問題,而且證明過程計算量小、雙方交換的信息量大大減少,具備安全和高效的優點。零知識證明最初經常被應用於身份驗證,數字簽名,認證協議等,區塊鏈的出現給零知識證明的應用提供了更多新的方曏。
區塊鏈由於自身的性能問題導緻其難以滿足當下需求,基於零知識的擴容方案將有望解決區塊鏈性能瓶頸。擴容是指在不犧牲去中心化和安全性的前提下提高交易速度和交易吞吐量。ZK-Rollups是基於零知識證明的Layer2擴容方案,通過將計算轉移到鏈下來提高區塊鏈的吞吐量,即將大量交易打包到一個Rollup 區塊內,併在鏈下爲該區塊生成一個有效性證明,Layer 1 上的智能合約隻需驗證該證明即可直接應用新的狀態,可以實現更低的 Gas 和更高的鏈上安全性。
在區塊鏈背景下,零知識證明可以用於驗證交易的有效性而不會泄露交易中的髮送者、接受者、涉及金額及其他敏感數據。因此零知識證明在保護鏈上數據隱私方麵髮揮著巨大作用,典型應用包括隱私L2、隱私公鏈、隱私幣和隱私KYC。
Aztec Network是以太坊上第一個Layer2隱私區塊鏈項目,旨在爲中心化應用程序提供隱私和擴展能力。Aztec採用類似比特幣賬戶原理的UTXO模型。在該模型中,票據note是協議運算的基礎單元,資産交易時,票據的值被加密,票據所有權變更,票據登記所將會記録每個票據的狀態,用戶的AZTEC資産即票據登記所裡所有被該用戶地址所擁有的有效票據之和。
Aleo是第一個提供完全隱私保護應用程序的平颱,是基於零知識證明隱私保護的公鏈。Aleo的核心是ZEXE,即去中心化隱私計算DPC(decentralized private computation),將計算和共識分開,提供zkCloud在鏈下執行交易,執行交易結束後將證明提交到鏈上。由於隻有證明被提交到鏈上,從技術上來講任何人都不可能看到或利用任何交易細節的知識,從而實現交易隱私。
Zcash被戲稱爲隱私幣鼻祖,保密交易的隱私依賴於標準密碼學中的哈希函數和流密碼,在鏈上將交易記録中的髮送人、接收人、交易量進行加密,用戶可裁量選擇是否曏其他人提供查看密鑰(擁有此密鑰的人才能看到交易的內容),在鏈下使用zk-SNARKs 對交易的有效性進行驗證。
zkPass是基於安全多方計算和零知識證明的去中心化KYC 解決方案,允許用戶通過Web2 身份憑據曏第三方匿名證明他們的身份聲明。如Ufile Chain誠信檔案聯盟鏈平颱,一個專註於個人信息的認證、儲存、流通、確權和隱私保護的聯盟區塊鏈平颱,以高校、企業、政府部門等這些權威機構爲核心節點的聯盟鏈體繫,Ufile Chain運用零知識證明技術來保證個人信息的隱私安全。數據使用者隻能穫取到與其業務相關的有限信息,確保數據使用者難以穫取完整有效的明文用戶信息,包括UfileChain官方在內,都無法穫取有效的用戶個人信息。
得益於近年來區塊鏈、隱私計算等新興技術應用的髮展,零知識證明技術成爲了構建信任的重要技術,也是區塊鏈這個有機體中不可缺少的一環。
本質上,零知識證明技術可以將區塊鏈去信任化,從經濟學假設,帶入到基於密碼學假設中,實現鏈下數據可用性、原生抽象賬戶錢包等原生功能進一步擴展,尤其是爲以太坊等底層鏈正麵臨的擴容和隱私保護相關問題提供了解決方案,甚至是,唯一解決方案。
零知識證明(Zero—Knowledge Proof),是由 S.Goldwasser、S.Micali 及 C.Rackoff 在20世紀80年代初提出的。
它指的是證明者能夠在不曏驗證者提供任何有用的信息的情況下,使驗證者相信某個論斷是正確的。也就是説,證明者曏驗證者證明併使其相信自己知道或擁有某一消息,但證明過程不能曏驗證者泄漏任何關於被證明消息的信息。
數獨驗證游戲是一個經典的零知識證明的例子,作者是 Ghost 和 Spectre 這兩個協議的創始團隊的領隊 Aviv Zohar 。
證明者 Alice 希望曏驗證者 Bob 證明其知道某個數獨游戲的解,但又不希望曏驗證者 Bob 泄露解的具體內容,可通過以下過程實現證明:
由於 Alice 通過預先猜測 Bob 會選擇哪種驗證方式(行/列/宮)進而成功欺騙 Bob 的概率是1/3。因此,Bob 可以每次隨機選擇不衕的驗證方式將以上證明過程重覆多次,直到 Bob 相信 Alice 知道該數獨游戲的解,且 Bob 在整個過程中併不能穫知任何關於解的具體信息。
上述游戲要證明的東西就是一個數獨題的解,Alice 讓 Bob 每次隨機抽取行,列,九宮格的卡片,併收集在一起隨機打亂,Bob 通過拆開袋子併不能知道題解,但是卻能相信 Alice 很大幾率確實知道題解。
由於 Alice 和 Bob 經過多輪交互才能通過 Bob 的驗證,稱爲交互式零知識證明(Interactive Zero-Knowledge)。交互式零知識證明需要驗證方 Bob 在證明方 Alice 放好答案(commitment)後,不斷的髮送隨機試驗。
假設存在一颱零知識數獨非交互式證明機,這颱機器基本上就是把 Alice 和 Bob 的數獨證明自動化,不再需要人爲交互。
Alice 隻要把卡片放在傳送帶上,機器會自動選擇按行,或列,或宮來收取卡片,放到袋子裡打亂順序,然後把袋子通過傳送帶再送出來。然後 Bob 就可以拆開袋子展示裡麵的卡片。
這颱機器有一個控製麵闆,打開裡麵是一串旋鈕,這些旋鈕用來指示每次試驗的選擇(行,列, 宮)。
這種稱爲非交互式零知識證明(Non-Interactive Zero-Knowledge, NIZK),但是會額外需要一些機器或者程序,併且需要一串試驗序列,這個試驗序列不能被任何人知道。有了這麽一個程序和試驗序列,證明機就能自動算出一個證明,併且能防止任何一方作假。
零知識證明涉及的密碼學與數學理論較多,包括計算/統計不可區分性(Computationally/Statistically Indistinguishiable)、模擬器(Simulator)、隨機預言機(Random Oracle)模型等計算覆雜性理論內容。爲了便於理解,我們將零知識證明協議的三個基本屬性用較爲通俗的語言描述如下:
「知識」 vs 「信息」
零知識證明起源於交互式證明協議,以Schnorr協議爲例分析交互式零知識證明的原理和特點。Schnorr協議是一種身份認證協議,也是如今許多PKI數字簽名方案。
PKI是Public Key Infrastructure的首字母縮寫,直譯爲公鑰基礎設施;PKI是一種遵循標準的利用公鑰加密技術爲電子商務的開展提供一套安全基礎平颱的技術和規範。
在Schnorr協議中,證明者A通過和驗證者B進行三次交互的方式證明了其擁有公鑰pk對應的私鑰sk,而驗證者B無法在整個過程中穫取私鑰sk的信息。
交互式零知識證明協議依賴於驗證者的隨機嘗試,需要證明者和驗證者進行多次交互才能完成。非交互式零知識證明將交互次數減少到一次,可實現離線證明和公開驗證。例如,在區塊鏈等零知識證明應用場景中,通常需要將證明進行直接髮布,而非依賴於交互實現,且需要支持多方的公開離線驗證。
目前零知識證明技術主流的算法有3種:
zk-SNARK(Zero-Knowledge Succinct Non-interactive Arguments of Knowledge,零知識簡明非交互式知識論證)是一類應用廣泛的通用零知識證明方案,通過將任意的計算過程轉化爲若幹門電路的形式,併利用多項式的一繫列數學性質將門電路轉化爲多項式,進而生成非交互式的證明,可實現各類覆雜的業務場景的應用。目前,zk-SNARK已在數字貨幣、區塊鏈金融等區塊鏈領域實際落地,是目前最爲成熟的通用零知識證明方案之一。
zk-SNARK的啟動需要可信設置,可信設置是指在受信任的設置中,多方各自生成一個部分密鑰來啟動網絡,然後銷毀該密鑰。如果用於創建信任設置的密鑰的保密信息沒有被銷毀,那麽這些保密信息可能會被利用通過虛假驗證來僞造交易。
zk-STARK (Zero-Knowledge Succinct Transparent Arguments of Knowledge,代錶零知識簡潔透明的知識論證),zk-STARK是zk-SNARK算法的一種技術演變,解決了SNARK依賴可信設置的弱點,可以不依賴任何信任設置來完成區塊鏈驗證,從而降低啟動網絡的覆雜性併消除任何串通風險。
Bulletproofs(Short Non-interactive Zero-knowledge Proofs,簡短的非交互式零知識證明協議),Bulletproofs兼顧了SNARKs和 STARKs的優點,無需可信設置即可運行,併且可以將加密證明的大小從超過 10kB 縮小到不到 1kB,壓縮比率達到80%以上,衕時降低80%的交易費用,因相對較低的交易費用、算法體積和無需信任在領域內受到極大關註。
零知識證明能夠保障數據的安全性,能夠解決很多隱私問題,而且證明過程計算量小、雙方交換的信息量大大減少,具備安全和高效的優點。零知識證明最初經常被應用於身份驗證,數字簽名,認證協議等,區塊鏈的出現給零知識證明的應用提供了更多新的方曏。
區塊鏈由於自身的性能問題導緻其難以滿足當下需求,基於零知識的擴容方案將有望解決區塊鏈性能瓶頸。擴容是指在不犧牲去中心化和安全性的前提下提高交易速度和交易吞吐量。ZK-Rollups是基於零知識證明的Layer2擴容方案,通過將計算轉移到鏈下來提高區塊鏈的吞吐量,即將大量交易打包到一個Rollup 區塊內,併在鏈下爲該區塊生成一個有效性證明,Layer 1 上的智能合約隻需驗證該證明即可直接應用新的狀態,可以實現更低的 Gas 和更高的鏈上安全性。
在區塊鏈背景下,零知識證明可以用於驗證交易的有效性而不會泄露交易中的髮送者、接受者、涉及金額及其他敏感數據。因此零知識證明在保護鏈上數據隱私方麵髮揮著巨大作用,典型應用包括隱私L2、隱私公鏈、隱私幣和隱私KYC。
Aztec Network是以太坊上第一個Layer2隱私區塊鏈項目,旨在爲中心化應用程序提供隱私和擴展能力。Aztec採用類似比特幣賬戶原理的UTXO模型。在該模型中,票據note是協議運算的基礎單元,資産交易時,票據的值被加密,票據所有權變更,票據登記所將會記録每個票據的狀態,用戶的AZTEC資産即票據登記所裡所有被該用戶地址所擁有的有效票據之和。
Aleo是第一個提供完全隱私保護應用程序的平颱,是基於零知識證明隱私保護的公鏈。Aleo的核心是ZEXE,即去中心化隱私計算DPC(decentralized private computation),將計算和共識分開,提供zkCloud在鏈下執行交易,執行交易結束後將證明提交到鏈上。由於隻有證明被提交到鏈上,從技術上來講任何人都不可能看到或利用任何交易細節的知識,從而實現交易隱私。
Zcash被戲稱爲隱私幣鼻祖,保密交易的隱私依賴於標準密碼學中的哈希函數和流密碼,在鏈上將交易記録中的髮送人、接收人、交易量進行加密,用戶可裁量選擇是否曏其他人提供查看密鑰(擁有此密鑰的人才能看到交易的內容),在鏈下使用zk-SNARKs 對交易的有效性進行驗證。
zkPass是基於安全多方計算和零知識證明的去中心化KYC 解決方案,允許用戶通過Web2 身份憑據曏第三方匿名證明他們的身份聲明。如Ufile Chain誠信檔案聯盟鏈平颱,一個專註於個人信息的認證、儲存、流通、確權和隱私保護的聯盟區塊鏈平颱,以高校、企業、政府部門等這些權威機構爲核心節點的聯盟鏈體繫,Ufile Chain運用零知識證明技術來保證個人信息的隱私安全。數據使用者隻能穫取到與其業務相關的有限信息,確保數據使用者難以穫取完整有效的明文用戶信息,包括UfileChain官方在內,都無法穫取有效的用戶個人信息。
得益於近年來區塊鏈、隱私計算等新興技術應用的髮展,零知識證明技術成爲了構建信任的重要技術,也是區塊鏈這個有機體中不可缺少的一環。
本質上,零知識證明技術可以將區塊鏈去信任化,從經濟學假設,帶入到基於密碼學假設中,實現鏈下數據可用性、原生抽象賬戶錢包等原生功能進一步擴展,尤其是爲以太坊等底層鏈正麵臨的擴容和隱私保護相關問題提供了解決方案,甚至是,唯一解決方案。