「どこも全部同じにしている」なんて言うのはやめた方が良いですね。
私は、
・全ての ID/Password のペアは異なる
・Password はソフトでランダム生成
・ID/Passwordを必要とする場所が200以上
という事になっているので、とてもじゃないが覚えられない状態だ(not 歳のせい)。
もちろん我々は、そういう場合の脳みその機能拡張のためにコンピュータを使っている訳なので、長らくID Managerと言うソフトを便利に使わせてもらってきた(作者さんありがとう!)。
しかし、Windows で LAN で使っている分には良かったが、クライアントが Mac / Linux と増えたり、それを必要とする場所が LAN 外だったりする事が多くなって、替わりの管理方法を探していた。当然ながら最初に考えたのは「ブラウザのみで使用できるオンラインID管理サービスを使う事」だが、使い勝手や信用を考えると、実際にはどこも使う気が起こらない...(どこか良いところがあったら教えて欲しい!)。こうなると、やっぱり自分で作るしか無い訳だ。
自分用のID管理なんて、簡単に言えば
「ID/Password のペアをHTMLやテキストファイルに書いて、人に読まれないようにしておく」
という事が基本なので、「書く」だけなら特に何も作らなくても良いが、「人に読まれないようにしておく」のが面倒で、ここをどうするかという事になる。
欲しいシステムの基本アーキテクチャは「サーバー側にデータ、クライアント側ブラウザ」なので、
・サーバー側に置いたデータが読まれない、もし読まれてもパスワードの内容はわからない
・通信経路が読まれない、もし読まれてもパスワードの内容はわからない
という要求を考慮した結果、「サーバーも通信経路も(一応保護はするけど)インターネット側にあるものは信用ならないので、クライアント側で暗号化/復号化を行う」と言う方針で行くことに決めた。そうすると必然的にクライアント側は JavaScript を使う必要があって、そうなる管理UIも全部それでやった方が簡単だし、サーバー側はユーザ毎の xml ファイルの読み書き機能だけで済むので簡単になる。
よしよし、という事でやっと本題。Google で「JavaScript 暗号化」で検索すると色々出てくるが、私が気に入ったのはここ。Triple DES のスクリプト実装(JavaScript/Perl/PHP)がある。コードはコンパクトで高速だ。早速自分のライブラリに取り込んで、若干修正して試してみたところ、
key: | |
message: | |
Triple DES で暗号化/復号化を1万回試行して、時間と結果を表示します。 | |
encrypted message (hex): | 83af8c3f5507e100b182f90f5f5d834b085ca8439b35eee4 |
encryption time: | 0.3735 ms |
decrypt_msg: | This is a test message. |
decryption time: | 0.3739 ms |
(注:上は結果をただキャプチャしただけなので、ボタン押しても何も起こりません)
これで基本技術は見つかったので、早速作り始める事にしよう!
パッケージの目標は、サーバー側に php file / javascript file / html file の3ファイルを置くだけでできる、自分用の ID 管理システムだ。
しかし、こういう問題を解決しようと、シングルサインオンとかオンラインID管理とかサービスはあるんだけど、なかなかはやらないね。シングルサインオンは、それを謳っているサービスの ID/Password を自分が沢山持っていると言う現実がもはや機能不全を意味しているし、後者は...やっぱり信用できない...。
ID/Password をいっぱい持たなくても良い日は、いつかは来るんだろうか....。