bbs.cgi再開発プロジェクト4
レス数が950を超えています。1000を超えると書き込みができなくなります。
peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。
開発環境の工事現場
また挑戦。@2ch掲示板http://dso.2ch.net/myanmar/
関連は>>2- 旧式のID機能でも
23:59:59以前 -> 0:00:00ジャスト -> 0:00:01以降
で変化したことなら目撃したことあるよ >>871
それは/dev/urandom から取ってきたのを保存するファイルにロックをかけてないからでしょ? 「IDは日付が変わるぐらいに変わります」でいいと思うけどな。 ・FreeBSD 5.xなら/dev/urandomよりも/dev/randomのほうが良いかも
・種ファイルをhogehoge_date "+%Y%M%d"という感じであらかじめ23:55ぐらいに自動生成してもいいのかも
日付が変わる時のロックがいらない。
・ロックファイルを作るときに、openした直後にunlinkするというTipsがある。
プロセスが異常終了したらOSによりunlinkされるし、動作中はunlinkされないので便利。
ttp://ns1.php.gr.jp/pipermail/php-users/2004-November/024120.html
>874
あー間違えた。
date -v+1d "+%Y%M%d"のフォーマットで。という意味ね。
Perlで書き直す必要はあるけど。 自動生成するんなら、シェルスクリプトにしてcronすればいい >>887
更新してからのタイムラグがあるという事ではなくて
実際に全然反映されていないですか?
もしタイムラグ(最大10分の設定)だったら
我慢できませんかねぇ?
全く反映されていない場合はなおすですー
でも今みると反映されているような、 >850
my $idnum = md5_hex($tane);
$md5->add(substr($idnum,-4));
substrの-4って何だろう
IDの種類を制限するためのものだろうか >>884
65536種類に限定しているので、ごく希に違うホストなのに同じIDが出てアタフターな事が起こっているようなのです。 >885
もしIDが(1日,1板で)65536種類に限定されているとするならば、
2つの別々のホストから同じIDが出る確率は(1日あたり)次の通りとなる
住人数 確率
2: 0.0015%
50: 1.8523%
100: 7.2784%
150: 15.6881%
200: 26.2109%
250: 37.8447%
300: 49.6112%
400: 70.4809%
500: 85.1681%
1000: 99.9529%
…………到底 'ごくまれ' とはいえないな
単に '気づかないことが多い' だけだったのか ID 生成部変更するなら今がチャンス !!
この機械を逃がすと・・・ 二度と変更されないかもだ perl分からないよう。
この際IDの桁数を増やすとかどうでしょ。 s/a/あ/g;
ごめんなさい冗談ですすいませんで IDをIPの上位から生成するのはどうだろう。
繋ぎ換えでは変え難くなるし、ご近所さんが判って楽しい。 >>ヤクザ
いや、同じになったら意味ないでしょ。凄いことになっちゃうぞ。
IDは12桁ぐらいがいいかなぁ。長すぎてもあれだし。
あとついでだから日付だけじゃなくて年月も入れようぜ。 ちなみに
毎月同じ日にちの日は同じIDになるという噂があるど、
本当なの?
そして、なぜそうなるの? そういやなぜだろう……。
日替わり乱数が入ってるはずなのに。 固定IPだと毎月同日同板は同じIDになることあります。なんどか体験しました。 自分で書いたコードでさえ・・・なのに
いわんや・・・おや >>895
規制議論でYahooの人のIDが一ヶ月前と一緒だった記憶がある。 乱数の初期化が怪しいと思われ。
ちゃんとseed渡してるの?
(渡してないと毎回同じ乱数しか出ないかも)
と思ったら/dev/randomか・・・ 固定IPで同じ板に毎日かいてて、IDにUDだしたことある人は、毎月1台UD用PC追加・・・?
うそーんw sub Make_ID($$$){
# 引数は・・・
# 板名
# time 値
# IPアドレス
# 返り血はID文字列
use Digest::MD5;
my ($BBS_name, $time, $IP_Address) = @_;
my $ID_2ch = Digest::MD5->new();
$ID_2ch->add(qx|uname -v|); # 鯖固有の文字列とか。
$ID_2ch->add($BBS_name); # 板のディレクトリ名ね。
$ID_2ch->add(int($time/86400)); # 純粋に日を基準単位に。
$ID_2ch->add($IP_Address); # 丸ごと豆乳。
return substr($ID_2ch->b64digest,-9,8); # ちょんぎるして戻るり。
}
・/dev/random にアクセスしないのでHDDにも優しいかな?
・uname -v の値を知っている人は、★の中の人「だけ」だと思うし。
・IDが被る確率は、遙かに少なくなっていると思うし。
・なんてったってアイドルだし(はぁと) >>904
それだとわからないのはuname -vだけ
(自分のIPやら日付やらpathやらはわかる)
だからIPからuname を総当りで求めて
検証が終わったらば他の人のIPも求まるだろう。
32ビット整数ぐらい割といける。
そのためのrandomですよ。 $time/86400 て必ず余らない時が00:00:00なの? >>906
> だからIPからuname を総当りで求めて
総当たりって!?うちの林檎機でもこれだけの文字列が出てくるけれども、、、
Macintosh:~ root# uname -v
Darwin Kernel Version 7.6.0: Sun Oct 10 12:05:27 PDT 2004; root:xnu/xnu-517.9.4.obj~1/RELEASE_PPC
あんぽんたんにでもわかりやすい解説キボンヌですm(_ _)m >>907
UTC だから、+ 9 * 3600 かもですm(_ _)m uname -v だと公開してしまうと
ある程度書式がありますよね。
FreeBSDなら
FreeBSD 5.1-RELEASE-p8 #0: Sat Sep 27 11:17:53 GMT 2003
見たいな感じで
頭から言うと
FreeBSDは変わらないし、
バージョンだって10.20とかないし、
RELEASEでないとしてもSTABLEとかあるていどきまってるし、
年月日では
月はAprとかDecとかしか入らないとか
曜日はSunとかMonだとか
などと考えると組み合わせの数は現実的になりますよ。
そうするとOS頻繁に変えるとかいうんでなければ解析は可能でしょう。
んでunameが割れると今度はそっちにあててIP解析もできるんじゃないかなぁと。
っと長い割には判りにくいかもです。すいません。
>>909
そこは足したり引いたりすればいいのか。
>>908
rootの中の人がうっかりuname -aの結果を書いたら祭り始まりの合図。 まぁなんというか
静的な鍵の秘匿は難しいということで。 >911
unam -a は、かなりの頻度で後悔されてます。
http://www6.big.or.jp/~beyond/bbsnews/proxy/operate/1093068260/
の215とか uname -aなんてホストごとの有効な違いが40bitぐらいしかないんじゃないの?
1024bitぐらい豪快にランダムのシードを用意しないとダメ。
パソコン数台で解析できる。 そもそも現在のやり方が決まった経緯は知っておいてくださいー 1 旧IDはIPアドレスの特定が結構できてしまった
2 そこで新しくID生成ルーチンを作ろうと思った
3 しかしおいらにはそのスキルはなかった(^_^;)
4 どうせならルーチンを公開しても耐えられるもののほうがいいわけで・・・
5 スキルのある人よろしく・・・と公募した(ちょうどこのスレッドの展開みたいなもんですな(^_^;))
6 で、32bit総当り検索に耐えるために
@非公開の鍵を使うことで、推定を難しくした(しかし、これだけではちと不安)
AIPアドレスが違っても、ある程度の数の同じIDが出るようにした(つまりIPアドレスは特定不能)
って感じだったように覚えてます(^_^;)
って、そういう話じゃなくて?(^_^;) IP:IDを多対一対応にすることで一の側からの元IP特定を防いだんか >921
そゆことです(^_^;)なのである程度の重複は避けられないんだな。 IDが同じになるのも別に悪いことじゃないと思います。 ある程度っつっても相当稀なわけだし、構わないでしょ。
要は毎回呼ばれるような無駄な負荷を無くすのが今回の目的? >924
多分・・・
1 ファイルオープンがもったいない(負荷軽減)
2 異月同日に同じIDが出てしまうらしいバグ対策
の2点かと(^_^;) 当時のおいらってなんか頭の回転よかったらしい(^_^;)
今や何を話しているのか理解できん ひょっとして今起こっている「日付が変わってもIDが変わらない(ことがある)」ってのは
「異月同日に同じIDが出てしまうらしいバグ」の同工異曲かな?
今のIDルーチンには $md5->add(substr($DATE,6,2)); が入ってないから。 ってことはたぶんmd5.cgiに日付だけ入ってて乱数部分が空っぽだったりすることがあるんじゃなかろうか。 f1 , intro @ex9 を見てきたけど
md5.cgi の中は 2004_12_04<>xxxxxxx になっているようです >IPアドレスが違っても、ある程度の数の同じIDが出るようにした(つまりIPアドレスは特定不能)
これって要するに
・まず自分のIPで書き込みをしてIDを出す
・出てきたIDと自分のIPでブルートフォース解析する
ってのに対処するため?
ブルートフォース耐性が最速のXeon Dual 1台で3年ぐらいの耐久度があれば多対1にする必要はないんじゃないかなぁ。
256bit AESあたりで落とし戸暗号化してしまえと。
IPアドレスは固定IPを持っている奴が解析するとして確定ずみ。
アルゴリズムも公知にしないと穴が怖い。
だから暗号鍵を256bitぐらいの大きさにしておけば良い、あらかじめ全部の暗号鍵をテーブル計算するのも難しいし。
なんだったら1024bit暗号にしておけば、世界中のHDDをあわせてもテーブル作れないし。 >>932
net@ex9 も
0004_12_16<>xxxxxxx の形になっているようです >>933
〜〜をするためにってのも書いてもらえると
私にも理解できるかも知れません >933
むずかしいことはよーわからんのだけど(^_^;)現在のIDは
1 秘密鍵はハッキング等によって取得される可能性がある
2 秘密鍵があれば、どのような経路をたどったとしても2^32の試行で結果が一致するIPアドレスをはじき出せる
3 IDの生成ルーチンは公開に耐えるものにする。
という前提で作られています。
結果
1 毎日変わる不定値の種を使う(最悪でも1日分の解析しかできない)
2 多対一に均等劣化した情報でIDを生成する(IPアドレスを特定できなくする)
という2つの防御策を組み込んだわけです。
前提条件の1、3については当時IDからIPアドレスが推定可能であったという
2chとしては致命的な欠陥が露呈した反動で厳しく考えていたということもあるかもしれません。 >1 毎日変わる不定値の種を使う(最悪でも1日分の解析しかできない)
えーと基本的には1は同意です。
2についてです。多対1をやめて暗号鍵のbit数を増やして1対1にすることで、
「別人なのに同ID」という不具合を回避できるのではないかと思っています。
>1 秘密鍵はハッキング等によって取得される可能性がある
についてですが、/etc/sshd/sshd_*_keyと同じ程度の危険性しかないと思います。
仮にハッキングに成功したとしても、24時間で更新されてしまうのであれば
IDからIPを現実的な速度で解析するチャンスはその日だけとも考えられますし。
(IP→IDへはSHAなりMD5なりのハッシュで一瞬のうちに計算できるが。
逆の方向はは2^32をすべて計算して一致するIDを求めるしかない。
そしてそのハッシュのシードは24時間で更新される) それって不具合なの?
むしろ匿名性の保障だと思うんだけど。 ひょっとしてバイナリデータを<>で読み込んでるせい?>異月同日に同じIDが出てしまうらしいバグ
\nが混じってたらそこでちょん切れちゃうもんね。 >938
解析できないぐらい強ければ「別人なのに同ID」を回避して、かつ匿名性を保障できると思います。
ふむふむ。。。
今日は忘年会なのでその最中に練ってみよう。こねこね。 別な人なのに同じIDがあるほうが精神的に安心感があるんだけどな >>940
「別人なのに同ID」を回避するってことは
IDによる発言者特定能力を向上させるってことで
つまりあなたは「匿名性を今より下げろ」と言ってるわけで。 同一ID出たら
「同じIDキタ━━━━(゚∀゚)━━━━ッ!!」
でおkじゃないのか(´・ω・`)?? そのへんの話しは、、、
思想の問題ですからねぇ
別スレでじっくり話し合ってもらって
このスレでは実装の話しということで、
>>939
なのか?
ID生成サーバをつくってもいいかもしれないと言ってみるテスト 板ごとに何かわからない鍵の部分が必要って事でしょ?
サーバー毎になると同じサーバー内の板を「神のIDキター」とか言いながら
走り回る奴が出ると。
サーバーが落ちた時にIDが変わってもいいのなら、
メモリの上に置くのが現実的かなぁ。 特に問題ないようなので
これで fix と、
次回は何年後かな? 単純にリーモトアドレスの一部分とサーバ名と年月日を種に
crypt使ってIDを生成すればいいのではないかなとか
これならi/oなしだし >>904
のやつみたいなかんじかな。
上のほうで解析とか色々あったけど
重複いっぱいあるなら完全に解析はむりだから
良いんじゃないかという気もする。
もう終わったようなのでどうでもいいか。 >>955
たしかにそんな気もするが何かのネタにでもなればいいか
#!/usr/local/bin/perl
ID();
print "$ID\n";
exit;
sub ID
{
$server="operate";
$time= localtime(time);
$H="211.132.146.94";
@I= split(/\./,$H);
$host= substr($I[3],-2) . substr($I[2],-2) . substr($I[1],-2);
$tane= $host . $server;
$ID= substr(crypt(crypt(crypt($str,$time[5]),$time[4]),$time[3]),-8);
$ID=~ s/\./+/g;
return $ID;
} うん・・・・確かにそんな気がしてきた(^_^;)
ランダムな日替わりシードがない場合に問題になる点
・逆算が可能・・・しかし多対一変換なのでIP特定不能
・他の日のIDとの比較が可能・・・しかし多対一変換なので65535通りの結果が・・・・
あれ?(^_^;)65535個の解答パターンマッチングでIP同定は可能なのか・・・・(^_^;)おしい >>936
> 1 秘密鍵はハッキング等によって取得される可能性がある
> 2 秘密鍵があれば、どのような経路をたどったとしても2^32の試行で結果が一致するIPアドレスをはじき出せる
ハッキングされれば、書き込みログ(規制議論板で行われてるログ開示のやつ)がとられちゃうんでは?
ハッキングされてもIDからIPアドレスをわからないようにしよう、というのは無駄なような気がします。 まちがえてるし・・
IPは下三つの2桁のみ使用なので逆算は無理のはず
#!/usr/local/bin/perl
ID();
print "$ID\n";
exit;
sub ID
{
$server="operate";
$time= localtime(time);
$H="211.132.146.94";
@I= split(/\./,$H);
$host= substr($I[3],-2) . substr($I[2],-2) . substr($I[1],-2);
$tane= $host . $server;
$ID= substr(crypt(crypt(crypt($tane,$time[5]),$time[4]),$time[3]),-8);
$ID=~ s/\./+/g;
return $ID;
} >958
そなんだよね(^_^;)
ただハッキング等の「等」の部分がちょっとだけ安心ってくらいで。 多対1でも、絞り込めたら
ちょっとこれ見てよ。これが証拠。
http://localhost/images/shouko.jpg
とかやってうっかりアクセスするような事があったら >961
localhostを見せられても・・・・(^_^;) リンク先でIP抜かれるのは明らかに2ちゃんねるのせいじゃないな。
自分の無知を棚上げして2ちゃんねるのせいにしようとする人は後を経たないけど。 (私のいない)今夜中には次スレでつかね
>>961
w >>961
漏れの鯖にはshouko.jpgなどない ヲチ板(net@ex9)にて、「日付が変わってもIDが変わっていない」という現象が起きているようです。
「日付が変わった直後の数分・数十分単位での遅れ」ではないようですが・・・
ひょっとして、「日替わりの種」が変わってないのかな? >>966
サカ板もです。
ex9はみんな変わらなくなってしまっているみたいですね。 ここ2〜3日日付が変わってもすぐにIDが変わらない人が続出してるんですが
何かあったのでしょうか。
数分たったら変わってるようですけど。
とりあえず実況のいくつかの鯖で確認しています。
ちなみにこんなスレも立ってる
日付が変わってもID変わらなくなった。
http://qb5.2ch.net/test/read.cgi/operate/1103382206/ foxInitMD5idにdateのチェックが入っていない気がする。 私が確認したスレでは、朝の10時半頃になっても「前日と同じID」で発言してる人がいました。
何なんでしょうね・・・ レス数が950を超えています。1000を超えると書き込みができなくなります。