Zcash — 完全隱匿貨幣流向

Ben Z.W. Jian
3 min readSep 30, 2017

--

相較於比特幣,Zcash (ZEC) 更注重交易資料的隱私。在 Zcash 的交易網路上,所有的傳送人、接收人、交易量的資料都是被加密的,經由一個叫 「零知識證明 (Zero-knowledge Proof)」 的技術來做交易驗證。我看了很多文章後 (其中也有誤導的),才慢慢了解零知識證明的原理,本文先以改版「阿里巴巴與四十大盜」的故事簡單說明其箇中奧妙,而後更多深入的研究,則待續。

http://archives.lib.ntnu.edu.tw/

比特幣的公開交易內容

比特幣是一種加密貨幣 (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: 數位簽章 (私鑰)

想要了解驗證字符串 π 是什麼,需要更深入研究零知識證明的相關理論,條件允許的話,我是希望再寫一篇專文來說明。

--

--