📜 [專欄新文章] [ZKP 讀書會] MACI
✍️ Kimi Wu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Photo by Jesus Kiteque on Unsplash
預計這將是一系列介紹ZKP應用的文章,認識目前ZKP的應用,包含L1, L2和其他比較難分類的應用,當中也穿插著常用的ZKP演算法。而目前的規劃的主題有
MACI
ZKopuru
ZKSync
Trust Token
ZCash
Groth16
PLONK
ZKZK Rollup
…
首次的讀書會介紹了
MACI by Chih-Cheng Liang
ZKopru by NIC Lin
本篇文章先介紹MACI,ZKopru會由 NIC Lin在撰文介紹。
MACI
MACI 是 Minimal Anti-Collusion Infrastructure的縮寫, Vitalik 在2019年5月於ethreaser.ch所提出,為了讓用應用程式在區塊鏈上可以有抵抗共謀的一個機制(主要是想達到正確地執行你的想法跟抗審查(censorship resistance))。而最實際的應用就是投票,若在區塊鏈上投票能做到他人無法查驗你的票,這樣行賄者就無法知道你是否有乖乖投票,如此一來就能減低行賄的誘因。
(關於共謀的概念可以參考 Williams Lai 翻譯 Vitalik的論共謀)
基本流程大致為
欲投票者需要註冊期間內,以公鑰(EdDSA)向合約注冊身份
註冊期結束
投票開始,投票者將自己的票加密送到合約
投票結束,協調者(coordinator)從合約上抓下所有的票, 計算結果,並產生zk證明到合約,更新票數(注1)
MACI中最關鍵的機制在於,投票結束前,投票者都可以向合約發出更換公鑰的指令,然後再使用新的公私鑰去投票。當協調者計票時,會去合約上找註冊者的公鑰,若發現此身份有更換過公鑰,則舊公鑰所投的票就會被認定為無效票。程序大約為
Alice 註冊身份為 公鑰A
行賄者利誘或威脅 Alice 投贊成票,而 Alice 也照行賄者的意思投給了贊成票
在投票結束前,Alice 隨時可以向合約更改身份為公鑰B
更改完公鑰後,Alice 可再用私鑰B簽章投反對票
當協調者計票時,會發現用公鑰A已經被改為公鑰B,所以私鑰A所簽的贊成票,將記為無效票
再深入一點細節 . . .
使用者註冊先產生一組EdDSA的私鑰對(注2),再是透過合約的 signUp() 註冊公鑰,而合約中有一 merkle tree 記載著帳號相關的資訊
接著使用者產生一組臨時的 (ECDSA)私鑰對 prvE/pubE(每次投票就產生一組)
利用這組臨時的私鑰 prvE 跟協調者的公鑰 pubC 產生加密的鑰匙 EncKey,使用密鑰 EncKey 加密投票指令(command)(注3)
再將臨時的公鑰 pubE 與加密過的指令,透過合約的 publishMessage()上鏈
協調者透過 ECDH 交換秘密的方式可以得到 EncKey,當投票結束時協調者再使用這把密鑰把訊息(注3)解密,接著更新票數。
而更換公鑰的指令也是透過 publishMessage()上鏈,因為上鏈的指令都是加密過的,也只有協調者能解密,因此行賄者無法得知受賄者是否有更換過身份。
在MACI中,所有訊息都是上鏈的,因此不怕協調者不打包特定資料。不過所有資料協調者都可以解密,行賄者可以直接與協調者串通,去得知受賄者們是否有乖乖投票,如何防範不在 MACI 原本的提案內,有興趣的人可以去 MACI Github 上了解實作細節。
注1:對!MACI系統中協調者必須是誠實的
注2:在 snarks 的應用中通常使用EdDSA做簽章,而非以太的ECDSA,因為EdDSA在 zk circuit 的實作上複雜度比較低。
注3:在 MACI 中投票, 更換公鑰等動作都稱作指令(command),而加密後的指令稱作訊息(message)
Reference:
ethresear.ch post by Vitalik
MACI spec
[ZKP 讀書會] MACI was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
collusion意思 在 [問題] 請問implicit collusion是什麼意思- 撲克牌 - PTT遊戲區 的推薦與評價
[問題] 請問implicit collusion是什麼意思. 看板 Poker. 作者 besimplegirl. 時間 09-12. 留言 8則留言,8人參與討論. 推噓 8 ( 8推 0噓 0→ ). 討論串 2. ... <看更多>
collusion意思 在 Re: [問題] 請問implicit collusion是什麼意思- 看板Poker - 批踢踢 ... 的推薦與評價
※ 引述《besimplegirl (*阿睦*)》之銘言:
: 請問有人知道implicit collusion是什麼意思嗎
: 有查到英文的定義但還是看不懂QQ
: https://www.pokertips.org/glossary/w/IMPLICIT+COLLUSION
: 原句是
: Now in this spot it would usually be a case of implicit collusion but the pot
: we were playing for here represented almost 40% of the chips in play if I
: made the call!
先說明一下collusion的定義。
Collusion is a form of cheating in which two or more players signal
their holdings or otherwise form a cheating partnership to the detriment
of the other players at the same table.
基本上共謀(Collusion)是一種透過非法訊息的作弊。
兩人或多人非法的一起幹掉桌上的其他鄉民,讓少數人得利,多數人吃屁。
In a tournament where, for example, only the top 5 players are paid
and there are 6 remaining (the last of whom is terribly short-stacked),
implicit collusion involves all players at the table flat-calling through
the river for the maximum likelihood that the short stack be busted by
having all hands see the finish. This strategy is never mentionned at the
table, merely assumed.
上面這段是原波找到的implicit collusion定義。
在某些比賽裡面,到了泡沫階段(Bubble),桌上有一個明顯的短籌碼,
如果這時候大家一起幹掉他,就能同時贏得比賽,
這時候桌上的玩家常常會有一個默契(含蓄共謀),就是大家一起flat call進來,
短籌碼的人要同時贏桌上多人,就幾乎是個不可能的任務了。
這個默契就是implicit collusion,而這通常是合法的?
最常出現這種狀況應該就是在double or nothing的end game。
下面舉個DON的例子
https://www.pokerhand.org/?5678838
拿AA的人牌明顯比另外兩個人好,可是這時候他只要跟進來一起幹掉短籌碼就會贏了。
補充:在fok影片裡,這叫做搞"friend zone,朋友區"
: 不知道有沒有高手可以幫我解釋一下><
: ps..我是超級無敵新手...因為實習的雜誌社有很多相關文章
: 所以要開始學了...要不然根本看不懂Orz
請問是什麼雜誌會做這種翻譯阿?
--
https://pablo871.pixnet.net/blog
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.105.98.224
... <看更多>