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

Ethereumを用いた匿名投票

okue
December 23, 2017

 Ethereumを用いた匿名投票

okue

December 23, 2017
Tweet

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/