spwdというパスワード管理ツールを作った

at 2017-09-28 12:07

はじめに

みなさんパスワード管理どうしてますか?
Webサービスのアカウントならブラウザや LastPass のようなサービスが利用できるけど、まだまだパスワードでログインしなければいけないサーバがあったり psqlmysql コマンドでパスワード入力したりしなければならなかったりしませんか?

全部が秘密鍵で済むような環境になればいいけど、少なくとも自分を取り巻く環境はそうなっていません。 意味のある文字列ならまだしも、ランダムな英数字とか覚えておくにも限界があるし、いざ入力するときも手間がかかる。

まだまだ僕たちはパスワード管理から自由になれないようです。ならせめてセキュアにパスワード管理できて、入力補助的なことができるととうれしい。

というわけで

pinzolo/spwd: Secret file based password management tool というものを作ってみた。

こんな感じで利用します。

何やってるのか?

spwd new で対話形式でパスワードをデータファイルに保存します。このとき、特定のファイル(以下キーファイル)のハッシュをキーにしてで暗号化しています。
キーファイルはデフォルトでは ~/.ssh/id_rsa を使用しますが、これは このツールを使うような人はたいてい持っていて かつ 本人しか知り得ないはずのもの だから都合がよかったからで、 SSHの秘密鍵を利用されるのは気持ち悪いという人は ~/.config/spwd/config.yml に設定を書けば別のファイルをキーにすることができます。ついでにデータファイルの場所も変更できます。(デフォルトは ~/.local/share/spwd/data.dat
ファイルのハッシュを利用しているのでキーファイルの中身は別にRSA形式じゃなくてもOKです。ぶっちゃけなんでもOKです。

そのほかつらつらと

  • キーファイルさえ流出しなければ、データファイルは Dropbox とかで同期しても大丈夫だよね。
  • キーファイルは自分しか知り得ない長めの文字列なんかを各環境でファイルに保存すればネットワーク介さなくてもいいから安全だよね。
  • キーファイル配置先のパーミッションはちゃんとやろうね。SSH と同じだよ。
  • 万が一キーファイルが漏れたりしたら、新しいキーファイルを用意して spwd migrate /path/to/new/key/file とすればカレントディレクトリに新しいデータファイルを生成するよ。(上書きするわけではない)
  • spwd new の時に同じ Name を指定すれば、上書きするかどうかを聞いてくるので Description の更新もこっちでやってね。
  • はじめはパスワードだけ暗号化していたけどやめた。Name や Description をエディタで更新できるメリットよりも、それらがヒントになってしまうデメリットのほうが高い気がする。

そんなわけで、興味があれば慎重に使ってみてください。