これはElGamal暗号ライブラリを用いた電子投票形式のサンプルプログラムです。
各自が0か1を決めて暗号化し、それらをスクランブルしてから暗号化したまま集計し、最後に結果を表示する一連の流れをシミュレーションします。
注意:実際の電子投票はもっと複雑で様々な条件が要求されます。 このサンプルプログラムはあくまでライブラリの使い方を見るためのものであり、実際の電子投票アルゴリズムとして使えるものではありません。
vote_tool.exe [opt] mode
mode : init/vote/count/openのいずれかを指定する
-l : 0と1からなるビット列を指定する
システムを初期化して公開鍵(vote_pub.txt)と秘密鍵(vote_prv.txt)を生成します。 ElGamal暗号はsecp192k1という楕円曲線のパラメータを用いています。
0と1のいずれかからなる長さnのビット列vを指定します。 i番目の人の投票がv[i]であることとします。
公開鍵を使ってv[i]を暗号化し、vote_0.txt, vote_1.txt, ...というファイルに保存します。 数字の部分はシャッフルされるためどれがv[i]を暗号化したものかはわかりません。
各自が公開鍵を使って自分の投票を暗号化し、サーバに送ってシャッフルされる部分に相当します。
公開鍵を使ってvoteで作られたvote_0.txt, vote_1.txt, ...を読み込み、平文が0か1のどちらかであることを復号することなくゼロ知識証明を用いて確認し、その値を暗号化したまま加算してresult.txtに保存します。
秘密鍵を使ってresult.txtを復元し、1の個数を表示します。