區塊鏈中怎麼保證隱私和全部人記錄的矛盾?
在區塊鏈中既然每個人都能記錄到每一筆交易或行為,那如何保證發生交易或行為人的隱私?如果說其他人收到的都是加密信息的話,對於幣的交易如何判斷這個幣的歸屬呢?
這個問題問得很好。
這是區塊鏈發展過程中的一個重大矛盾,至今仍未完全解決。即如何在所有節點都保存一份完整賬本的前提下,保護鏈上交易者的隱私。
大方向有兩個,
1是不從根本上解決因素問題,但通過各種手段讓追蹤成本提高,使得追蹤成本過高而變得不划算。
2是從根本上加密交易過程,通過零知識證明、環形簽名等方法直接從數學上保障交易匿名性。
BTC比特幣,作為首個被大量接受的區塊鏈貨幣,其隱私保護就是沒有保護。BTC鏈上交易對所有人公開。並且由於上萬個全節點都保存了區塊賬本的特性,使得鏈上交易完全沒有可能被徹底消除。這樣的設計在隱私保護上甚至弱於使用現金,給各國政府追蹤鏈上(合法非法)交易提供了極大的便利(交易記錄全球公開,並且記錄一旦上鏈就不可能消除。秋後算賬非常方便)。
對此BTC早期開發者不是沒有做過努力,比如中本聰本人就引入了零錢地址機制。即每次付款後,餘額都會全部轉移至一個新的地址內。以此大量增加交易參與方地址數量,來增加刺探交易的成本。但目前事實證明該方法沒有什麼效果,反倒給用戶使用帶來了大量不便。
後續btc也從其他幣上引入了一些成功的加密匿名方法,但這些方法裏沒有任何一個是默認啟用的。(比如下面提到的隱祕地址需要收發雙方錢包都支持)因為很少有人用,這些功能也發展不起來。
SCE FBI等機構都有自己的虛擬貨幣分析部門,FBI發言人甚至公開宣稱過btc上追蹤非法交易比現金更容易,希望有更多非法交易在btc上進行以更好的抓捕。
在認識到只靠找零機制不靠譜後,幣圈2013/14/15年出現了大量更複雜隱藏手段的幣,大部分採用的都是混幣機制。
混幣機制即把幾個人交易的幣都混在一起,然後一起發給接收方。這樣經過中間集中,沒法直接獲得發出方和接收方是誰。這個方法大幅提高了分析成本,但並沒有從根本上解決問題。長期的多次交易,還是能從記錄中以很大把握找到發出方和接收方。(這類有dash等具有一定匿名性的幣)
這個問題直到2015年門羅幣XMR引入環形簽名機制之後纔算是大致上從根本解決。
環形簽名最早出現在十七世紀法國,當官員向皇帝進言有可能讓皇帝不高興的內容時,官員們會把名字圍繞一個圓簽在外面。這樣簽名就沒有主次之分。可以避免皇帝一不高興抓了發起人殺頭。(但不能避免皇帝把所有簽名了的人都殺了)
XMR的環形簽名機制還引入了支付公鑰和觀察公鑰,使得支付方公網不可見。
隱匿地址Stealth Addresses通過支付公鑰和觀察公鑰,加密接收方地址,使得接收方不可見。
另外搭配RingCT機制隱藏金額,Kovri 技術隱藏交易方IP,等等的技術隱藏信息加強匿名性。
門羅幣的上述機制都是默認啟用的。同時由於所有交易都默認進行混幣,所有人的交易都互相關聯,也導致了另一些問題。比如鏈上如果有太多人私鑰暴露,整個鏈的安全性都會下降。這直接導致XMR的分叉幣會導向一個兩敗俱傷的情況。(在分叉上想要交易必然要使用私鑰,一旦暴露,兩條鏈上的安全性都會下降)。
另外,由於交易方需要持續掃描全網,XMR的交易量提升很困難。超過一定閾值會導致交易無法完成。
最後,XMR的多重加密機制導致每個交易都非常臃腫,直接限制了XMR的TPS(每秒交易量)。
XMR並不是完美的虛擬貨幣。
Zcash採用了一個不同的機制,是zk-SNARKs(一種零知識證明機制)。這個機制可以讓交易雙方發起完全加密的匿名請求,礦工在不需要解密,不需要知道雙方是誰的前提下,通過零知識證明機制自動撮合加密交易處理。
儘管零知識證明在數學上沒有漏洞,但zcash在實現上並沒有強制開啟該功能,同時由於沒有工程上默認啟用的增大追蹤難度的混幣等機制。zcash整體匿名性不如xmr,尤其是在代碼出bug時,zcash上交易記錄更容易被追蹤。(即0day攻擊下,monero的抵抗性強於zcash)
其實市場在這兩個幣的加密性之間已經有了對應表現,XMR的市值高於ZEC大概4倍。
上述各種機制我就不班門弄斧細講原理了,這需要有一定密碼學基礎。而密碼學有自身難度在這裡,並不是每個人都能輕鬆理解。
比如下面評論就有不懂密碼學瞎噴的,呵呵呵呵。
交易記錄只有交易的雙方知道,這樣就保證了隱私。目前已經有好幾個方案
1.混幣器。區塊鏈上有多個攪拌器,要轉賬的每個幣都要經過攪拌器和許多別的幣混合,這樣,從混幣器出來後,除了混幣器節點,別人誰都不曉得這個幣來自哪裡。用戶把一組幣委託給混合器,然後從混合器中取出等價值的幣。達世幣(Dash)就是採用了混幣器方案。
2.Zerocoin.熔鑄掉你自己的加密貨幣(也就是所謂的零幣熔鑄),然後再兌換等量的做記號的新幣(被稱為零幣取回)。這些幣在沒有任何交易歷史的情況下出現,與新挖礦而得到幣相似。零知識證明用來證明你確實燒過了加密貨幣,而沒有透露你燒過的具體加密貨幣信息,因此你有權贖回等量的新幣。與只是掩蓋交易環節的混幣不同,這種機制完全打破幣的交易環節。轉賬交易接受方得到的幣看起來完全是全新的幣。
3.zk-Snark.是基於零知識證明的一種改良,交易驗證者可以在不知道交易的信息的情況下驗證交易合法
這個問題詳細解釋起來可以很複雜,我試著簡化一下,只講解其中密碼學涉及的大質數分解。更詳細的請自己查。我們來舉個例子:
假設有一個"刪債幣",我的錢存在地址:」100,003,220,005,757「。
100,003,220,005,757是由兩個數相乘得來的。其中:
- 小的那個數是我的密碼;
- 大的那個數的後三位是這個地址的餘額;
- 其他的數字代表其他信息。
你能破解我的密碼和金額麼?
如果我要花掉這筆錢,必須要給"刪債幣"取款機提供這個一個密碼,機器只要做這件事兒:
- 我給機器提供密碼:*******
- 100,003,220,005,757 ÷ ******* = X
- X是一個整數並且大於*******,如果不是,密碼不對。
- X的後三位是多少,把錢吐給我。
具體密碼是多少,金額是多少,請看評論區。
在這個例子中:
- 取款機的代碼是公開的。
- 賬戶地址的信息也是公開的。
- 我作為擁有這筆錢的人隨時可以把這筆錢取出來。
- 你無法取走這筆錢,但我可以給你證明我有這筆錢(評論區提供密碼證明)。
- 其他任何人跟你一樣,都無法證明他們有這筆錢。
其他人基本上是針對一些利用密碼學工具來保護數據隱私的方案來講解的,主要包括了環簽名、同態、零知識證明等。這些方法往往會在效率、易懂性、實現難度等方面表現有所降低。
除此之外,還有一些從工程角度來解決該問題的,如以太坊的狀態通道通過將小額、高頻交易放到鏈外進行,這樣只有初始狀態和最終狀態為交易無關方所知,而中間狀態只能被交易參與方所掌握;另外,還有如ChinaLedger提出的CCP(中央對手方)方案,增加了一個第三方,將交易的記賬與有效性驗證分開;以及達世幣所使用的混幣機制等。顯然,這些方案從簡單、易用性出發,因此在隱私保護方面有所妥協。從目前來看,隱私保護只有在效率與安全性等方面有一個較好的平衡點時,才能更好地幫助區塊鏈技術發揮更大的價值。
Monero隱匿地址是通過DH交換實現的,Monero把DH中間結果作為隱匿地址展示給別人。下面以接收方Alice、發送方Bob為例參考:
Alice:產生兩個隨機數 作為私鑰,計算出公鑰
Bob:
- 產生隨機數
- 計算一次性公鑰
- 計算DH中間結果
- 將上述結果附加在交易中,使用P作為收款地址構造交易鎖定腳本
Alice:
- 持續監控網路中產生的新交易,提取出每一個交易的 欄位
- ( )
- 使用自己持有的隨機數 ,計算 是否和 相等
- (是不是感覺弱爆了,非常低效)
- 當發現 時,Alice便可以通過 計算出 對應的私鑰了
- Alice便可以花費看似隨機的地址裏的幣了
https://cryptonote.org/whitepaper.pdf?cryptonote.org
Monero啟用Ring CT後還可以隱藏交易金額,其基礎版本來自於nullc的Confidential Transaction,基本思想就是把比特幣的校驗規則 中具體金額隱藏,只返回對比結果的正確性。
具體做法直接看nullc的文章和Ring CT paper
https://people.xiph.org/~greg/confidential_values.txt?people.xiph.orghttps://eprint.iacr.org/2015/1098.pdf?eprint.iacr.orgZcash主要是運用了可驗證計算裏的Pinocchio協議,提供Hash運算、Merkle樹修改狀態的證明,並且不公開輸入。
具體的抽空寫,不知道比Monero高到哪裡去了。
市值又不能證明什麼,EOS當前還是空氣,市值排名還在Monero前面呢。
前面的門羅和zcash的例子講的不錯了。環簽名我覺得也只是在理論上有用,因為如果簽的人少他可以通過追蹤大量的交易來做排除法,簽的人多了效率感人
這個道理來看門羅和zcash漲不起來現在比較能用的辦法就是hash上鏈
hash上鏈的意義在於,我和誰誰做了一筆交易,其實其他人不用知道比特幣之所以慢,就是因為他要所有人都要驗證交易事實上隔壁村的王二狗有多少錢與我何干?只要王二狗和我交易的時候,出示他的財產證明,我上鏈一看,喲是真的,就可以了這個證明可以是一大串交易的結果,我可以驗也可以不驗,看場合,小額交易買杯咖啡就不用了,就像現在免密支付一樣所以回到人類社會的發展,其實區塊鏈目前還在人類的村落時代,還只是剛剛開始如果你是直接持有的私鑰,而不是通過交易所去購買的數字貨幣(代持私鑰),那麼其實不存在這個問題,因為區塊鏈的賬戶地址不是記錄的用戶姓名等信息,而是一個哈希字元串,只要你不公開的把自己和這個哈希字元串關聯在一起(比如寫一篇文章 讓別人給你的這個地址打賞),木有人知道交易的對象是誰
zcash提供了一種解決你提到的問題的方案。泛泛地說,交易是本身是加密的,其他用戶通過零知識證明協議來驗證交易是否合法。所有者有創造一個交易必須的祕密信息,只有他能生成合法的交易。所以這個幣只能他用。
推薦閱讀: