そろそろパスワードをちゃんとするか
パスワードをそろそろちゃんとしたい。一応ランダムでそれなりに長い文字列を使用しているのですが、憶えられないという理由で多くのサービスで同じパスワードを使っていたりする...申し訳ない。これだとどこかのサービスでパスワードが漏洩した場合に影響範囲が大なので、いい加減何とかしたいのです。
ということで、以前slashdot.jpで見たやり方を参考にしてパスワードを作るコードを書いてみました。
戦略
- ユーザーにサービス名とパスフレーズを入力してもらう。
- サービス名は"hatena.ne.jp"とか認証単位ごとに決まる文字列を使う。
- パスフレーズはランダムでそれなりに長い文字列を採用し、これだけは暗記する。
- スクリプト埋め込みの定数とサービス名、パスフレーズを連結した文字列を作る。
- 文字列をSHA1でハッシュにする。
- ハッシュをBase64でエンコードしたものをパスワードに使う。
これで、パスフレーズさえ憶えておけばサービスごとに違うランダムなパスワードを生成できます。また、パスワードが漏洩しても次の条件が満たされない限り、虎の子のパスフレーズはばれない。
実装
require 'digest/sha1' PREFIX = "hoge" # 適当に変更すること。 puts [Digest::SHA1.digest( PREFIX + "." + ARGV[0] + "." + ARGV[1] )].pack("m")