イバコの生存記録

いまは競プロ(AtCoder)記事がメインです。

39. 安全なパスワード管理アルゴリズムを考えている

プライベートで少し作りたいものが出てきて、その中でパスワードを管理する必要があります。これは、以下の要件をセキュアに満たす必要があります。

  • ローカルにパスワード集合を保存する
  • パスワード集合は同一のマスターパスワードで平文に復号可能
  • 利用者は毎回マスターパスワードを入力する必要はない
  • 実装は全公開する

上3つは何とでもなるのですが、最後の「実装を全公開する」という条件が結構キツいです。ただ、よく考えるとこれ ssh-agent のことなんですよね。

…と思って調べてみると、同じようなことを考えている人がいました。

eagletmt.hateblo.jp

 

実装に関してはこれが参考になりそうです。ただ、どのように暗号化しているか、という点は触れられていないです。

この点に関しては、以下のようにすれば良いのではないかと考えています。

 

安全性を高めるため、同一のパスワード集合でも毎回異なる結果を返し、復号にはマスターパスワードとワンタイムパスワードの両方を必要とします。

本アプリのメモリ内でパスワード集合を保持できるので、利用者は毎回マスターパスワードを入力する必要はありません。また、こちらで保持するものも暗号化しておいた方が良いでしょう。

スターパスワードが流出する可能性としては、今のところ以下が穴として考えられます。

 

これを回避するには、agent 起動時にもマスターパスワードを要求し、初回通信のマスターパスワード暗号化で「マスターパスワード+salt」をキーとすれば良さそうです。ただ、もう少し利便性を高める方法がありそうな気もするので、考えてみています…。