Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ethereumを用いた匿名投票
Search
okue
December 23, 2017
Technology
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ethereumを用いた匿名投票
https://github.com/okue/Aneve
okue
December 23, 2017
Other Decks in Technology
See All in Technology
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
2
1k
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
610
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
480
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.5k
20260720_クラウド女子会×PyLadiesTokyoコラボ Amazon Bedrock ハンズオン用資料
yuuka51
1
110
AIが当たり前の組織で エンジニアはどう育つか
nishihira
1
970
PHPで作って学ぶリアルタイム音声対話AIとWebSocket入門 by ムナカタ
munakata
0
130
文字起こし基盤の信頼性
abnoumaru
0
120
設計レビューとAIハーネスで向き合う AIが生み出した新しいボトルネックの対処法 / Design Reviews and AI Harnesses Against New Bottlenecks Created by AI
nstock
4
430
人とエージェントが高め合う協業設計
kintotechdev
0
750
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
160
書籍セキュアAPIについて
riiimparm
0
240
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
Being A Developer After 40
akosma
91
590k
Building AI with AI
inesmontani
PRO
1
1.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
New Earth Scene 8
popppiees
3
2.4k
BBQ
matthewcrist
89
10k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Typedesign – Prime Four
hannesfritz
42
3.1k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Transcript
• 匿名投票アプリケーション • 匿名投票プロトコル • ゼロ知識証明 • クライアントが正しく投票に 参加していることを証明 作ったもの
リンク: http://163.44.149.64/
投票(選挙)にブロックチェーンを使う意義 • 選挙は攻撃の的となりうる • 分散した複数のノードによって構成されるシステムなので、どこかの ノードが壊れても、全体としては機能する • 投票内容の改竄 • 連結したブロックの整合性を取る必要があるので、投票内容の書き換
えは困難 • 透明性 • Ethereumに保存されるデータは公開されている リンク: http://163.44.149.64/
投票(選挙)にブロックチェーンを使う意義 • 選挙は攻撃の的となりうる • 分散した複数のノードによって構成されるシステムなので、どこかの ノードが壊れても、全体としては機能する • 投票内容の改竄 • 連結したブロックの整合性を取る必要があるので、投票内容の書き換
えは困難 • 透明性 • Ethereumに保存されるデータは公開されている リンク: http://163.44.149.64/ ただ、投票内容は公開したくない
匿名投票プロトコル • F. Hao, et al. “Anonymous voting by two-round
public discussion.” IET Information Security 4.2, 2010. private key public key リンク: http://163.44.149.64/
匿名投票の流れ private key public key リンク: http://163.44.149.64/ 1st phase
匿名投票の流れ magic key public key generate private key リンク: http://163.44.149.64/
締め切り
匿名投票の流れ magic key public key private key リンク: http://163.44.149.64/ 2nd
phase
匿名投票の流れ Yes Yes No Yes encrypted ballot リンク: http://163.44.149.64/
匿名投票の流れ Yes No Yes #(Yes) = 2 リンク: http://163.44.149.64/
• 匿名性は、離散対数問題が難しいという仮定に基づく • 大きな素数 𝑝, 𝑝と特別な関係にある自然数 𝑔 の組(𝑝, 𝑔)を共有 •
クライアントは鍵を生成: • 秘密鍵 𝑥 ∈ {1, 2, … , 𝑝 − 1} • 公開鍵 𝑔𝑥 𝑚𝑜𝑑 𝑝 匿名投票プロトコル 素数 𝑝 と定数 𝑔 を知っている人が 𝑔𝑥 𝑚𝑜𝑑 𝑝 から 𝑥を求めるのは難しい 例: (13, 6) 𝟔𝟏 𝟔𝟐 𝟔𝟑 𝟔𝟒 𝟔𝟓 𝟔𝟔 𝟔𝟕 𝟔𝟖 𝟔𝟗 𝟔𝟏𝟎 𝟔𝟏𝟏 𝟔𝟏𝟐 𝟔 𝟏𝟎 𝟖 𝟗 𝟐 𝟏𝟐 𝟕 𝟑 𝟓 𝟒 𝟏𝟏 𝟏 リンク: http://163.44.149.64/
• 全員の公開鍵から、クライアント固有の魔法鍵を生成: • 魔法鍵 𝑔𝑦𝑖 = ൗ ς𝑗=1 𝑖−1 𝑔𝑥𝑗
ς𝑗=𝑖+1 𝑛 𝑔𝑥𝑗 = 𝑔 𝑥1+⋯+𝑥𝑖−1 −(𝑥𝑖+1+⋯+𝑥𝑛) • 秘密鍵と魔法鍵を使って投票: • 投票 𝑏𝑖 = (𝑔𝑦𝑖)𝑥𝑖𝑔𝑣𝑖 = 𝑔𝑥𝑖𝑦𝑖𝑔𝑣𝑖 (𝑣𝑖 ∈ {0, 1}) 匿名投票プロトコル 秘密鍵 𝑥 ∈ {1, 2, … , 𝑝 − 1} 公開鍵 𝑔𝑥 𝑚𝑜𝑑 𝑝 リンク: http://163.44.149.64/ A (3, 8) 60−12 = 6−12 6−3661 B (2, 10) 63−10 = 6−7 6−1461 C (10, 4) 65 65060 (sec, pub) magic ballot Yes Yes No
• 開票: • ς 𝑏𝑖 = ς 𝑔𝑥𝑖𝑦𝑖𝑔𝑣𝑖 = ς
𝑔𝑥𝑖𝑦𝑖 ς 𝑔𝑣𝑖 • ς 𝑔𝑥𝑖𝑦𝑖 = 𝑔σ 𝑥𝑖𝑦𝑖 = 𝑔0 (∵ σ 𝑥𝑖 ( 𝑥1 + ⋯ + 𝑥𝑖−1 − (𝑥𝑖+1 + ⋯ + 𝑥𝑛 )) = 1) • ς 𝑔𝑣𝑖 = 𝑔σ 𝑣𝑖 • ς 𝑏𝑖 = 1 × 𝑔σ 𝑣𝑖 匿名投票プロトコル 秘密鍵 𝑥 ∈ {1, 2, … , 𝑝 − 1} 公開鍵 𝑔𝑥 𝑚𝑜𝑑 𝑝 魔法鍵 𝑔𝑦𝑖 = 𝑔 𝑥1+⋯+𝑥𝑖−1 −(𝑥𝑖+1+⋯+𝑥𝑛) 投票 𝑏𝑖 = 𝑔𝑥𝑖𝑦𝑖𝑔𝑣𝑖 (𝑣𝑖 ∈ {0, 1}) log を取れば yes の個数になる リンク: http://163.44.149.64/ A (3, 8) 60−12 = 6−12 6−3661 B (2, 10) 63−10 = 6−7 6−1461 C (10, 4) 65 65060 (sec, pub) magic ballot Yes Yes No 62
ゼロ知識証明 • “証明したいことが正しい”ことを、秘密(知識)を漏らさずに 相手に納得させる手法 • 今回の電子投票においては、次を保証: • 公開鍵 𝑔𝑥 を送るとき、自分が確かに
𝑥 を知っていること • 投票 𝑏𝑖 = 𝑔𝑥𝑖𝑦𝑖𝑔𝑣𝑖 をするとき、 𝑣𝑖 ∈ {0, 1} であること リンク: http://163.44.149.64/
まとめ • 匿名投票プロトコル[Hao, 2010]を用いて、 誰が投票したかは分かるが、YesかNoかは分からない 投票システムをEthereumコントラクトとして実装した. リンク: http://163.44.149.64/
今後の課題 • Yes, Noだけでなく、誰へ票を投じるか • 1st phase に参加した人が 2nd phase
に参加しない場合、開票 が正しく機能しない。これはシステム的にどう解決するか。 • デポジット • 強制投票 リンク: http://163.44.149.64/
苦労したこと 学んだこと • 開発環境まわり(Truffle, Solidity, Remix, …) • APIから例外が起こった事実しか返ってこなくて、デバッグに苦労 •
Solidityコンパイラ(solcjs)が未熟でエラーメッセージが不親切 • セミコロンが抜けている、等 • コンパイルせずにデプロイしてしまう(不注意) • デプロイして動作確認の繰り返しが手間 • テストを書くべきだった? • 離散対数, ElGamal暗号, ゼロ知識証明など暗号の勉強になった • ユーザーの認証まわりをちゃんと書くいい経験だった リンク: http://163.44.149.64/
ありがとうございました。