トリップ (電子掲示板)
トリップとは、匿名掲示板2ちゃんねるなど電子掲示板で、個人の識別のために使われる文字列を表示する機能、またはその機能によって表示された文字列を指す。
トリップは暗号化された文字列であり、使用者のトリップキーという文字列の入力により表示できる。キャップに準ずる機能であり、表示することによって簡易的に個人を証明および識別できる。
名前の由来は『1人用(ひとりよう)キャップ』を略して『トリップ』。
トリップは、トリップキーという文字列を暗号学的ハッシュ関数(一方向ハッシュ関数)に通したものである。トリップキーが同一であれば、誰でも同一のトリップを表示できる。トリップキーは、パスワードとも呼ばれている。
電子掲示板によっては、トリップと称さずにパスなどの呼称を使用している。
目次
トリップを表示する方法
- 名前欄に名前を入力する。(必要が無ければ入力しなくてもよい)
- 名前の後に"#"を入力し、続いて(トリップキーとなる)任意の文字列を入力する。
- 書き込む。
例えばトリップキーに「Wikipedia」という文字列を用いた場合、名前の後に『◆Ig9vRBfuyA』と表示される。これがトリップである。
トリップキーに使用する文字は、全角文字・半角文字を問わず、あらゆる文字を使用することができる。 トリップキーに"#"を複数含んでいる場合は、最も左にある"#"の右の文字から有効となる。即ち、名前欄に「なまえ#abc#def」と入力した場合は、「abc#def」がトリップキーとなる。
トリップキーとして有効であるのは、文字列の先頭の"#"を除いて8バイトまでであり、9バイト以降は適用されない(12バイト以降は後述)。2ちゃんねるのトリップシステムではShift_JISを用いており、半角文字は1バイト、全角文字は2バイトとなり、全て全角文字であれば4文字までとなる。たとえば、「#12345678」と「#123456789」、「#あいうえ」と「#あいうえお」と「#あいうえろ」では、それぞれ同一のトリップが表示される。ただし全角文字でのふるまいはAS ISのものである。
トリップを生成する仕組み
2ちゃんねるのトリップは、Perlのcrypt()を利用しており、次のようなPerlコードによって生成される。
$tripkey = "#istrip"; # トリップキー文字列(# 付き)
$tripkey = substr($tripkey,1);
$salt = substr($tripkey.'H.',1,2);
$salt =~ s/[^\.-z]/\./go;
$salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;
$trip = crypt($tripkey,$salt);
$trip = substr($trip,-10);
$trip = '◆'.$trip;
print "$trip";
2ちゃんねるで表示されるトリップは、トリップキーから#を取り除いた1-8文字目をキー、2-3文字目(特定記号は変換)をsaltとして使用し、得られたものの後ろ10文字である。
ちなみに上記のプログラムの出力結果は「◆/WG5qp963c」である。
2002年10月3日以前の2ちゃんねるでは、"($trip,-10)"が"($trip,-8)"だった為に8桁表示だった。
2009年6月19日から12桁表示に対応したため上記プログラムとは仕様が異なっている。
トリップを検索する方法
(10桁トリップは)上記のソースコードからわかる通り、Unixのcrypt(3)で生成しており、トリップキーの文字列を鍵としてDESを使用したものである。一種の暗号学的ハッシュ関数であり、理論的には総当たり以外の解析方法はない。
ただし、短い、あるいは辞書攻撃で破られるようなトリップキーを使ったならば、当然ながら辞書攻撃で破られる。
同一のトリップを発見するための時間
現在の10文字トリップの場合、トリップキーの組み合わせは28京8230兆3761億5171万1744 (<math>2^{58}</math>) 通りあるとされており、同一のトリップを発見するには、毎秒30万個検索した場合で平均約1万5千年かかるとされる。
これはあくまで最悪実行時間であり、1秒で発見できる可能性もあるが約3万年かかる場合もある(同条件で全てのトリップを求めるには約3万年掛かるため。ただし誕生日のパラドックスに注意)。
トリップキーが英単語や数字のみの単純な組み合わせでは、辞書攻撃等を用いてクラックされる可能性が高い。特に(8桁の)数字のみの組み合わせは、00000000〜99999999の1億通りしかないため、計算能力の低いPCでも容易に検索できてしまう(1秒間に1万通りを検索できるのであれば、1億通りの結果を得るのには3時間弱しかかからないことになる)。また、そのような単純なトリップキーのトリップは、トリップキーと共に公開されている事があり、総当たりのような手段を取らなくても、検索エンジンを使用することで比較的簡単に発見できる。
トリップキーが公になっているトリップは個人を証明する手段としては使えないが、文字の並びが目立つものや特定単語が含まれるものでは、トリップキーが公開されているものがある。これらは公開トリップと呼ばれていて、名前にアクセントのような形で用いられることがある。
トリップに類似する機能
2ちゃんねる内の板によっては任意もしくは強制でIDを表示するものがある。IDはIPアドレス(および板によっては日付)を元に生成される。個人を証明するものであることからキャップやトリップの類と言える。なお、同一のIPアドレスでも、表示されるIDはサーバごとに異なる。詳しくは2ちゃんねる#「名無し」の存在を参照。
ザ掲示板では、2ちゃんねるのトリップに類似した機能としてクリプトノモトがある。
新月では、署名が2ちゃんねるなどでのトリップに当たる。
12桁トリップ
トリップキーが長くなることにより、正しく使えば解析がより困難になった。#の後に12バイト以上入力することによってこちらに切り替わる。暗号化された◆以降の文字列は、従来の10桁から12桁になる。
2009年6月現在、下のようなPerlコードによって生成している。
if (length $handle_pass >= 12)
{
my $mark = substr($handle_pass, 0, 1);
if ($mark eq '#' || $mark eq '$')
{
if ($handle_pass =~ m|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|)
{
$GB->{TRIPSTRING} = substr(crypt(pack('H*', $1), "$2.."), -10);
}
else
{
# 将来の拡張用
$GB->{TRIPSTRING} = '???';
}
}
else
{
use Digest::SHA1 qw(sha1_base64);
$GB->{TRIPSTRING} = substr(sha1_base64($handle_pass), 0, 12);
$GB->{TRIPSTRING} =~ tr/+/./;
}
}
else
{
# 従来形式
}