記事一覧はこちら

2chのID作成方法について その2013年1月

2chのIDが何故被るのか?IDはどのように作られているのか? トリップは桁数増えた時かなりbe板で弄ってた記憶があるけど採用されたんだっけ?情報がかなり古いです。

被るのは仕様

bbs.cgi再開発プロジェクト4 936 名前:マァヴ ★[sage] 投稿日:04/12/17 06:13:03 ID:??? >933 むずかしいことはよーわからんのだけど(^_^;)現在のIDは 1 秘密鍵はハッキング等によって取得される可能性がある 2 秘密鍵があれば、どのような経路をたどったとしても232の試行で結果が一致するIPアドレスをはじき出せる 3 IDの生成ルーチンは公開に耐えるものにする。 という前提で作られています。 結果 1 毎日変わる不定値の種を使う(最悪でも1日分の解析しかできない) 2 多対一に均等劣化した情報でIDを生成する(IPアドレスを特定できなくする) という2つの防御策を組み込んだわけです。

前提条件の1、3については当時IDからIPアドレスが推定可能であったという 2chとしては致命的な欠陥が露呈した反動で厳しく考えていたということもあるかもしれません。 強調部分が被る理由。この部分があるから万が一秘密鍵が漏れてもIPが逆算される事が無い。 よく考えられてるよなー。俺ならipやらをmd5して満足してそう。確かにipなんて所詮32bit42億個。試しにmd5(rand());やってみたら1秒あたり30万個。仮にロジックと秘密鍵が漏れたら4時間で総当り出来ちゃう。

idは一日65536通りしかない

今回の新しいID制ってなんか変だから 348 名前:酔っぱらい ◆WinMIRVY @マァヴ ★[mirv@mx1.freemail.ne.jp] 投稿日:01/09/08(土) 03:48 ID:??? んじゃ、最終的に・・・・

・IPにcryptを掛けて末尾3文字(情報量は16ビット)を取ったもの ・日替わりで/dev/randomから取った値8バイト ・板名 を並べてMD5を掛ければ、秘密の数字がバレない限り IPからIDを再生できない。 日替わりのランダム値を予測するのは非常に困難。 万一バレて総当りされたとしても、65536通りの値の どれであるかはわからない。

※現バージョンからの修正点 ・漏れ串の場合IDが漏れたIPで変わるようにする (日替わりIDは仕様上実現されるはず) 後に詳しく書くけどこの仕様は2004年12年17日の段階でも生きてる。2chID数ランキングで調べた結果、2005年09月25日~2013年01月10日のデータで一番IDが多いのは2012年01月13日のニュー速VIPでIDが56312個。 当日の過去ログ一覧を見てもよくわからんけど何かあったのかね。 平均が2万程度なので、IDを増やす祭りが起きれば65536が上限なのか調べることが出来ると思う。

IDが被る確立

上限65536の誕生日問題と考え高精度な高等関数が使えるフリー計算で色々計算出来る。 n個のIDが存在した場合にIDが被っている場合がある確立は以下のとおり。つまり302個のIDがあるスレでは50%の確立で誰かのIDが被っている。高いなー。 imgTemp-2013-01-11-11-13-29 n個のIDが存在するスレにあなたが書き込んだ時IDが被る確立は以下のとおり。つまり659個のIDがあるスレに書き込むと1%の確立でIDが被る。低いなー。 約45501個のIDがあるスレ(もはや板)に書き込むと50%の確率でIDが被る。ゲハは大体7000ID/dayだから10%。このくらいなら必死チェッカーで調べれば見つかるね。 imgTemp-2013-01-11-11-11-40 imgTemp-2013-01-11-11-12-13 一日140個のIDが書き込まれているスレに316日連続で書き込むと50%の確立でIDが被る体験をする事が出来る。無理だなー。 しかもこれ、一日が終わった後 前の日のIDで確認する必要があるからな。面倒くさすぎ普通やらねえ。 求める計算式は以下のとおり。コメントアウトして高精度な高等関数が使えるフリー計算で使ってね。

id=65536;
from=1;
count=100000;
add=100;
for(x=from;x<=count;x=x+add){
 /* z=1-(id!/(id^x*(id-x)!));*//* 誰かのIDが被ってる確立 */
 /* z=1-((id-1)/id)^x;*/ /* あなたのIDが被る確立 */
 println(x,z);
} 

だいたい以下のレスの数字と合うから正しいと思いたい。 【全板集合】2chにある無駄な知識を集めるスレ5 909 名前:水先案名無い人[sage] 投稿日:2006/01/18(水) 17:53:30 ID:vy/5A+U/0 IDの生成にはIPアドレスの全てを使う IPアドレスからMD5によるハッシュを16進数形式で算出し、 返ってきた文字列の後ろから4バイト(65536通り)が使われる これと、サーバから得たランダムな数字(1日ごと)、板キー、 年月日の「日」を混ぜ合わせて、 MD5によるハッシュをBase64形式で算出し、 返ってきた文字列の前から8バイト(281474976710656通り)がIDとなる (さらに、後ろに 0,O,o,P が付くこともある) よって、1日、1板あたり、IDは65536通りまでしか出ない

同じIDが出る確率は(1日、1板あたり)次の通りとなる

住人数 自分のIDと別のIPによるIDが被る確率     2:  0.0015%   100:  0.15%   500:  0.76%  1000:  1.51%  5000:  7.34% 10000: 14.15% 45427: 50%オーバー

住人数 2つの別々のIPによるIDが被る確率    2:  0.0015%   50:  1.85%  100:  7.28%  150: 15.69%  200: 26.21%  250: 37.84%  302: 50%オーバー  400: 70.48%  500: 85.17% 1000: 99.95%

ID部分開発記録

今のID作成ロジックは2001年09月08日に今回の新しいID制ってなんか変だからマァヴが作り、 2004年12月14日にbbs.cgi再開発プロジェクト4スレでFOXが手を加えています。 FOXが貼ったコードでもIPのmd5が制限されているし bbs.cgi再開発プロジェクト4 850 名前:FOX ★[sage] 投稿日:04/12/14(火) 19:19:15 ID:??? sub foxGetMD5id { my ($bbs,$md5date,$num,$tane) = @_; my $id = "FOX";

use Digest::MD5; use Digest::MD5 qw(md5_hex);

my $idnum = md5_hex($tane); my $md5 = Digest::MD5->new; $md5->add(substr($idnum,-4)); $md5->add($bbs); $md5->add($num); $id = substr($md5->b64digest, 0, 8);

return $id; }

884 名前:動け動けウゴウゴ2ちゃんねる[sage] 投稿日:04/12/16(木) 11:43:24 ID:/xbD7FnK

850 my $idnum = md5_hex($tane); $md5->add(substr($idnum,-4));

substrの-4って何だろう IDの種類を制限するためのものだろうか

885 名前:未承諾広告※ ◆TWARamEjuA [sage] 投稿日:04/12/16(木) 12:35:25 ID:YtBnLjWr

884 65536種類に限定しているので、ごく希に違うホストなのに同じIDが出てアタフターな事が起こっているようなのです。 現在のやり方に決まった経緯を知っておけと発言しているからFOXも把握していると思う。 917 名前:FOX ★[sage] 投稿日:04/12/17(金) 01:16:42 ID:??? そもそも現在のやり方が決まった経緯は知っておいてくださいー

920 名前:マァヴ ★[sage] 投稿日:04/12/17(金) 01:41:24 ID:??? 1 旧IDはIPアドレスの特定が結構できてしまった 2 そこで新しくID生成ルーチンを作ろうと思った 3 しかしおいらにはそのスキルはなかった(^^;) 4 どうせならルーチンを公開しても耐えられるもののほうがいいわけで・・・ 5 スキルのある人よろしく・・・と公募した(ちょうどこのスレッドの展開みたいなもんですな(^^;)) 6 で、32bit総当り検索に耐えるために   ①非公開の鍵を使うことで、推定を難しくした(しかし、これだけではちと不安)   ②IPアドレスが違っても、ある程度の数の同じIDが出るようにした(つまりIPアドレスは特定不能) って感じだったように覚えてます(^_^;)

って、そういう話じゃなくて?(^_^;)

2chのコード

2chのコード(に非常に近いとされている)物が流出している。 17スクリプト - 2典Plus 2ちゃんねる用語サイト - livedoor Wiki(ウィキ) 2ch型掲示板 17 名前:spdy[0] 投稿日:2001/05/15(火) 19:34 ID:??? http://www.geocities.com/seven0100/ 2ch流失スクリプトを最近の風に書き換えてみました 評価キボン 最近の風に書き換えた と言っているのでオリジナルの流出スクリプトはまた別らしい。

2ch互換スクリプトというサイトに2ch流出スクリプトが復刻されている。 中身のタイムスタンプは2000年07月07日。17スクリプトの一年近く前。 勝手に2ch流出スクリプト17氏スクリプトをミラー。 記事と関係ないけどこのサイト 帰らざる2ちゃんねる は20世紀の2chのログがある。とてもいいと思います。 2chの開設日とされている1999年5月30日のログもバッチリ。日本のインターネット界の歴史ですよ。 昔の2chのURL http://bohe.virtualave.net/ とか全然知らなかった。その後一ヶ月の間に変わりまくってる。 つくりたい掲示板のジャンル募集! 1 :ひろゆき :1999/05/30(日) 12:25 つくりたいジャンルがあったら書いて下さい。 暇なんでほいほい作ります。ホントは暇じゃないかも。。。

11 :ひろゆき :1999/05/30(日) 15:48 とりあえず、「嫁姑掲示板」http://bohe.virtualave.net/yome/bbs.cgi 鬼畜恋愛掲示板 http://bohe.virtualave.net/ai/bbs.cgi 違法行為掲示板 http://bohe.virtualave.net/ihou/bbs.cgi いろんなリンク掲示板 http://bohe.virtualave.net/link/bbs.cgi 他にご希望ありますかぁー?

参考URL

WordPressってURLが行頭にあると余計な改行が入る仕様なんだね。訳分からん。 記事に使わなかったけど調べて見つかったスレとかURLとか。 今回の新しいID制ってなんか変だから http://teri.2ch.net/test/read.cgi/accuse/999866038/ bbs.cgi再開発プロジェクト4 http://qb5.2ch.net/test/read.cgi/operate/1101984763/ 全く違うIPから同じIDが出たんだけど… 2chのID生成方法が謎すぎる件 http://hayabusa3.2ch.net/test/read.cgi/news/1284536267/ 携帯→2ch運用情報スレッド35 http://qb5.2ch.net/test/read.cgi/operate/1163237236/ 2chのセキュリティのシステムについて調べています。 以下、全て.. - 人力検索はてな http://q.hatena.ne.jp/1136118920 2ちゃんねるのような形式の掲示板を自分のサーバに設置したいの.. - 人力検索はてな http://q.hatena.ne.jp/1163552593 2ch互換スクリプト http://mewlog.sakura.ne.jp/scripts/ 2ch型掲示http://pc.2ch.net/test/read.cgi/php/988816430/