相較於比特幣,Zcash(ZEC)更注重交易資料的隱私。在 Zcash 的交易網路上,所有的傳送人、接收人、交易量的資料都是被加密的,經由一個叫「零知識證明(Zero-knowledge Proof)」的技術來做交易驗證。我看了很多文章後(其中也有誤導的),才慢慢了解零知識證明的原理,本文先以改版「阿里巴巴與四十大盜」的故事簡單說明其箇中奧妙,而後更多深入的研究,則待續。
比特幣的公開交易內容
比特幣是一種加密貨幣(Cryptocurrency),它利用密碼學中的雜湊 (Hash)、公開金鑰密碼(Public-Key cryptography)和數位簽章(Digital signature)等技術,把錢包地址加密,把貨幣的使用權加密,可是卻沒有加密交易資料的內容:付錢的地址、收錢的地址和交易金額。
比特幣設計將交易記錄公開,我認為技術上的理由是為了讓挖礦者(Miner)快速驗證交易中的來源款項是不是合法的UTXO 和付款人。
錢包地址是一串字碼,我不知道這個錢包屬於誰,就算知道這個錢包擁有多少比特幣,也沒有侵犯隱私的問題。
這個說法對個人錢包也許行得通,但對一家商店可能就會傷及商業隱私。商店的進出貨如果都用比特幣來做交易,其實很容易用軟體在區塊鏈上找出這家商店的錢包地址的所有資料,算出這家商店的營業所得。在這種需要隱私的應用情境下,比特幣的公開交易紀錄顯得不適用。
Zcash 就是解決公開區塊鏈上的資料隱私問題。
Zcash的加密交易內容
Alice 和 Bob 使用 Zcash 錢包做交易:Alice 轉 1 ZEC 給 Bob。Alice 將交易內容加密後送到 Miner 做驗證,但問題來了,當 Miner 收到這筆交易,因為不能解密交易內容,導致無法驗證交易是否合法,進一步定義是:
- 無法驗證 1 ZEC 是可花用的(i.e. unspending)
- 無法驗證 1 ZEC 是屬於 Alice
關於第一點,Zcash使用「備註作廢」的方法來解決。至於第二點,Zcash 運用「零知識證明」的方法來驗證,它的概念是:Alice 不需要提供交易的數位簽章給 Miner,即可驗證 1 ZEC 是屬於 Alice。
零知識證明
「零知識證明」講的是:證明者 (prover) 要說服驗證者 (verifier) 某些事實是真的時候,不需要透露事實裏的資訊,即可證明事實是真的。
先舉一個常用來說明的例子:「阿里巴巴與四十大盜」。
四十大盜抓住了阿里巴巴!
但盜賊們不確定阿里巴巴知道打開寶藏洞穴石門的咒語?
而阿里巴巴確實知道咒語,卻又不想讓四十大盜們得到。
所以他們協議好,雙方站定間隔一段距離,當盜賊舉起右手,阿里巴巴就唸咒語開門,當舉起左手,就唸咒語關門。
如果失敗,盜賊會把阿里巴巴殺死。
經過一番的驗證,盜賊們確定阿里巴巴會咒語以外,也沒有讓盜賊知道咒語。
這個故事中有幾個元素:
- Assertion:阿里巴巴知道咒語
- Challenge:盜賊舉手命令
- Commitment:開門/關門
- Secret:咒語
對比到 Zcash 的加密交易驗證:
- Assertion:Alice 擁有 1 ZEC
- Challenge:請提出驗證字符串 π
- Commitment:驗證字符串 π
- Secret:數位簽章(私鑰)
想要了解驗證字符串 π 是什麼,需要更深入研究零知識證明的相關理論,條件允許的話,我是希望再寫一篇專文來說明。
《Ben Z.W. Jian》授權轉載
新增留言