• Showing Page History #34522
  • Showing Page History #34521

2ch トリップ仕様(抄)

見よう見まねでトリップを実装して2ch仕様と非互換のものを増やしやがるバカを撲滅す…

実際には2chトリップ仕様をぐぐって見つけるのが困難なので、ここにまとめる!

仕様概要

2ch掲示板システム(以降2ch)の投稿処理スクリプト(以下bbs.cgi)に実装されているトリップの仕様において、重要なものは以下の通り。

  • POSIX準拠のCRYPT(3)に基づいている! それは Perl などから容易に利用できる!
  • ハッシュアルゴリズムはDESベースのものを用いる。すなわちCRYPT(3)のSalt引数にて$により指定できる拡張暗号化アルゴリズム(MD5など)は利用しない。
  • 2ch は Shift_JIS ベースである。よって記事投稿(カキコ)フォームにて入力された文字列は基本的に Shift_JIS にて bbs.cgi に渡される。すなわちトリップキーも Shift_JIS エンコードであることを前提とする。
  • bbs.cgi はマルチバイト非対応Perl5にて記述されている。よって渡されたキーはマルチバイト処理を施さず、バイト(オクテット)単位で取り扱う。
  • Salt は実装上の歴史的理由により、トリップキーの2文字目および3文字目から変換表により一意に決定する。

以下、2ch実装の実情ではあるが仕様不備な項目を挙げる。

  • bbs.cgi の文字エスケープ(HTMLのメタ文字を置換)は、トリップキーに対しても行われる。また、bbs.cgi の文字エスケープ規則は基本的にアドホックである。
  • bbs.cgi の語句置換処理(いわゆるNGワード)も、トリップキーに対して行われる。置換の対象語句はマルチバイトであるにもかかわらず、非マルチバイトにて置換が行われる。よって、一見置換対象でない文字列に対し置換が行われることがある。
  • bbs.cgi 稼働サーバOS(FreeBSD)のCRYPT(3)には仕様不備がある。キーバイト列に含まれる 0x80 をキー文字列の終端(0x00)と見なし、以降のバイト列は 0x00 であるかのごとく処理してしまう。一部のShift_JIS全角文字がこの仕様に抵触する。

用語集

略語など概要
CRYPT(3)cryptPOSIX
DESDES元来は56ビットキーによる64ビットデータのブロック暗号。CRYPT(3)およびトリップでは、0をキーで25回繰り返して暗号化した結果をハッシュとして用いる。
トリップtrip, hashトリップキーから一意に変換された10文字の文字列を指す。それぞれの文字は64通りの集合(数字, アルファベット大文字, アルファベット小文字, ピリオド, スラッシュ)にて構成される。
あるいは2chに実装されたID表示システムの通称。ひろゆき命名。
トリップキーkeyえーと、めんどくせー

掲示板システム実装者のために

Perl(マルチバイト非対応)

Perl(use Encode)

PHP4

歴史

Salt の扱い