零知识证明
零知識證明
什么是零知識證明?
首先,我們先思考一個問題:如何在不說出秘密的前提下,讓對方知道你已經知道了這個秘密?
例子1:用戶注冊
用戶在進行系統注冊的時候,系統并不會保存用戶的密碼明文,而是保存了用戶密碼的哈希值;用戶在登錄系統時,只需輸入注冊時的密碼,系統會根據用戶輸入的密碼產生的哈希值與系統數據庫的哈希值進行比對,如果一致的話,則系統就能認定,當前用戶知道該賬號的密碼。
在這里,用戶不需要告訴網站密碼,就能證明自己的身份,這其實就是一種零知識證明。
例子2:大學生實習
A想要去一家公司實習,該公司要求A在校期間所有功課都沒有掛科,才有資格加入該公司。雖然A在校期間從未掛科,但是成績也都在61、62左右徘徊,那么如何在公司不知道自己的成績的情況下證明自己沒有掛科呢?于是A委托學校開了一份證明,證明A在校期間所有成績均及格,并交到了公司,加入了該公司。
在這里,A并沒有暴露自己的確切考試成績,又向公司證明了自己滿足公司要求,這也是一種零知識證明。
零知識證明的定義
從字面義理解:零知識證明就是,既證明了自己想證明的事情,但同時透露給驗證者的信息為“零”。
零知識證明是指證明者能夠在不向驗證者提供信息本身內容的情況下使驗證者相信某個論斷是真實可信的一種技術。
零知識證明可分為交互式和非交互式兩種。
交互式:
零知識證明協議的基礎是交互式的。它要求驗證者不斷對證明者所擁有的“知識”進行一系列提問。證明者通過回答一系列問題,讓驗證者知道自己明確知道這些“知識”。
然而,這種情況下不能使人相信驗證者和證明者都是真實的,兩者可以提前串通好,就可以使證明者在不知道答案的情況下依然通過驗證。
非交互式:
非交互式零知識證明不需要交互過程,避免了串通的可能性,但可能需要額外的機器和程序來確定實驗的順序。
區塊鏈與零知識證明
現在這個時代,個人身份與許多信息產生了關聯,姓名、手機號、銀行卡號可能都關聯在了一起,知道了你的手機號,就可以通過關聯信息獲取到更多的個人信息,這種關聯是十分可怕的。
在區塊鏈的世界中,用地址來表示交易雙方,這樣雖達到了匿名的效果,也就是鏈上信息是匿名的,但是通過鏈上信息綁定的鏈下信息,使匿名性蕩然無存。(就比方說很多鏈上地址與鏈下銀行賬號、支付寶,使得可以很方便的追溯到真實世界的交易雙方)
那么有沒有一種方法,能夠在隱藏發送方、接收方以及交易金額等其他細節下,保證交易有效呢?
解決方法就是–零知識證明。
ZCash零知識證明
什么是ZCash:
ZCash是第一個開放的、無需權限的加密貨幣,使用零知識密碼技術充分保護交易隱私,為實現匿名性,ZCash使用了零知識證明。
普通比特幣轉賬過程:
比如說,Alice要轉賬給Bob一個比特幣
轉賬之前,Alice要事先準備一個比特幣,從這一個比特幣中,我們知道:
1.Alice確實有一個比特幣
2.Alice使用私鑰對這個比特幣進行簽名,證明Alice擁有對這個資產轉賬的權力
轉賬的過程:首先先給Bob新建一張一樣的比特幣,同時毀掉Alice手上的的那張比特幣。
ZCash的轉賬過程:
比方說,Alice轉賬給Bob一個ZEC
1.首先,Alice確實有一個ZEC
2.同樣的,Alice使用私鑰對這個ZEC進行簽名,證明Alice擁有對這筆資產轉賬的權力。
3.這張ZEC上多了一串隨機數,這串隨機數就好比“支票代號”,用來唯一識別該支票,比方說,Alice支票上的隨機數用R1表示
轉賬過程:
1.與比特幣一樣,首先要先為Bob新建一張ZEC,Bob的編號為R2(與Alice編號不一致)
2.新的ZEC生成的同時,必須想辦法銷毀原先的ZEC,即想辦法讓Alice手中的支票失效,與比特幣的簡單粗暴銷毀方式不同,ZCash采取“備注作廢”的手段,就是對原先的ZEC不做任何處理的前提下,新建一個作廢文件列表,錄入需要作廢的ZEC編號
原先Alice持有的ZEC仍然存在,并沒有消失,只是這張ZEC已被計入“作廢列表”,在確定資產所有權的時候要同時讀取兩個列表的所有信息,能確定擁有這個ZEC的方式是,作廢列表中不存在Bob所持ZEC的編號
這就用到了零知識證明
舉例說明,A要向B證明自己擁有某個房間的鑰匙,且該房間只能用鑰匙開鎖,其他任何方法都無法打開這時,有兩種方法:
方法一:A可以把鑰匙交給B,B用這把鑰匙打開房間的鎖,從而證明A擁有該房間的鑰匙。
方法二:A自己用鑰匙打開房間,從房間里拿出一個物體出示給B,B知道這個物體存在于這個房間,從而證明自己確實擁有該房間的鑰匙
方法二的好處就是B不能看到鑰匙的樣子,從而避免了鑰匙的泄露
回到比特幣和ZCash的例子:
比特幣中的做法:Alice要當著Bob面將比特幣銷毀掉
而在ZCash中,Bob從未見過Alice的ZEC,但還是實現了資產的轉移。
但其實在上述兩種方法中,Alice和Bob的交易見證者還有礦工,礦工負責記錄信息交易,同樣的,礦工也無需看到傳播的ZEC,只要能確定R1作廢了就行。
完整的ZCash匿名交易過程:
首先,Alice要轉一個ZEC給Bob,這個例子中牽扯到的角色有Alice,Bob,和礦工(記賬)
這兩張ZEC都是有效的,Alice的ZEC開始就存在于整個ZCash網絡,BobZEC生成后與會被廣播至全網
為了隱藏交易信息,要對兩張ZEC進行加密處理,可以通過擁有者的私鑰解密,同時,礦工手里有一份作廢列表,Alice要廣播自己的編號,收入作廢列表中,發票代號同樣也是加密的
所以,礦工能得到的信息也相當的有限,同時并不影響礦工對交易本身的判斷,礦工也只需對比編號是否出現在作廢列表中來判斷該ZEC是否有效,整場過程中,每筆交易礦工能接收到的信息也只有一個編號,和一張新的發票,且這兩樣東西都是被加密的,礦工也并不知道轉賬雙方,也不知道轉賬金額。
總結
- 上一篇: 腾讯企业邮箱OpenApi调用说明
- 下一篇: ”真相是否只有一个?”麻省理工学院带你数