新聞中心
先來看一張圖:

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)貴州,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
顯而易見,圖中有無數(shù)企鵝。不過,其中藏著一只與企鵝相似的海鸚(如下圖)。
現(xiàn)在的情況是,我知道這個(gè)海鸚藏的地方,但是我不想告訴你具體的位置。問題在于:我要怎么做才能在不泄露具體位置的情況下,向你證明我的確知道海鸚的位置呢?一個(gè)簡單辦法是,我拿一塊塑料板,上面留個(gè)孔,把整張圖放到板子后面,并且讓海鸚對準(zhǔn)那個(gè)孔。
只要你通過洞往里邊看,你就可以看到海鸚。
回顧一下這個(gè)過程,你可以發(fā)現(xiàn):雖然我沒有指出海鸚的具體位置,也沒有給出任何明示或暗示信息,但你能肯定圖中確實(shí)有一只海鸚,而且你也相信我知道這個(gè)位置。
這就是“零知識(shí)證明(zero-knowledge proof)”。
奇怪的定義
零知識(shí)證明指的是證明者能夠在不向驗(yàn)證者提供任何有用信息的情況下,使驗(yàn)證者相信某個(gè)論斷是正確的。其實(shí)質(zhì)是一種涉及兩方或更多方的協(xié)議,即兩方或更多方完成一項(xiàng)任務(wù)所需采取的一系列步驟。簡言之,零知識(shí)證明系統(tǒng)要完成的任務(wù)是“證明某一個(gè)事實(shí)并且不泄露知識(shí)”。
官方定義比較拗口,可以再舉個(gè)通俗易懂的經(jīng)典例子加以說明。
假設(shè):現(xiàn)在你的手里有紅綠兩個(gè)小球,面對一個(gè)有紅綠色盲的朋友,你不能告訴他你兩個(gè)球分別是什么顏色,但是你要讓他相信那的確是兩個(gè)不同顏色的球。這種情況下,你要怎么做?
方案:先將兩個(gè)球分別放在他的兩只手中,并記住最初左右手中球的顏色;讓他將手放背后,隨機(jī)決定是否在背后交換手中的球,然后將手中的球展示給你并讓你判斷他是否在背后交換了手中的球。
從結(jié)果來說,你通過對比他手中球的顏色就可以直接判斷出他是否在背后換了球。你的朋友知道換球的次數(shù),可以證明你的判斷正確與否。同時(shí)為了排除偶然性,可以進(jìn)行反復(fù)多次試驗(yàn),只要你的判斷每次都是正確的,基本就可以說明這兩個(gè)球的確是不同色的。
在證明的整個(gè)過程中,你(證明者)并沒有向他(驗(yàn)證者)透露任何有關(guān)球的顏色的具體信息,他也無法自行判斷球的顏色,因此在這個(gè)過程中并沒有傳遞任何關(guān)于被證明消息的有用的信息,同時(shí)他也確實(shí)相信了“兩個(gè)球是不同色”的論斷。
零知識(shí)證明的研究最早始于1985年,由MIT教授 Shafi Goldwasser,Silvio Micali 和密碼學(xué)大師Charles Rackoff在《The Knowledge Complexity of Interactive Proof-Systems》論文中提出。這篇文章提出了“零知識(shí)證明”這一概念,并逐步成為了現(xiàn)代密碼學(xué)理論的根基之一。
一個(gè)正常工作的零知識(shí)證明系統(tǒng)必須包含三個(gè)屬性:
- 完備性(completeness):在證明者與驗(yàn)證者都是誠實(shí)的情況下,證明過程符合規(guī)則并且正確,那么這個(gè)證明一定是成功的,證明者最終會(huì)說服驗(yàn)證者。
- 可靠性(Soundness):只有證明者能夠做出證明,且證明者只能說服驗(yàn)證者該陳述是否屬實(shí),證明者沒有辦法通過欺詐的手段讓驗(yàn)證者相信他。
- 零知識(shí)性(Zero-knowledgeness):證明過程執(zhí)行完之后,驗(yàn)證者只獲得了“證明者擁有這個(gè)知識(shí)”這條信息,而沒有獲得關(guān)于這個(gè)知識(shí)本身的信息。
應(yīng)用:從象牙塔走到區(qū)塊鏈
最初關(guān)于零知識(shí)證明的研究基本只在學(xué)術(shù)界進(jìn)行,研究人員把主要精力都放在塊加密、流加密和公鑰體系的密碼學(xué)研究上。但隨著互聯(lián)網(wǎng)尤其移動(dòng)互聯(lián)網(wǎng)的發(fā)展,大量涉及隱私性的信息在聯(lián)網(wǎng)設(shè)備上存儲(chǔ)、交換和計(jì)算,不可避免地造成大量的隱私信息泄露和互聯(lián)網(wǎng)詐騙事件盛行。
在隱私安全備受關(guān)注的今天,零知識(shí)證明有了更大的“用武之地”。比如:
保護(hù)隱私數(shù)據(jù):購買保險(xiǎn)的時(shí)候,只想證明自己沒有家族病史,而不想暴露病例的所有信息。不管是哪種信息,都可以把不想暴露的部分換成一個(gè)很像隨機(jī)數(shù)字的零知識(shí)證明,在證明數(shù)據(jù)真實(shí)可信的同時(shí)也保護(hù)了其他隱私。
身份認(rèn)證:在使用網(wǎng)站時(shí),用戶可以向網(wǎng)站證明他擁有私鑰,或者知道某個(gè)只有自己才知道的答案,網(wǎng)站不用知道密鑰,但可以通過零知識(shí)證明確認(rèn)用戶身份,通過去中心化存儲(chǔ),服務(wù)器可以向用戶證明數(shù)據(jù)被妥善保存下來且不被泄露。
計(jì)算壓縮與區(qū)塊鏈擴(kuò)容:在傳統(tǒng)的區(qū)塊架構(gòu)中,同樣的計(jì)算被重復(fù)多次,比如簽名校驗(yàn),交易的合法性校驗(yàn),智能合約執(zhí)行等一些其他的地方,因?yàn)橛辛擞?jì)算的證明,同一個(gè)計(jì)算就不需要多次重復(fù)了,計(jì)算過程可以被零知識(shí)技術(shù)證明壓縮。
4個(gè)主流的零知識(shí)證明開發(fā)庫推薦
理論上,凡是今天存儲(chǔ)的數(shù)據(jù)必然都會(huì)在未來泄露,泄露的早晚只是一個(gè)時(shí)間的問題。技術(shù)上能做的只是在這個(gè)數(shù)據(jù)泄露上增加一個(gè)難度,讓其泄露時(shí)缺乏即時(shí)性和完整性,降低其利用價(jià)值。針對這一方面,設(shè)計(jì)良好的零知識(shí)協(xié)議實(shí)際是一個(gè)比較有前景的方案。推薦4 個(gè)主流的零知識(shí)證明開發(fā)庫,希望對讀者有所幫助。
libsnark:SCIPR Lab開發(fā)的zkSNARK方案實(shí)現(xiàn),開發(fā)語言為C++,應(yīng)用于zcash等多個(gè)項(xiàng)目。
snarkjs:zkSARNK方案的javascript實(shí)現(xiàn)庫。利用snarkjs你可以進(jìn)行可信設(shè)置、生成證據(jù)并驗(yàn)證證據(jù)。
bellman:用于開發(fā)zk-SNARK電路的Rust庫,它提供電路接口、基礎(chǔ)結(jié)構(gòu)以及一些基本電路實(shí)現(xiàn),例如布爾和數(shù)值抽象。
pysnark:用Python開發(fā)的zk-snark方案實(shí)現(xiàn),支持Pinocchio協(xié)議,支持生成用于以太坊的智能合約用于驗(yàn)證零知識(shí)證據(jù)。
參考資料:
?? https://zhuanlan.zhihu.com/p/421087406??
?? https://www.bilibili.com/video/BV1tF411p73s/??
網(wǎng)頁標(biāo)題:如何既不泄密,又能取信于人?非玄學(xué),是零知識(shí)證明
本文網(wǎng)址:http://fisionsoft.com.cn/article/dhpiohj.html


咨詢
建站咨詢
