◆ 全サーバトリップ統一作戦
■ このスレッドは過去ログ倉庫に格納されています
現在三つに分かれているトリップの仕様を統一しようという作戦 >>2-5 辺りも読んでください。 104 :鳥屋? ◆TMMMMMMMMM :2003/10/26(日) 19:55 ID:OYk5PAwE 例によってむっちゃ忙しくてアレなのだが、ココで俺意見出しつつ まとめてみます。ご意見ご希望ご感想pls ・基本は旧鯖仕様 経緯を見るからに、新鯖仕様は鬼っ子。 対応ツールも、流出互換スクリプトも、旧鯖仕様ベースなので それに合わせるのがよかろう。 (したらば系のことは、俺が興味ないので忘れる) できることならば旧鯖トリップはことごとく通ってほしいのだが、 先頭文字に限っては、特殊文字をいくつか導入し、 それに抵触するトリップを使ってる連中には、半角カタカナに置換する ことで対処してもらう。 ・付加機能案(1) 任意Salt 例) #$ABcccccccc 1文字目が $ だった場合、2,3文字目の BC をSaltとみなして 4文字目以降のcccccccccをキーとして扱う。BCの扱いは旧鯖仕様にしてしまう。 (俺的には、鳥屋っぽい新々鯖キーを量産できるので大歓迎) 先頭が $ トリップを使ってた香具師は、半角カタカナ 、 でガマンしてもらう。 ・付加機能案(2) 玄人向け生キー 例) ##DEADBEEFCAFEABED2710 1文字目が # だった場合、続く16文字の16進数をキー さらに4文字の8進数もしくは2文字の英数字が存在したらSaltとして扱う。 全空間から余すことなく拾いたいトリップ野郎(俺もだよ漏れも)向けの機能。 先頭が # トリップを使ってた香具師は、半角カタカナ 」 でガマンしてもらおう。 実装はまた後日。たぶん簡単だろうが検証してるヒマがない。 トリップの歴史のようなもの(激しく添削キボンヌ) 基本。 「name#trip」と名前欄に入力。name はそのまま出力。'#' 以降を分解。 ●初代? 製塩方法が、 my $change_salt = substr($handle_pass, , 1) . "H"; となっていたために、$change_salt は 'ripH' に。 しかし、crypt で有効な塩は、2 文字分(正確には 12 ビット) なので、 3 文字目以降は意味を為していない。 出力は crypt 出力文字列の後ろから 8 文字分。 $handle_pass = substr(crypt($handle_pass, $change_salt), -8); 結果、 「name#trip」は、 name ◆pdoZ.tHU と出力された。 ●2代目? 割れを防ぐ意味?で出力を 10 文字に増殖。 $handle_pass = substr(crypt($handle_pass, $change_salt), -10); 結果、 「name#trip」は、 name ◆hEpdoZ.tHU と出力された。 ●3代目?(現状?) 製塩時にフィルターが追加された? my $salt = substr($key."H.", 1, 2); →トリップ文字列の末尾に 'H.' を追加してから、先頭から2文字目と3文字目を抽出。 $salt =~ s/\W/\./go; → 'a-zA-Z0-9_' 以外は '.' に変更。 ★旧仕様のトリップ文字列では出力が違うものが出てきた。 ★新々鯖(FreeBSD) では、'_' を内部で変換せずにエラーとして判断するために、crypt の返り値が undef (未定義値) となるために 、トリップが表示されない不具合が出た。 >>5 順序としては、製塩方法が変わってから、10桁化したんだったと思う。 2代目と3代目が逆ということになるかな。 初代は</b><b>がついてなくて、トリップ文字も太字のままだったね。 懐かしい。 >>5 >●初代? > 製塩方法が、 > my $change_salt = substr($handle_pass, , 1) . "H"; > となっていたために、$change_salt は 'ripH' に。 > しかし、crypt で有効な塩は、2 文字分(正確には 12 ビット) > なので、 3 文字目以降は意味を為していない。 my $change_salt = substr($handle_pass, , 1) . "H"; の所なんですけど、 substr の第二引数が省略されてるので、取り出し始めるインデックスが 0(最初)で、取り出す文字数が1文字ってことかと。 そうすると、$change_salt は 'tH' になると思います。 そのスクリプトの方があってればの話ですけど、、 >>7 #!/usr/local/bin/perl $a = "triptrip"; $b = substr($a, , 3) . "H"; printf "[$a] [$b] %s",substr(crypt($a, $b), -8); exit; # 結果は [triptrip] [ptripH] eOG.wRhM 実際に動かしてみると、2 番目の引数が undef になるので省略されたとして、 3 番目の引数が offset にされちゃうようです。@ Perl 5.6.1 の場合 >>8 おぉ、そうだったんですか。。 というか、substr の第二引数は省略できないですね。 確かめもせずに申し訳ない。。 何でそんなコードになってたんだろう、、 >>10 あ、いへいへとんでもないです(汗) ただこのあたりの実装方法が曖昧になっているようですね。 uma系鯖では tripkey のない場合の対処がややこしそうですね。 現に、 uma系鯖では tripkey のない場合、# が出てくるのも謎だし。。。@本来はマッチしないので出てこないはず? さてさて、bbs.cgi の現状のトリップ回路は公開されているのでしょうか? >uma系鯖では tripkey のない場合の対処がややこしそうですね。 >現に、 uma系鯖では tripkey のない場合、# が出てくるのも謎だし。。。@本来はマッチしないので出てこないはず? これって、名前欄に「名前#」って入れるって事ですかね? おつかれさまー ところで、こんなトリップも出せることに気づいたのですが、 今回考える新仕様では、これに対応する必要ないっすよネ? …いや、対応は造作もないのだが。 uma 系鯖での現状での不具合。 1. トリップキーがないと # が出て来ちゃう。 (凡例:この書き込みの名前欄参照) 要因:現在不明(^-^;;) 2. _ の扱いでトリップが消える。 塩に '_' が含まれていたりキーに '_' が含まれていたりいろいろ。 (凡例:#______ のように '_' が 6 つ以上連なってもトリップが消えるみたい。 要因:crypt()での振る舞いが違うため。 対策? 1. uma系鯖に限って、 ・crypt する前にキーが存在しないときは何らかのキーを与える。 ・crypt() の返り値が undef の時に何かキーを与えてみる。 ・もしくはトリップを作らなくするとか?→名前部分だけ返す。 2. [./0-9A-Za-z] にマッチしない文字を別の文字に変更する。 ・'.' が妥当? ・もしくは他の文字を与える? こんな所でしょうか。 これが解決できれば、鳥屋TMさんの提案されている塩指定も盛り込めるのではないかと。 >>13 そのとおりです。名前欄に '#' のみでもOKです。 >>14 わー(汗)@ラストに '1' 1は、全サーバそういう仕様だと思いますー。 #(.+) の時にトリップ作る仕様になってますから。 >>16 大いなる勘違いをしていました(汗) って事でこの件は無かったことに(苦笑) いったん自宅に帰ろう。 >>15 (1)に関しては、どちらかというとトリップ仕様の範囲外。 想像ではPerlのバージョン依存。 トリップキー抽出部を見せてもらわないことには何とも言えず。 (2)を解決し、ついでに「新鯖トリップ問題」を解決し、 ついでについでに玄人仕様を盛り込んだのが、>>2-3 案です。 新鯖トリップ問題に関しては要望があれば解説します。 (ずーっと、流出スクリプトのトリップ生成部が2chで使われてるものと 同じだと思いこんでたので、いろいろ誤解してたのだが、すべて解決!) ちなみに、今動いてるのは、>>5 の初代と二代目を足したものです。 さてと、それではお塩に関しては、 $salt =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/; $salt =~ tr/[\.\/0-9A-Za-z]/\./c; でよいのかな? >>18 判りやすく解説キボンヌですm(_ _)m >>21 それで旧鯖仕様互換にできるのだけど さて、新鯖トリップを活かしたい人をどうしよう というために、Salt任意指定があればいいなと思うワケです。 >>24 とりあえず新鯖専用トリップの人を冷遇するのは反対。 なのでその案に賛成かな。 新鯖トリップ問題 【現象】 2002秋以降に新設された鯖で、一部のトリップが 従来と互換のない出力になり、鳥屋が困り果てて右往左往した。 (後半は余計だ) sakuraに設置されていた鯖も、新鯖と同様の振る舞いをしていた (ただしトリップは8桁のまま) 具体的には、Saltに一部の記号・漢字・半角カナが含まれてる トリップが該当。 【原因】 crypt(3)に範囲外のSaltを与えていた bbs.cgi スクリプトと、 範囲外Saltに対して実装依存の振る舞いをする各ライブラリの crypt(3) との食い合わせ。 Saltは、1文字あたりで、 . / 0-9 A-Z a-z を、0-63 の数字に変換 するのだが、この変換ロジックの手抜きにより、実装依存の挙動が生まれた。 (次につづく) ・旧鯖(たぶんlibc5ベースのSlackware) if (!salt in [ . - z]) salt は . (0); else if (salt >= 'a') salt = salt - 'a' + 38; else if (salt >= 'A') salt = salt - 'A' + 12; else if (salt >= '0') salt = salt - '0' + 2; else salt = salt - '.'; ・新鯖(glibc2ベース) (salt は signed char 扱い) if (salt >= 'a') salt = salt - 'a' + 38; if (salt >= 'A') salt = salt - 'A' + 12; if (salt >= '0') salt = salt - '0' + 2; else salt = salt - '.'; salt &= 63; 新々鯖(FreeBSD) Saltが範囲外の文字だったらエラー。 (以上は想像上のものです。ソース読まずにカキコ) 鳥屋TMさんのを踏まえて新型トリップ案。 書式: # option keys # = トリップキー開始文字 option = 機能 keys = キー option と keys 0 = 8 桁トリップ ※ 旧鯖式 keys = 8バイト長の任意文字列 出力 = ◆8バイト長の文字列 凡例:name#0ぶるじょ → ◆EncckFOU 1 = 10 桁トリップ ※ 旧鯖式 keys = 8バイト長の任意文字列 出力 = ◆10バイト長の文字列 凡例:name#1ぶるじょ → ◆yBEncckFOU 2 = 8 桁トリップ ※ 新鯖式 keys = 8バイト長の任意文字列 出力 = ◆8バイト長の文字列 凡例:name#0ぶるじょ → ◆d1dMH5Gk 3 = 10 桁トリップ ※ 新鯖式 keys = 8バイト長の任意文字列 出力 = ◆10バイト長の文字列 凡例:name#1ぶるじょ → ◆ySd1dMH5Gk 4 = 8 桁トリップ keys = 2バイト長の塩と8バイト長の任意文字列 出力 = ◆8バイト長の文字列 凡例:name#4AAぶるじょ → ◆ 5/5A2qi2 (◆のあとに半角 space が入る→従来トリップのクラック防止のため) 5 = 10 桁トリップ keys = 2バイト長の塩と8バイト長の任意文字列 出力 = ◆10バイト長 凡例:name#5AAぶるじょ → ◆ jO5/5A2qi2 (◆のあとに半角 space が入る→従来トリップのクラック防止のため) 6 = 8 桁トリップ keys = 3バイト長の16進数文字列と16バイト長の16進数文字列 出力 = ◆ 8バイト長の文字列 (◆のあとに半角 space が入る→従来トリップのクラック防止のため) 凡例:name#63FF82D482E982B682E5 → ◆ amQOjP5E 7 = 10 桁トリップ keys = 3バイト長の16進数文字列と16バイト長の16進数文字列 出力 = ◆ 10バイト長の文字列 (◆のあとに半角 space が入る→従来トリップのクラック防止のため) 凡例:name#73FF82D482E982B682E5 → ◆ JvamQOjP5E 無し = 新式 12 桁トリップ MD5 型(末尾の 1 文字を落してから末尾から 12 文字分を抽出) keys = 8バイト長の任意文字列と任意長の文字列 出力 = ◆12バイト長の文字列 凡例:name#salt-strじゅげむじゅげむごこうのすりきれ → ◆9ljrTZJ6f.L1 こんな感じ。 >>28 ×無し = 新式 12 桁トリップ MD5 型(末尾の 1 文字を落してから末尾から 12 文字分を抽出) ○無し = 新式 12 桁トリップ DES 型(末尾の 1 文字を落してから末尾から 12 文字分を抽出)ただし glibc2 のみ。 >>28 2,3の新鯖式は4,5の塩が指定できるモードや 6,7の16進数モードがあれば 新鯖専用トリップも表示できるので特に必要のない気もしますね。 それと、0,2,4,6の8桁トリップはいまさら必要のない気もします。 (あってもクラックされる確立が高くなるだけだし…) >(◆のあとに半角 space が入る→従来トリップのクラック防止のため) とはどういう意味があるのでしょう? >>31 8 桁は昔を懐かしむ程度の物なので必要ないかもしれませんです(苦笑) > >(◆のあとに半角 space が入る→従来トリップのクラック防止のため) > とはどういう意味があるのでしょう? クラック目的で既存のトリップキーを解読された場合のことを想定してみました。 管理側の★さんが使っているトリップや、トリップを使っておられる方を騙って荒らしをするおばかさん対策とでもいいましょうか。 クラックされた場合でも0-3でトリップを出すことは可能でしょうしあまり意味がないような…。 8桁を懐かしがりたい人はsports2に逝くとか、したらばとか、 >>33 従来のクラックでは 10 桁トリップの場合だと n/64 の確率*でしたが、 新式の「塩」と「キー」指定となると、さすがに実証はしておりませんが、 64/64 の確率に限りなく近づくのでは無かろうかと危惧したためです。 * crypt の吐き出す 3 文字目の種類。 従来のトリップでは 64 種類全て出すことは不可能「かも」しれないけれども、 新式の「塩」と「キー」指定となると 64 種類すべて出せる「かも」しれない。 考えすぎかもしれないけれども(苦笑) 統一するなら旧鯖式がいい。 桁数は10桁か11桁。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる