パスワードリンクでも作ってみる企画。
ホームページビルダーV9お試し版をやっていたとき、JavaScriptによるパスワードリンクなるものがあったので早速クラックしようと頑張ってみたが、パスワードをパスワードで暗号化していて結局敗北に終わった。結構前から予定はしていたものの、この際自前のパスワードリンクでも作ってしまおうということで、今度はクラックではなく生成にチャレンジ。
解読に失敗した場合、失敗を自動検知するプログラムでないとパスワードリンクとしては不適合。ビルダー同様パスワード自体をパスワードで暗号化する手法を取るが、複雑な方程式により解読される危険性を伴う。ていうか解読されるかどうかは正直分からないのだが。 問題は暗号化アルゴリズムだ。
一番扱いやすいのは数字。全ての文字を数字に変換してやる必要がある。 一度、数字化したパスワード,数字化したURLの結果を暗号化結果に使おうとしたが、文字通り巨大な巨大数演算のスクリプトを移植するのも面倒。JavaScriptで精度を落とさずに計算できる手法で実装してみる。
http://www.geocities.jp/hiro00312/index.html
を数値化してみる。
var URL = "http://www.geocities.jp/hiro00312/index.html"; var c =""; for(i=0;i<URL.length-1;i++){ c+=URL.charCodeAt(i)+","; } c+=URL.charCodeAt(URL.length-1); var d = ""; for(i=0;i<c.length;i++){ d+=String.fromCharCode(c.split(",")[i]); } document.write(c,"<br>"); document.write(d);
出力結果
104,116,116,112,58,47,47,119,119,119,46,103,101,111,99,105,116,105,101,115,46,106,112, 47,104,105,114,111,48,48,51,49,50,47,105,110,100,101,120,46,104,116,109,108 http://www.geocities.jp/hiro00312/index.html
数字にすることはできた。やたら数が多い。だけど気にしない(マテ
続いて暗号化に使うキーここでは適当にkanikaniを使ってみる。 同様に数値化し107,97,110,105,107,97,110,105を得ることができた。 これを順順に掛ける。
本来なら数値化したURLを1つの数列とし、それにキーをそのままかけたいところだが巨大数演算は極力用いたくない。 107*104,97*116....を続けてみる。 どちらかの長さが足りない場合は最初に戻るものとする。
10088,12760,12180,11984,5626,5170,4935,12733,11543,13090,4830,11021, 9797,12210,10395,11235,11252,11550,10605,12305,4462,11660,11760,5029, 10088,11550,11970,11877,4656,5280,5355,5243,4850,5170,11025,11770,9700, 11110,12600,4922,10088,12760,11445,11556
このようになった。 これを解読キーなしで複合化するにはキーの長さ・値を全て考慮しなくてはいけない。ISOLatin-1コードは1〜65536まである。 全てのコードでエラーが発生しないため、根こそぎ検索は不可能だ。 さて、次はキーをキーで暗号化する。
キーのコードは107,97,110,105,107,97,110,105 このコードの逆同士を掛ける。 107*105 97*110 ・ ・ ・
といった感じ。実際やってみると。
11235,10670,10670,11235,11235,10670,10670,11235
となる。この時点でキーの長さはバレてしまうのが欠点。 また、コードが素数だった場合確率1/2に絞られる。 一応これで暗号化は完了した。 が、キーの長さが8字以下だとhttp://の時点でキーを逆算されてしまう。 http://や.htmlなどが含まれることが分かっている場合、少なくとも8字を失う。 このままでは解読される可能性が高まる。 それに、現時点ではキーを繰り返し使うため10文字のキーを使用した場合URLの80%がバレる。 これはマズい。そこで暗号化を2段式にする。
暗号化URL ↑ 暗号化セッションキー ↑ 暗号化解読キー ↑ 解読キー
URLと同じ長さの乱数によって構成されるセッションキーで、逆算をほぼ不可能にする。それでは早速組んでみる。
上記の原理を基にセキュリティーをアップさせた。 具体的には、解読キーを解読キーで暗号化させる作業に巨大数演算を少しだけ介入(仕方なく)させて解読を困難にした。 例えば
暗号化文:解けますか? 解読キー:暗号生成デモ
で暗号化すると↓
361708853,594021225,769978350,567299795,205275252,588843976 220259265,1439933575,1557075600,572341645,207782456,236787208 109049554404469483221505860376698353095299027567428989982668
となる。
解読キーは109049554404469483221505860376698353095299027567428989982668
(60桁)に暗号化される。
世の暗号より遥かにぬるい暗号なので、解読してやるぜ!って人は頑張って解読してください。試しにこの暗号化プログラムを使ったパスワードリンクを作っておきます。解読楽しみに待ってます。