Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ethereumを用いた匿名投票

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for okue okue
December 23, 2017

 Ethereumを用いた匿名投票

Avatar for okue

okue

December 23, 2017

Other Decks in Technology

Transcript

  1. 匿名投票プロトコル • 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/
  2. • 匿名性は、離散対数問題が難しいという仮定に基づく • 大きな素数 𝑝, 𝑝と特別な関係にある自然数 𝑔 の組(𝑝, 𝑔)を共有 •

    クライアントは鍵を生成: • 秘密鍵 𝑥 ∈ {1, 2, … , 𝑝 − 1} • 公開鍵 𝑔𝑥 𝑚𝑜𝑑 𝑝 匿名投票プロトコル 素数 𝑝 と定数 𝑔 を知っている人が 𝑔𝑥 𝑚𝑜𝑑 𝑝 から 𝑥を求めるのは難しい 例: (13, 6) 𝟔𝟏 𝟔𝟐 𝟔𝟑 𝟔𝟒 𝟔𝟓 𝟔𝟔 𝟔𝟕 𝟔𝟖 𝟔𝟗 𝟔𝟏𝟎 𝟔𝟏𝟏 𝟔𝟏𝟐 𝟔 𝟏𝟎 𝟖 𝟗 𝟐 𝟏𝟐 𝟕 𝟑 𝟓 𝟒 𝟏𝟏 𝟏 リンク: http://163.44.149.64/
  3. • 全員の公開鍵から、クライアント固有の魔法鍵を生成: • 魔法鍵 𝑔𝑦𝑖 = ൗ ς𝑗=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
  4. • 開票: • ς 𝑏𝑖 = ς 𝑔𝑥𝑖𝑦𝑖𝑔𝑣𝑖 = ς

    𝑔𝑥𝑖𝑦𝑖 ς 𝑔𝑣𝑖 • ς 𝑔𝑥𝑖𝑦𝑖 = 𝑔σ 𝑥𝑖𝑦𝑖 = 𝑔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
  5. ゼロ知識証明 • “証明したいことが正しい”ことを、秘密(知識)を漏らさずに 相手に納得させる手法 • 今回の電子投票においては、次を保証: • 公開鍵 𝑔𝑥 を送るとき、自分が確かに

    𝑥 を知っていること • 投票 𝑏𝑖 = 𝑔𝑥𝑖𝑦𝑖𝑔𝑣𝑖 をするとき、 𝑣𝑖 ∈ {0, 1} であること リンク: http://163.44.149.64/
  6. 今後の課題 • Yes, Noだけでなく、誰へ票を投じるか • 1st phase に参加した人が 2nd phase

    に参加しない場合、開票 が正しく機能しない。これはシステム的にどう解決するか。 • デポジット • 強制投票 リンク: http://163.44.149.64/
  7. 苦労したこと 学んだこと • 開発環境まわり(Truffle, Solidity, Remix, …) • APIから例外が起こった事実しか返ってこなくて、デバッグに苦労 •

    Solidityコンパイラ(solcjs)が未熟でエラーメッセージが不親切 • セミコロンが抜けている、等 • コンパイルせずにデプロイしてしまう(不注意) • デプロイして動作確認の繰り返しが手間 • テストを書くべきだった? • 離散対数, ElGamal暗号, ゼロ知識証明など暗号の勉強になった • ユーザーの認証まわりをちゃんと書くいい経験だった リンク: http://163.44.149.64/