- - PR -
公開鍵暗号についてのクイズ
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-07-08 19:21
たぶんみなさん、ご承知の上で話されてると思いますが(w
一応、補足させて頂きます。 実際に RSA を実装する場合は暗号前に常にある決まった方式で パディング処理を行うように作ります。 要するに あみゅせる さんが言われている乱数を付加するものです。 これによって、同じ平文を同じ公開鍵で暗号化する場合でも 毎回違った暗号文になります。 復号後もその決められた方式を行うと、乱数と平文を切り分けられます。 (余計な記述は無効票になるというのはちょっと別の話ですね。) 実際の電子投票では暗号だけでなく、 有権者が投票していることも証明するために署名も行います。 ただ誰が誰にを追跡されるのはイヤなので、ブラインド署名という 特殊な方式が使われます。(実際はどうなんでしょう?) #こういうネタ振りって非常に良いですね。 #ぜひ、他にもいろいろやって頂きたいです。 | ||||
|
投稿日時: 2004-07-08 23:14
広く使われている暗号だとよく考えられているでしょうけど、
計算している部分のライブラリだけ拾ってきて、勘違いで お手軽に使ってしまうとか、「間違った」使い方ができたり するんじゃないかなあと思うです。
本当に選挙で使うとしたら、ブラインド署名と通信経路の秘匿が 必須でしょうね。 でも、あちこちにローテクな穴がありそうな... あ、いえ、特に知ってるわけではなくて、なんとなくそう思う、 というだけのことなんですが。 | ||||
|
投稿日時: 2004-07-09 09:33
ブラインド署名は有権者が投票しているのを証明するにはいい方法かもしれませんね。
ただ選挙ではブラインド署名を行う公証人役をどこの機関が務めるのか 法的な問題とかがかなりからんできそうですね。 また、多重投票や選挙権の無いものが投票しようとブラインド署名を要求してきますから、 公証人役のところには有権者が認証をかけないといけないことになると思いますが、 認証情報と署名対象の暗号化された投票情報の組が絶対にもれないようにする必要も ありますし、運用上の問題も大変ですね。 | ||||
|
投稿日時: 2004-07-09 11:17
すでにほぼ行われるべき議論は終わっているようなので、
簡単にポイントを整理させていただきます。 >平文には候補者名しか記入しないのですか? >それなら、システムで乱数なり時間なりを平文に含めては >いかがでしょうか。 いただいたこの回答が正解なのですが、これだけではわかり にくい方のためにあえて補足させていただくと、 このシステムのデザインでまず最初に考えるのは、 ・送信する情報の実体(この場合はとりあえず候補者名)を 暗号化する ・共通鍵よりも"暗号精度の高い"公開鍵暗号を使ったら どうか? かもしれません。そこで公開されているはずの"候補者名"を わざわざ暗号化するわけですが、暗号化では 「暗号化の対象は、本来予測できない値にする」のが 基本です。 (以前別スレッドでも話題に上がった「ヴァーナム暗号」の 安全性を考えてみてください) ですから公開されている"候補者名"を暗号化した 場合、 1) 候補者名のリストを準備(たとえば3人分) 2) 決められた方法でリストを対象に暗号化して 3つの暗号済みデータからなるテーブルを作成 (暗号化は共通鍵でも公開鍵でも良い) 3) 不正に入手したある暗号化データをテーブルと 照らし合わせて、元の候補者名を判断 という手順で、容易に解読(復号ではなく解読)できます。 候補者名ではなく、それがたまたま短い暗証番号であった 場合でも、この暗号化済みデータテーブルを用意するのは それほどの手間ではないので、実際の攻撃は瞬時にして 完了です。確率に頼るブルートフォース(総当り攻撃)ではなく、 ただのデータベースの検索なので、攻撃のコストは安く作業 時間もある程度予想がつきます。 これらの攻撃手法は「無線のWEP暗号攻撃」や最近話題に なった「シーケンス番号予測によるDoSの手順」などでも 使われています。 また暗号化のアルゴリズムについてですが、共通鍵暗号と 公開鍵暗号では、暗号の絶対的精度の違いのために使い 分けるのではなく「鍵の配布問題」の運用の問題と計算に かかるコストを根拠に使い分けるべきです。つまり「公開鍵 暗号のほうが単純にアルゴリズムの精度が高いから破ら れにくい」と考えるのは間違いです。 鍵の配布問題を考慮しなくても良いケースであれば、計算 コストの安い共通鍵でもそれなりの精度のアルゴリズムは たくさんあります。つまり今回のクイズであえて"公開鍵"と 書いたのは、これらの誤解を狙った"ひっかけ"です。 話が長くなるので、一度ここで休憩を入れましょう。 [ メッセージ編集済み 編集者: 樫田 編集日時 2004-07-09 14:29 ] | ||||
|
投稿日時: 2004-07-09 16:22
以上の検討からおわかりいただけるように、「投票する
候補者名」をそのまま暗号化するのであれば、共通鍵でも 公開鍵でもすぐに解読できてしまいます。 そこで簡単な解決方法として、乱数による下駄を履かせます (パディング)。候補者名のデータにある程度の長さの乱数 データを追加した上で暗号化を行えば、事前に暗号化 テーブルを作ることはかなり困難になります。もちろん 「下駄の履かせ方」の具体的なアルゴリズムについては、 できれば公開せず機密性を保ったほうがよいでしょう。 テーブル作成がさらに困難になります。 とりあえずのクイズの回答はここまでですが、本当の "オチ"である、このシステムにとって真の問題は、 (すでに他の方々の指摘にもあるように) 注意すべき点は「投票する候補者名」への機密性ではなく、 ・誰が投票したかへの機密性 ・"成りすまし"や"改ざん"に対する認証性・完全性 という2点です。 しかし、これを実装するにはシステム単体で実現するのは、 なかなか困難であり、特に認証性などは、なんらかの署名 システムやPKIなどと組み合わせることになるでしょう。 逆にこれらの問題解決が困難だからこそ、比較的対処 しやすい「投票する候補者名」への機密性で"お茶を濁す" ことになりかねないわけです。 さて7/11の選挙に向けて、街ではそろそろ「最後のお願い」が 始まっている所もあるのではないでしょうか。 季節柄のネタでした。 |