読者です 読者をやめる 読者になる 読者になる

ログイン機能がないサイトで投稿の作者が自分であることを表明する方法の考察

はじめに

もしかすると、僕はかなり見当違いなことを言っているのかも知れない。

もしそうなら教えていただけるとありがたい。Twitterはこちら@ryo33music

ここから

先日、またしょうもない新しいサイトのアイデアが浮かんできて「面倒臭いけど今度作るか〜」となっていた。

何が面倒くさいって、ログイン処理を作るのが面倒臭い。 勝手にOAuthとかをやってくれるライブラリを利用してGoogleとかのアカウントでログインできるようにしても、それでも面倒臭い。 なんでこんな面倒くさいことを、サイトを作るたびにやらないといけないのか。

今日の午前中のことだ。ふと、僕はなんでこのサイトにログイン機能をつけないといけないかということを考えてしまった。

考えてみると、僕がこのサイトにログイン機能をつけたい理由は 「コンテンツの作成者が自分が投稿したということを表明できる手段を用意したいから」 のただ1つしかなかった。(著作権とかは考えていない)

なんで、このたった1つの理由のためだけに、わざわざこんな面倒くさいことをしないといけないのか。

そして、今日の午前中は、これをログイン機能の実装以外で行うにはどんな方法があるのかを考えることに費やされた。 もちろん、授業はかなりしっかり聞いている。

すぐに、投稿を行うサイトの他に、ログインを行って使用するサイトを使用すればいいと気づいた。 ログイン機能のないサイト(以下サイト1)で投稿を行った後、ログインを行っている別サイト(以下サイト2)を用いて表明するという方法だ。

その表明方法を以下の条件と前提の上で考えた。

  • 手軽であること
  • 好きなタイミングで表明できる
  • 誰でも表明が正当か確かめることができる
  • 自分のコンテンツを勝手に他人が作ったことにされない
  • 他人のコンテンツを勝手に自分が作ったことにされない
  • どちらのサイトもテキストデータが投稿でき、それは他の人に書き換えられることがない
  • どちらのサイトもテキストデータ以外が投稿できるとは限らない
  • どちらのサイトも投稿前にURIが分かるとは限らない
  • 先に投稿したほうが表明として有効とみなされる

なんの難しいこともなく、ただハッシュアルゴリズム等を利用すればいい。

具体的な方法はこうだ。

方法1

  1. 他人から分からないような文字列を決める
  2. (1)で決めた文字列をハッシュ関数にかけ、それをサイト1での投稿内にそれとわかるように明記する
  3. 表明したくなったら、サイト2で(1)で決めた文字列と(2)で投稿したコンテンツのURIの二つを用いて表明する

非常にシンプルな方法だ。

ただ、「先に投稿したほうが表明として有効とみなされる」という前提が気持ち悪い。現代の技術では先に投稿したことを完全に証明することは不可能だ。 これを解消するためには「好きなタイミングで表明できる」か「どちらのサイトも投稿前にURIが分かるとは限らない」のどちらかの前提を捨てる必要がある。

投稿日中に追記: 「証明することは不可能」は言い過ぎだった。先に投稿した方が著作権侵害として消される動画サイトとか、パクツイばかりのツイッターとか、なんかそういうことを言いたかった。

「好きなタイミングで表明できる」という条件が無い場合は、このようにすればいい。

方法2

  1. 他人から分からないような文字列を決める
  2. (1)で決めた文字列をハッシュ関数にかけ、それを用いてサイト2で表明する(この時点ではコンテンツは投稿されていない)
  3. サイト1で(1)で決めた文字列と(2)で投稿した表明のURIの二つを明記する

そして「どちらのサイトも投稿前にURIが分かるとは限らない」が無い場合はこうだ。

方法3(サイト2はURIが投稿する前にわかる)

  1. 他人から分からないような文字列を決める
  2. (1)で決めた文字列とサイト2で投稿する時のURIハッシュ関数にかけ、それをサイト1での投稿内にそれとわかるように明記する
  3. 表明したくなったら、サイト2で(1)で決めた文字列と(2)で投稿したコンテンツのURIの二つを用いて表明する

方法2では投稿する順番を逆にして、コンテンツに表明のURIを含めることで、方法3ではハッシュの中身にURIを含めることでそれぞれ解決している。

方法3で表明のURIをサイト1で明記するのではなく、ハッシュする文字列に含めているのは「好きなタイミングで表明できる」という条件があるためだ。 それに、サイト2のURIが先願的に決まる可能性もある。

自動化

もっと言うと確認が自動でできると良い。 コンテンツと表明のURIを渡すだけで表明が有効であるか確かめてくれるサイトがあれば最高だ。

そのためには、やり方を規格化するしか無い。もちろん方法1〜3の全てをサポートしたもので、付加情報もつけられると良い。