官术网_书友最值得收藏!

3.1.2 簡述零知識證明在區塊鏈中的應用

在區塊鏈上,假設存在一個中轉地址,記為AddrExchange,所有人都把Token轉到這個地址(AddrExchange),然后,再從AddrExchange轉出Token。中轉地址被使用之后,有心人就可以通過交易金額等信息,慢慢核對并反推對應關系來找到交易對象。通過技術手段使得轉入的交易記錄和轉出的交易記錄無法一一對應,也就真正實現了交易的匿名。零知識證明首先在隱藏對應關系的環節就可以起作用。

現在,讓我們把整個區塊鏈系統想象成一個大的中轉地址,所有人都往這個地址里轉Token,所有人都從這個地址里把Token轉走。所有參與交易的人之間不需要合作,轉賬隨時可以進行,不需要等待其他交易。如果在整個系統中,歷史上所有的交易都被混合在一起,交易越頻繁,交易數量越多,其匿名性也就越高(逆向復雜度高,時間長)。

那么,零知識證明是怎樣實現Token轉入和轉出的分離,并且同時保持可以被驗證呢?

假設:每個人在轉入Token的時候,都會生成一個數字(不告訴別人),轉賬的時候在Token上附帶一個用這個數字生成的哈希值Alpha,寫入區塊鏈賬本系統。在轉出Token的時候,只需要向系統證明:

交易者知道一個數字,這個數字生成的哈希值是Alpha。

大家經過區塊鏈上的共識,確認這個證明有效之后,就允許交易者把Token轉走。因為哈希值Alpha在區塊鏈上,說明轉入的Token是確實存在的,而一旦有人知道哈希值Alpha背后的數字,說明其真的是轉入Token的交易者。

而零知識證明保證了在交易者整個操作過程中,沒有人知道交易者的數字是什么,也就無法偽裝成交易者把Token轉走。

問題來了,上面的這個證明其實并沒有實現轉入交易和轉出交易的隔離。因為交易者在轉出的時候暴露了哈希值Alpha,其他人通過哈希值Alpha就可以找到轉入的那筆交易,從而存在把兩筆交易關聯起來的可能性。

所以,我們有必要把證明過程再升級一下。因為系統中所有的轉入交易都會附帶一個哈希值,成了一個哈希值的列表。交易者的哈希值Alpha也在這個列表中。如果可以證明:

交易者知道一個數字,這個數字生成的哈希值在系統的哈希值列表中。

那么交易者的哈希值Alpha沒有暴露,也就沒人能把交易者的轉入交易和轉出交易關聯起來。

上面加粗的兩句話,就是零知識證明可以做到的事情。當然零知識證明不僅僅可以用作匿名交易,為了更好地幫助讀者理解和掌握,我們用具體的實例,通過一些適用的場景來進一步探討零知識證明。

如果對工程實現有興趣,現有匿名交易的實現主要有三類,使用環簽名的比如門羅(Monero),使用零知識證明的Zcash,還有使用Mimblewimble協議的Grin等。讀者也可以思考一下,相對于環簽名,零知識證明帶來了哪些收益。后續章節我們也會進一步探討以太坊的運用。

主站蜘蛛池模板: 格尔木市| 武强县| 吴堡县| 买车| 黔东| 澄城县| 神农架林区| 荔浦县| 桂阳县| 环江| 蓬溪县| 耒阳市| 额济纳旗| 新绛县| 广东省| 涿州市| 确山县| 南投县| 惠来县| 沈阳市| 理塘县| 洪雅县| 山阴县| 定陶县| 安龙县| 偏关县| 武平县| 华容县| 普兰县| 岫岩| 绍兴县| 柳江县| 卓尼县| 蛟河市| 肇源县| 忻州市| 沅陵县| 平潭县| 双城市| 任丘市| 江华|