Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
200
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
150
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
290
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
継続的なAIコスト最適化
bgpat
1
340
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
860
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
940
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
340
Featured
See All Featured
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
We Have a Design System, Now What?
morganepeng
55
8.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Statistics for Hackers
jakevdp
799
230k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
Building Applications with DynamoDB
mza
96
7.2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The SEO Collaboration Effect
kristinabergwall1
1
590
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/
ありがとうございました。