在所有交易都不公開的情況下防止使用分散的數字貨幣進行雙重支出?
最近創建一種名為比特幣的去中心化線上貨幣的方法引起了一些興趣。目標是有一種方法可以在沒有中央權威、沒有雙重支出或偽造的情況下轉移貨幣。他們的方法是讓網路中的所有節點嘗試通過工作量證明計算來驗證交易,然後將驗證最多的交易視為正式交易。如果攻擊者想要偽造官方記錄(扭轉他們的首次支出並再次使用硬幣),那麼他們必須擁有網路中的大部分計算能力。最大的缺點是,在這個方案中,所有交易的記錄必須是公開的,比特幣論文的作者認為這是必須的:
確認沒有交易的唯一方法是了解所有交易。在基於鑄幣廠的模型中,鑄幣廠知道所有交易並決定哪個先到。要在沒有受信任方的情況下完成此任務,必須公開宣布交易。
在任何此類計劃中,所有交易都必須公開嗎?
眾所周知,當您擁有中央機構/鑄幣廠時,可以實施沒有公開成績單的方案,但我只對分散方法的可能感興趣。
筆記
我最初在 ctheory 上問過這個問題。另外,我不熟悉 crypto.SE 上的標記,因此感謝您的幫助!
為了使這樣的計劃起作用,如果我有一些貨幣,我必須能夠把它給 Abel,我必須能夠把它給 Beth,但我必須不能把它給 Abel 和 Beth。這意味著將貨幣提供給 Abel 必須以某種方式使我無法將貨幣提供給 Beth,即使我以前可以這樣做。
可以通過三種機制來實現這一點:
- 可以有一個中央機構。要將硬幣交給亞伯,我必須告訴中央當局我已經這樣做了。然後中央當局將禁止我將硬幣交給貝絲。這意味著提供硬幣既需要中央當局的批准,也需要向中央當局報告。
- 可以存在分佈式安全設備。要將硬幣交給 Abel,我必須告訴持有硬幣的安全設備的實例。一旦將硬幣交給了 Abel,該設備將禁止我將硬幣交給 Beth。這意味著硬幣必須保存在物理安全的設備中。在實踐中,它還需要一個中央機構來載入設備並向它們頒發密鑰。(我需要證明交易中涉及安全設備,這需要設備具有證書,這需要一些授權來頒發此類證書。)
- 至少所有交易的某些方面可以是公開的。因此,如果我把硬幣交給亞伯,就會有一個貝絲很容易找到的記錄。貝絲會知道硬幣不是我可以給的。
比特幣選擇了第三種方法。這似乎是加密去中心化貨幣的最佳方法。沒有已知的第四種方法。
現在,唯一需要公開的交易資訊就是足夠的資訊來證明我有硬幣並證明我沒有將它們轉移到其他地方。碰巧的是,比特幣協議洩露的資訊比這多得多(例如,我將硬幣轉移到的賬戶)。如果需要,該協議可以設計為減少公開資訊。
硬幣需要可以追溯到它們的起源。但是,您是否可以跟踪他們通過的特定帳戶是一個實施決定。
例如,一個假設的硬幣可以使用以下機制:Alice 想向 Bob 發送一些硬幣。她知道 Bob 的公鑰。她僅為該交易生成一個隨機私鑰,並使用 Bob 的公鑰對其進行加密。然後,她根據她生成的隨機私鑰以及她用 Bob 的公鑰加密的同一密鑰的加密版本,向公眾發布了一項向公眾轉移硬幣的交易。
現在,Bob 將看到他的私鑰能夠聲明的交易。沒有其他人會知道這筆交易是針對 Bob 的,因為 Bob 的公鑰和它的任何類似物都沒有出現在區塊鏈中。鮑勃不會知道硬幣來自愛麗絲,其他人也不知道硬幣去了鮑勃。
這種方法仍然使硬幣完全可追溯。但區塊鏈中從未出現過可追溯的賬戶。
這解決了比特幣的兩個“問題”。如果我在某處發布比特幣地址,任何人都可以看到該帳戶獲得了多少比特幣。如果有人想把無法追踪的比特幣轉給我,他必須從我這裡獲得一個一次性使用賬戶,如果他想匿名給我比特幣,他是不容易做到的。
你仍然可以使用比特幣生成和使用一次性賬戶,但你不能廣播它們,或者它們不再是一次性賬戶。並且沒有簡單的方法讓某人匿名向您請求。
您可能認為這意味著必須對每個帳戶進行測試才能聲明每筆交易,從而導致方案效率低下,並使基於 Web 的大眾錢包之類的東西在計算上不切實際。然而,我發現了一個真正奇妙的解決這個問題的方法,但是這個答案已經太長了。
Zerocash就是這樣一種去中心化的貨幣計劃。Zerocash 交易完全隱藏了交易的來源、金額和目的地。
它通過稱為zkSNARK的加密工具實現了這一點,它有效地允許您在“零知識”中證明陳述的有效性,即您洩漏的只是陳述的真實性。
在比特幣中,您通過使用您的私鑰簽署該硬幣上的交易來證明您擁有該硬幣。打個比方,將硬幣視為一個上鎖的盒子,您解鎖它以證明您擁有它。然而,在 Zerocash 中,您使用 zkSNARK 來證明您可以解鎖盒子。由於這是在零知識的情況下完成的,因此除了該陳述的真實性外,不會洩露任何資訊。
它比這更複雜,我省略了許多細節,但它是對正在發生的事情的一個不錯的近似。