コンテンツにスキップ

利用者:74cc1664d58f0ed3e0b34701b528e1ab/電子署名利用ガイド案

厳密な意味での電子署名については電子署名を参照してください。

簡易な電子署名について[編集]

Wikipedia内でのコミュニケーションについてはMediaWikiの仕組みにより、ある程度の本人保証性が確立されていますが、Wikipedia内での話題をWikipedia外で行う場合に誰が誰だか分からない可能性があります。本人であることを証明するために電子署名という仕組みを利用することにより、他者に騙られることなく本人であると言うことを証明することが出来ます。

厳密に電子署名と言った場合、電子署名の項目のように複雑な仕組みを採らざるを得ませんが確実に本人であることは証明出来ます。しかしそこまでの厳密性を必要としない場合、もっと簡単な手順で本人であることを証明することが可能です。以降、厳密な電子署名と区別するために簡易な電子署名とよび、その方法について説明します。

使用する暗号系[編集]

まず、簡易な電子署名には一方向性ハッシュ関数を用います。一方向性ハッシュ関数とは、厳密にはとても複雑な説明が必要ですが、例えばAという文字列が一方向性ハッシュ関数に入力した場合にBという文字列が出力され、出力結果であるBという文字列を見ただけではAを見つけ出すことが困難である関数を指します。文字通り一方向であると言うことです。もっとかみ砕いて説明すると、ある一方向性ハッシュ関数を用いると、9c677286866aad38f8e9b660f5411814という文字列がBに相当し、Wikipediaという文字列がAに相当します。9c677286866aad38f8e9b660f5411814という文字列からWikipediaという単語を導き出すのはとても困難であり、一般的なレベルでは不可能と言ってしまっても過言ではないかもしれません。但し、文字列Aを一方向性ハッシュ関数に入力し、文字列Bを得ることはとても容易に行えます。

一方向性ハッシュ関数の代表的な例として、MD5SHAなどがあります。他にもたくさんありますが、主流なのはこの2つです。暗号に詳しい人や、厳密な暗号が必要な場合はもっと複雑な関数が用いますが、今回のような簡易な電子署名にはMD5やSHA-1のような関数で充分です。さきほどの例はMD5での例です。

試しに利用してみましょう[編集]

例えばこのページのように、オンライン上でMD5やSHA-1の計算を行うツールは多く存在し、Googleなどで検索すれば他のツールを利用することも出来ます。どのツールでも同じ結果が得られます。試しに上記例のようにWikipediaという文字列を入力し計算してみましょう。すると9c677286866aad38f8e9b660f5411814という文字列が得られるかと思います。ちなみにSHA-1の場合は664add438097fbd4307f814de8e62a10f8905588という文字列が得られます。この結果が得られなかった場合、例えばwikipediaのようにWを大文字とするところを小文字としてしまったなどの理由が考えられます。

実際、どのように使えばよいでしょうか?[編集]

まず、頭に入れておくことは、簡易な電子署名を用いて証明するのに使う文字列Aは1回のみ使用できるということを念頭に置いてください。証明を必要とする度に文字列Aを新たに作成する必要があります。また、使用したらすぐさま除去するか使用済みであることを述べなければなりません。

MediaWikiと一方向性ハッシュ関数の両方の特性を活かして利用します。例を挙げることにより実際の使用例を示します。まず、利用者Cさんはあらかじめ任意の文字列を作成し計算し、自分の利用者ページなどに6e1f5ba8c4581d860ad90e467ba2a8d4と記載し、差分リンクのURLを取得します。これによりWikipedia利用者Cさんが6e1f5ba8c4581d860ad90e467ba2a8d4という文字列を書いたということが証明出来ます。次に、Wikipedia外でコミュニケーションを取りたいDさん相手メッセージを送るときに証明を行います。この際、以下のようなメッセージを送ると良いでしょう。

私がWikipedia利用者Cであることを証明するために、まずはこのリンク(差分リンク)を辿ってください。Wikipedia利用者Cが6e1f5ba8c4581d860ad90e467ba2a8d4という文字列を書き込んだという結果が現れたでしょう。この文字列はMD5によって出力された文字列であり、他の人には元の文字列が何であるか分からない状態です。次に、このサイト(MD5計算ツールサイト)を訪れてください。そしてウィキペディアと入力してください。そうすると6e1f5ba8c4581d860ad90e467ba2a8d4という結果が得られます。つまり、Wikipedia利用者Cしか知り得ない情報を知っている私は間違いなく利用者Cであるということが証明出来ます。

もちろん相手がこのような暗号に詳しそう人であればもっと簡略化してもいいかもしれません。

さて、先ほど文字列Aは1回のみ使用できると述べました。勘のいい人は気づいたかもしれませんが、メッセージを受け取った時点でDさんはEさんに対し、私はCであると嘘を付くことが可能となってしまいます。そのため、メッセージ送信後すぐに除去や使用済みであることを述べなければなりません。しかしその後ろの差分を辿っていった場合にWikipedia利用者Cさんが6e1f5ba8c4581d860ad90e467ba2a8d4という文字列をすぐさま除去したということが記録されていれば、EさんはDさんが嘘を付いているということがタイムスタンプによって証明出来ます。最もDさんが嘘を付く必要がない人であればそのような必要はありませんが、対策を行うに超したことはありません。

まとめと備考[編集]

  1. 任意の文字列を作り、一方向性ハッシュ関数で計算する
  2. 出力結果を利用者ページなどに記載し、差分リンクのURLを取得する
  3. 相手に任意の文字列と差分リンクのURLを送信し証明する
  4. 出力結果を除去するか、使用済みであることを追記する

簡易なものであっても、何かしら認証方法を確保しておくことは、自分のコミュニケーションがスムーズになるだけでなく、悪意のある利用者による攻撃から自分を守る防衛手段ともなります。

なお、このガイドでは極力専門用語を避けて説明を行ってきましたが、一応専門用語の方も述べておきます。

  • 文字列A - 入力バイト列や原文など
  • 文字列B - ハッシュ値、メッセージダイジェストなど
  • 1回のみ使用できる - ワンタイムパスワードなど