標題

[閒聊] 以太坊怎麼混幣?

看板DigiCurrency數位貨幣板作者kugwa (苦瓜)
時間. (2018-06-25 16:40:30)
推文38則 (18推 0噓 20→)
https://github.com/ethereum/wiki/wiki/Design-Rationale#accounts-and-not-utxos

Ethereum 的 Design Rationale 列舉了 UTXO 和 account 的優劣

並解釋為何 Ethereum 採用 account model

不過他下面這一句

if people really do care about privacy then mixers and coinjoin can be built
via signed-data-packet protocols inside of contracts.

我沒有很懂耶

mixer 和 coinjoin 應該是指混幣沒錯吧

但混幣不是只有 UTXO model 的區塊鏈才有的觀念嗎?

account model 要怎麼混幣 並且為何能夠增強隱私呢?



附個混幣解釋

字面意思就是 一群想要傳錢的人

都先把自己的錢交出來

全部混一混然後才發送到各自的目標地址

讓金流以及地址背後的持有者更難被追蹤

實際做法就是 一群想要傳錢的人湊在一起

人數可多可少 可以只有兩個人 也可以數不清的人

當然人越多隱私效果越好

這些人共同創建一個交易

然後各自把想要傳的錢貢獻到交易input

並且也開出各自的目標地址放到交易output

大家都做好各自的input/output之後交易就可以送出了

由於每個input都要用各自的私鑰來簽過整個交易

所以並不會有錢被偷的疑慮

混幣這種行為

打破了「一個交易裡的所有input屬於同一個人」的通則

使得地址更難被關聯起來

https://en.bitcoin.it/wiki/CoinJoin



========更新========

https://blog.ethereum.org/2016/01/15/privacy-on-the-blockchain/

看到 Vitalik 寫的這篇

有講 Ethereum 上的 CoinJoin 協定怎麼做

大概弄懂了

總之差不多就是:

所有委託人的目標地址和要轉的金額都先寫進合約

但不記錄目標地址跟委託人的對應關係

確認無誤的委託人就會轉錢進去合約裡 發現錯誤的委託人就不會轉錢進去

錢到齊之後合約就把錢分配到目標地址 沒到齊就退款
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.232.231
※ 文章網址: https://pttweb.tw/DigiCurrency/M.1529916033.A.45A
#1darkdixen: 寫個會mixer的智能合約 收工 06/25 16:58
#2foolstack: 搜尋Ethereum Mixer就能找到相關solidity 06/25 17:30
我覺得應該可以白話解釋耶

用不著直接去K源碼實作

#3qxxrbull: 還是好奇跟DASH的有什麼差別? 06/25 17:49
混幣是一種行為啦

不是某種幣

#4tcn1john: 全部交到一個帳號 然後分別轉帳給收錢那方這樣嗎? 06/25 18:28
我還沒看前幾樓說的合約源碼

但我猜那些合約應該就是實做成你說的這種方式

可是這種方式應該沒用

因為你請中介帳戶代替你轉帳到目標帳戶

終究要把你的目標帳戶告訴中介帳戶

如果中介帳戶是寫成合約的形式

那麼合約一定要記錄你指定的目標帳戶

使得大家都可以看到你指定了哪個目標帳戶

就失去意義了

如果中介帳戶是人在操作

那變成你把錢轉給中介帳戶 再私下告訴他目標地址委託他代轉(目標地址不上鏈)

但就要信任這個人不會拿了你的錢就閃人

無法免除對第三方的信任

#5tcn1john: Coinjoin應該有一樣的問題 誰來負責收集需求產生轉帳 06/25 18:46
比特幣用 coinjoin 的情況

是所有參與該次混幣的人們 都先把各自的input/output先列進混幣交易裡

等所有人都列完之後 才用各自的私鑰去簽這個交易 所以不會有騙錢的問題

或許這些參與者在當下可以看出哪些input/output是由同一個人寫上去的

但之後的人光看這個混幣交易根本看不出來

所以比特幣用 coinjoin 的確有達成更好的隱私

但以太坊的情況

則是要特地生一個交易來委託中介帳戶代轉多少錢給目標帳戶

之後的人光看這個交易就可以查到 你委託中介帳戶 轉多少錢 到哪個目標帳戶

所以就沒什麼意義

#6darkdixen: 白話解釋就是你可以用solidity寫出coinjoin功能 06/25 19:01
#7darkdixen: 是說在zksnark加入以太後也不用自己寫coinjoin就是惹 06/25 19:03
有了zksnark的話我就沒什麼疑問

但我不認為目前的以太坊合約可以實作出 不用信任第三方又達到隱私的coinjoin

我覺得是account model先天的限制

========回覆更新========

錯ㄌ 還真的可以

#8qxxrbull: 我的意思就是說跟DASH交給master node做混幣來達成匿蹤 06/25 19:24
#9qxxrbull: 交易的差別 06/25 19:24
拍謝誤會

那可能意思差不多吧

不過混幣這個動作按 Bitcoin Wiki 的解釋 應該是可以不需要第三方的吧?

為啥 DASH 需要有 master node

#10tcn1john: coinjoin是第三方產生轉帳資訊的不是嗎?以太寫個第三方 06/25 19:26
#11tcn1john: 負責又不能捲款的合約就能達到一樣效果,問題是有沒有辦 06/25 19:26
#12tcn1john: 法達到無人負責的coinjoin 06/25 19:26
看完 Bitcoin Wiki 解釋 CoinJoin

我的理解是不用第三方耶

只要所有參與者之間互通有無就夠了

每個參與者都先廣播自己要寫上的 input/output

等列表湊齊之後

每個參與者再廣播自己的簽名

這樣大家做出來的交易就一致

不會有問題

當然這是 UTXO model 才可以做到

#13tcn1john: 這樣參與者都知道對方的output了吧? 06/25 19:41
沒錯

但是只有參與者知道而已

哪些input/output是同一個人的

事後光看交易是看不出來的

鏈上看不出來就是沒有證據

========回覆更新========

剛看了一下 Bitcoin Wiki CoinJoin 那篇的 FAQ

把實作搞複雜一點 可以做到讓參與者也不清楚input/output是誰的

#14tcn1john: 以太的話,應該可以建立一個會退錢的智能合約,錢収滿 06/25 20:53
#15tcn1john: 轉入指定地址,鍊上也看不出來 06/25 20:53
#16tcn1john: faq提到透過第三方的coinjoin應該是實用性比較高的做法 06/25 20:56
你的指定地址 指的是委託人指定的目標地址嗎

合約有記錄目標地址的話 大家也都知道是委託人指定的吧

#17tcn1john: 所有人目標地址都放進合約這樣...到齊後一起轉 06/25 21:15
鏈上看的出委託人跟目標地址的對應關係 -> 大家都看的到 沒意義

鏈上看不出對應關係 -> 合約的操作者一定有辦法假造目標地址 必須相信他是好人

想來想去還是覺得兩條路都行不通吧

========回覆更新========

拍謝 好像還真的可以

所有委託人的目標地址和要轉的金額都先寫進合約

但不記錄目標地址跟委託人的對應關係

確認無誤的委託人就會轉錢進去合約裡 發現錯誤的委託人就不會轉錢進去

錢到齊之後合約就把錢分配到目標地址 沒到齊就退款

這方法應該也是不需要信任第三方

#18Ayukawayen: 以太智能合約混幣應該做得到,套無金額遮罩的XMR就差 06/25 21:47
#19Ayukawayen: 不多了,付款者們把資金切成多筆相同金額的輸出,每筆 06/25 21:47
#20Ayukawayen: 都用隱匿性地址當公鑰,收款者拿自己私鑰算隱匿性私鑰 06/25 21:47
#21Ayukawayen: ,用環簽名提款,其他人不會曉得環簽名用的是哪把私鑰 06/25 21:48
#22Ayukawayen: 無法將提款者和付款者連結,然後用金鑰映像防多重提款 06/25 21:48
所以這個是有用到 zero knowledge proof 或是 ring signature 之類的技術嗎

拍謝對這個不熟ˊˋ

如果是的話那我接受啦

但我好奇的是沒有這兩種技術的情況下做的到嗎

像比特幣就可以

#24darkdixen: 已經上Rinkeby 大家可以回家惹 06/25 22:01
欸~不行降啊

我是想釐清盲點

直接丟code太硬了

#25Ayukawayen: 想了一下 環簽放的地方不同 所以或許不能說是套XMR吧 06/25 22:02
#26darkdixen: 就想成以太1.0能用智能合約模擬比特幣的混幣 在加入zk 06/25 22:15
#27darkdixen: 功能後也不用模擬惹 就直接走zk 大guy4john 06/25 22:15
#28Ayukawayen: XMR有用ring signature,要看XMR技術可以看這兩篇: 06/25 23:06
3Q

#31justben: 這樣手續費會變貴嗎? XDD 06/25 23:37
其實我也覺得以太坊 coinjoin 這樣做的話的確會花比較多錢

畢竟這種用合約代轉到不同目標地址的機制

要多好幾道交易 跑code也要花gas 常常做感覺很花錢

而比特幣的 coinjoin 只要大家分攤一個超大交易的手續費就好了

跟平常自己發交易花的手續費應該一樣多 所以做幾次都沒差

#32qxxrbull: 說真的,沒有全網強制做匿蹤,再強的Zn-Shark還是一樣會 06/25 23:57
#33qxxrbull: 有可能因為非匿蹤交易而被關連到 06/25 23:57
#34qxxrbull: Zn-Snark算是目前最強的匿蹤方式,先不討論可能自己印鈔 06/25 23:59
#35qxxrbull: 而不被抓包的前提下 06/25 23:59
Zn-Shark...是梗ㄇ

???
    @_@
        ???

#36qxxrbull: 打錯喇 zn-snark 06/26 00:14
※ 編輯: kugwa (140.112.232.231), 06/26/2018 01:54:09
#37DarkerDuck: 491字 * 7星 = 3437 PCH 07/12 21:05

DigiCurrency熱門文章