2018.9.26
區塊鏈探秘
眾所周知,比特幣交易其實不是真的匿名。因為任何第三方,都可以查任何BTC地址的所有相關歷史交易記錄,從而對該地址進行全面審計。就好比你的支付寶的餘額、資金流水明細全部公示天下,這個,你肯定不願意吧!
為了解決匿名性的這個問題,無數以隱私為中心的加密貨幣誕生了。其中,monero(門羅幣)和Zcash(大零幣) 是匿名加密數字貨幣中的佼佼者。
monero主要是透過環簽名、混淆地址、環機密三項技術實現匿名性。
Zcash主要透過zk-SNARK零知識證明,允許傳送者在數學上證明資產的所有權,但在交易中,不會傳達任何資訊,從而實現匿名性。
今天談談環簽名和zk-SNARK。
1. 環簽名
一個普通的簽名如下所示,只有一個參與者,允許一對一對映。
而環簽名模糊了身份認證,因為它僅僅某人屬於一個組,但不知到是組裡的誰。
這使得虛擬貨幣交易能有高度匿名性,可以把它想象成去中心化和非信任的結合。
為了保持匿名性,Monero採用了CryptoNote白皮書中提出的一次性環簽名技術。環簽名透過允許交易發起者加入組,然後將事務作為一個單元,而不是從單個私鑰簽名來分配隱私。
這種技術允許交易發起者“融入”人群。驗證方可以證明輸出存在,並且該組中的一位是真正的簽名者。但是,因為每個成員都擁有等概率的權重,所以他們無法確定簽名者到底是哪位小組成員。隨著組大小的增加,每個成員成為真實簽名者的概率會降低。
環形簽名,涉及聚合使用者的真實隱藏地址P,以及分散在區塊鏈中的大量“虛設”的 P。簽名由所有P 驗證,而數學上,任何相應的私鑰都可以簽署該交易,從而混淆了真實傳送者的身份。
為了防止雙花(雙花就是指在同一時間,同一筆錢出現在兩筆甚至更多筆交易中),Monero的每一筆交易,都有唯一的金鑰映象(key image)。金鑰映象是透過獲取隱藏地址P的雜湊,並將其乘以私鑰x來建立,對每個交易都是不同的。這種機制確保每個P只能被使用用一次。Monero網路維護一個包含所有未完成金鑰映像的資料庫,因此,如果使用者嘗試重用金鑰,網路將拒絕該事務。
2. zk-SNARK
以太坊2017年啟動的“大都會”硬分叉,就整合了ZCash的零知識證明技術——zk-SNARK。
零知識證明:實質上是一種涉及兩方或更多方的協議,即兩方或更多方完成一項任務所需採取的一系列步驟。證明者向驗證者證明並使其相信自己知道或擁有某一訊息,但證明過程不能向驗證者洩漏任何關於被證明訊息的資訊。簡單理解,就是證明者能夠在不向驗證者提供任何有用資訊的情況下,讓驗證者相信你。
舉個例子:
小明在逛商場時,把錢包弄丟了。廣播播報:有人撿到一個錢包,在前臺,請失主認領。
問題來了,小明如何向前臺證明這個錢包一定是自己的呢?不是自己冒領?
這個案例,就是零知識證明的完美運用。
第一:前臺為了避免人冒領,不會向小明洩露有關錢包的任何資訊。
第二:小明必須提供準確無誤的資訊,證明錢包是自己的。
比如:淺談問小明幾個問題:
1、錢包的大小、顏色、品牌是什麼?
2、錢包裡有多少錢?有無證件?等等
如果小明全答對了,小明就是失主。
這種資訊驗證的手段,就是零知識證明。
而zk-SNARK 全稱:zero-knowledge succint non-interactive arguments of knowledge
Zero knowledge:零知識證明。
Succinctness:證據資訊較短,方便驗證
Non-interactivity:幾乎無互動,證明者基本上只要提供一個字串義工驗證。這一點非常重要,表示可以把該訊息放在鏈上公開驗證。
Arguments:證明過程是計算完好(computationally soundness)的,證明者無法在合理的時間內造出偽證(破解)。
of knowledge:對於一個證明者來說,在不知曉特定證明 (witness) 的前提下,構建一個有效的零知識證據是不可能的。
3. 環簽名 和 zk-SNARK 的比較
1)環簽名比zk-SNARK 更輕量級,更快。
環簽名被破解的難度,依賴於decoy(引誘人)數量的大小,decoy越多,破解難度越高,當然消耗的時間和空間也越多。單一門羅幣幣環簽名中參與者數量的最高記錄是4500名。
而zk-starks不依賴於公鑰密碼術,其安全性唯一的加密假設是雜湊函式(如SHA2),是不可預測的。
zk-snark需要28分鐘和18.9 GB的通訊(主要是由於可靠的設定計算和證明金鑰大小),而Zcash最新的樹苗升級,將採用zk-starks技術,會將計算時間減少到幾分之一秒,通訊複雜度減少到1.2 MB。
2)從理論上講,zk-SNARK可提供比環簽名,更高的安全性。
如果環簽名被暴力破解,會洩漏使用者隱私。而zk-snark不會傳達任何交易資訊。
3)zk-SNARK有更高的不確定性
zk-snark 啟用累加器的RSA私鑰必須由生成方銷燬。 這隱藏了整個過程,而不只是傳送人/接收人的身份認證。如果出現bug,或者被人利用,有可能導致通脹或者被人操縱,將會出現問題,這種破壞對是不可預知的。
有競爭是好事情,最近Zcash的“樹苗”升級,帶來了巨大的進步,將計算時間減少到幾分之一秒, 贊!
讓我們一起期待匿名加密數字貨幣更好的未來。