最終更新日:2002年12月01日
taniguchiさんから、このプログラムのJava版を作りました、というお知らせがありました。Windows以外のプラットフォームで、このプログラムを使いたい方はどうぞ。(Windowsでも、こちらの方がいいかも
^^;)
ソースコードを公開した甲斐がありました。
コンピュータセキュリティの本を読むと、パスワードの管理の話がよく出てきます。その中には、パスワードは、他人からわかりにくいものを選んで、控えを残さずに憶えておき、しかも頻繁に変更せよ、と現実的とは思えないことが書いてあるものもあります。本来なら、ワンタイムパスワードを使えばよいと思うのですが、そうではない場合に何とかする方法を考えてみました。
このプログラムは、ユーザ名、パスフレーズ、生成パラメータから、パスワードを自動生成するものです。こうすれば、一つのパスフレーズを憶えておき、生成パラメータを変更するだけで、異なるパスワードを生成できます。生成したパスワードを憶えておいてもかまいませんし、ユーザ名、パスフレーズ、生成パラメータを憶えておけば、同じパスワードを何度でも生成できます。Ver2.0からは、生成するパスワードの文字種別、文字列長を、設定により変更することが可能です。
このソフトのドキュメントはこちら。
このソフトの使い方の例をまとめてみました。

基本的には、起動して表示される画面に、ユーザ名、パスフレーズ、生成パラメータを入力します。生成パラメータとして、自動を選択すると生成した時の日時が用いられます。また、この値を明示的に指定することもできます。ユーザ名、あるいはパスフレーズを入力しないこともできます。
パスワードに用いる文字種別、文字列長は、設定ボタンを押して開く画面で入力できます。この画面でOKを押すと、設定内容が実行プログラムと同じディレクトリにautoPwd.iniというファイル名で保存されます。この設定内容は、次回起動時から自動的に読み込まれます。設定をデフォルトに戻したい場合は、このファイルを削除してください。
パスワード生成のための値を入力して、必要に応じて設定ボタンを押してパスワードの文字種別などを設定後、生成ボタンを押せば、設定された文字種別からなり、設定された文字数のパスワードが生成されます。
想定している使い方は、まず適当なユーザ名、パスフレーズ、生成パラメータでパスワードを生成します。次に定期的にパスワードを変更する時になれば、ユーザ名とパスフレーズは変えずに、生成パラメータだけを変更してパスワードを生成し直します。こうすれば、ユーザ名とパスフレーズ(と、生成したパスワード文字列のどの部分を使うか)を憶えておけば、他人には(自分でも ^^)推測しにくいパスワードができるのではないでしょうか。
このプログラムは、ユーザ名、パスフレーズ、生成パラメータなどをハッシュ関数に入力し、その出力を文字列に変換しています。処理としては、それだけです。ハッシュ値を文字列にするところが一番難しいかもしれません ^^;
Ver2.0からは、処理内容が変わりました。ハッシュ関数の出力を乱数のSeedとして用い、得られた乱数列に文字を対応づけています。相変わらずパスワードの生成自体は簡単で、文字種別の設定やそのファイルとの入出力が難しいのですが。
Ver2.3からは、設定を複数種類用意しておき、その中から一つ選んでパスワードを生成できるようになりました。また、設定ごとに追加生成パラメータを指定可能になりました。ただし、この追加生成パラメータは、ファイルに保存されます。ご注意下さい。ユーザ名、パスフレーズ、生成パラメータは、これまで通り、ファイルには保存されません。
Ver2.4からは、パスワードに最低限1文字は含まれる文字種を指定できるようにしました。
このプログラムはフリーソフトウェアです。著作権は作者(山本 秀樹)が保持します.このプログラムの使用による,いかなる事態も,作者は責任を負いません。
念のために、アーカイブ内にDelphi5用のソースコードを同梱しています。必要に応じて、処理内容の確認、改造を行ってください。
このプログラムは、以下のURLで公開されている、DCPcryptパッケージ内のハッシュ関数RipeMD-160を使用しています。
http://www.scramdisk.clara.net/d_crypto.html
DCPcrypt
A Delphi cryptographic component package
Written by David Barton (email: davebarton@bigfoot.com)
乱数を生成するために、別のページで取り上げたMersenne Twisterを使用しています。
Aboutダイアログに、fumikaさん作のURL表示ラベルコンポーネントを使用しました。