以下、平文:P,暗号文:C,暗号化鍵:e,復合鍵:dとする
単一換字式暗号
シーザー暗号
とおいたとき、+3を行うことで暗号化する。つまり
ROT13はこれと全く同じもので、鍵が13になったものである。
これを発展させた鍵つきシーザー暗号は、

であり、
上記の物や平文を含め、26通りある。
アフィン暗号(Affine cipher)
シーザー暗号をより一般化したもので、
とおいたとき、これらの文字を一次変換して26を法とする世界で変換する。
ここで、

を26より小さい、26と互いに素の数だとすると、必ず、
を満たす整数

が存在するから、これを用いると、
暗号鍵

(

は25以下の数で、26と互いに素)に対して、復合鍵

は、
を満たす。これらを用いて、
なぜならば、

となるからである。

の12通りより、
平文を含め、暗号化のパターンは

通り
ヴィジュネル暗号
鍵を行列(matrix)にしたものである。
n×1行列

を用いることで、n文字の暗号を一度に変換できる。
つまり、
が暗号カギであり、複合鍵は

である。今、
とおくと
ヒル暗号(Hill cipher)
鍵を行列(matrix)にしたものである。
n×n行列

を用いることで、n文字の暗号を一度に変換できる。
つまり、
が暗号鍵で、複合鍵は
である。∴鍵となりうる条件は
且つdim|E|が26と互いに素である必要がある。
これらより、今、
とおくと、
トリップ
総当たり
perlにおける変換関数crypt(PASSWORD,SALT)を用いたものである。
2chにおいては、#abcdefghと入力した場合、
パスワードとして"abcdefgh"を、
ソルトとして"bc"を採用する。
ソルトはサイト側が自由に変えられるランダムな変数に変換されるため、
これが分からない限りはほぼ確実に解読はできないが、
2chにおいてはこれもパスワードの一環と言うことになる。
この2つの値を用いて変換した結果がトリップとなる。
以下はトリップ生成のプログラムである。
$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";
解読
単一換字式暗号
一般的に頻度分析を用いる。以下が英文における頻度分析の結果である。
なお、ヴィジュネル暗号などでも、THEなどの特定の単語に着目して
公倍数から鍵周期を特定すれば、間隔毎に頻度分析を用いることで解読できる。
エニグマ等のように十分に鍵周期の長い暗号文を除いては、全て解読可能と言うことになる。
アラビア語ではこのようになる。
スペイン語ではこのようになる。
最終更新:2012年01月07日 20:38