Solist Work Blog

ソフトウェアエンジニア / IT navigator

Passwordについて考える

パスワードをどうやって取り扱うのかは結構頭を悩ませる問題です。 この記事では私のパスワードの管理方法について書いていくことにします。 私がパスワードについて考えるときにヒントにしたのはエドワード・スノーデンが何を使っているかです。

エドワード・スノーデンNSAの職員だったわけですから、彼が使っているソフトウェアならば少なくとも数年前のNSAのレベルの相手でもパスワードが守れるはずです。1 このレベルの相手に対してパスワードを守れるならばとりあえず安全であるといってもよいのではないでしょうか。

エドワード・スノーデンがジャーナリストに情報提供する際に条件としたのはGnuPGで暗号化したメールでやり取りすることです。つまりGnuPGで暗号化したメールはNSAにとってもやっかいなものであるということがわかります。 というわけでパスワードなどのセンシティブな情報はエドワード・スノーデンがお勧めするGnuPGで暗号化するようにしましょう。2

私はほとんど全てのパスワードをGnuPGをバックエンドとして使っているespy(Emacs Simple Password Yielder)で管理しています。 espyの作者によるとセキュリティを高めるためにソースコードを極限までシンプルにしてオープンソースで公開したので今後は変更しないそうです。むしろ彼はコードを全部読んだらパッケージとして使わないで手動で自分のEmacsに組み込んでほしいと言ってのけるクールなエンジニアです。つまり将来の彼のGitHubもMELPAも信用しないでくれと言っているのです。 実際に途中経路が改ざんされることもよくあることなので、彼が言っていることもあながち大げさでもなく、セキュリティはこれくらいの神経質さでちょうどよいのかもしれません。また、各サイトのrecovery-codeも平文で持たずにGnuPGで暗号化しておきましょう。

これらを二段階認証のDropboxにいれているのでDropboxの社員に私のパスワードファイルを持っていかれてもまだGnuPGに守られているということになります。 USBメモリだけにrecovery-codeやpasswordをGnuPGで暗号化したファイルを置いておくとUSBメモリをなくした場合悲惨なことになります。 それにUSBメモリをなくす確率とDropboxの社員にファイルを持っていかれる確率をくらべるとおそらく前者のほうが高いのではないでしょうか。また、USBメモリを唯一のデータ置き場にすることはデータが消える可能性があるので心もとないです。3 セキュリティを高めるためにはGnuPGで暗号化したファイルはローカルで持つのがよいのでしょうが、定期的にクリーンインストールしてセキュリティを高めたいという要件もあるので私はDropboxにGnuPGで暗号化したファイルを置くことを利便性とセキュリティの落とし所としています。4

GnuPGの使い方

GnuPGをインストールしておきます。ArchLinuxでは以下でインストールします。

sudo pacman -S gnupg

まずはrecovery-codeをGnuPGで暗号化してみましょう。 Google、GitHub、Dropboxは二段階認証で使わないとセキュリティから見て好ましくないので、もし二段階認証を使っていないならすぐに設定してください。ほとんどの人は二段階認証にスマートフォンを使用すると思いますが、スマートフォンが壊れたり無くなったりした場合に備えてrecovery-codeが発行されます。recovery-codeが外部に漏れるとアカウントを乗っ取られてしまいますので、recovery-codeのファイルの暗号化は必須です。5

gpg -c google-recovery-code

コマンドで暗号化する時はこれだけで暗号化したファイルができます。 EmacsはデフォルトでGnuPGが扱えるようになっているので拡張子を.gpgにしてgoogle-recovery-code.gpgで保存するとパスワードの入力を促されます。

GnuPGで暗号化

Tabを二回押して[OK]をクリックします。

GnuPGのパスワードを設定する

パスワードを二回入力します。パスワードの入力が終わればGnuPGで暗号化されたファイルが生成されます。

GnuPGで暗号化が完了

これ以降はこのgoogle-recovery-code.gpgをパスワード無しで開くことはできません。 総当たり攻撃プログラムを作成して解析される場合にそなえて、パスワードは最低でも12文字以上にしましょう。 英数字小文字大文字の12桁のパスワードを解析するには数十年かかるので、そのgpgファイルにフェルマーの最終定理の証明が書かれているのでもなければ誰も数十年かけてgpgファイルを解析しようとは思わないでしょう。6

espyの使い方

次にespyの使い方を説明します。 MELPAからインストールしましょう。

M-x package-install espy

パスワードファイルを~/Dropbox/passwd/password.org.gpgに保存します。 拡張子はorg-modeで管理するので.org.gpgにする必要があります。

init.el

(setq espy-password-file "~/Dropbox/passwd/password.org.gpg")

password.org.gpgファイルの書式は以下のように保存しておきます。

~/Dropbox/passwd/password.org.gpg

* Bank of America
user: user
pass: password
* Bank of Scotland
user: user
pass: password
* amex
user: user
** amex password
pass: password
** amex password2
pass: password2

例えばAmerican Expressのように第二パスワードが必要なものはこのように保存しておきます。

さっそく使ってみましょう。

M-x espy-get-pass

espy-get-passを実行

パスワードを入力します。

espyでパスワードを選択する

欲しいパスワードを選択します。 これでペーストするだけでパスワードが使えますので ブラウザのパスワード入力フォームにペーストできます。

M-x espy-get-user

ユーザー名が必要な時はこちらのコマンドをたたきます。espyのコマンドはこの2つだけです。


  1. 今のところNSAが私のパスワードを欲しがっているとは思えませんが…。
  2. エドワード・スノーデンがお勧めするTailsというLinuxディストリビューションはプライバシー保護には最適ですが、ログが残らないのでソフトウェアエンジニアが開発環境にするのには向いていません。GnuPGだけでも十分セキュアだと思います。
  3. ブロックチェーンのパスワードなどをUSBメモリだけに入れていてデータが消えた場合、誰かにブロックチェーンで管理している資産を取られる心配はないかもしれませんが、誰にもその資産が使えない状態になってしまいます。これが本当の塩漬けかもしれません。
  4. 定期的にクリーンインストールすると万が一ウィルスが侵入していても排除することができます。全体をバックアップするような方法で対処するとウィルスも一緒にバックアップすることになるのでクリーンインストールのほうがはるかに安全です。オープンソースのソフトウェアのメインラインにウィルスを混入させるのは多数のソフトウェアエンジニアの目があるために困難ですから、これ以上にセキュアな環境はないでしょう。クリーンインストールは最高のセキュリティ対策なのです。定期的にクリーンインストールする方法はこちらの記事を参考にしてください。
  5. Dropboxのrecovery-codeだけは何のパスワードかわからない状態にして財布に入れておくか庭に埋めておくとよいでしょう。こうしておくと鍵を保管している金庫の中に鍵があって金庫が開けられない問題が解決するからです。私なら自分か家族にしかわからない並べ替え方を添えてrecovery-codeを分割して保存するでしょう。あえて方法や場所をぼかして書いているのはここを見た人に狙われないようにするためです。
  6. 総当たり攻撃するパスワード解析プログラムは並列化可能なので数十年かからないではないかといえばそうでしょう。しかし、クラウドサーバーを大量に借りて並列で解析した場合一ヶ月くらいで解析可能かもしれませんが、その費用はおそらく数千万円から数億円のオーダーになるのではないでしょうか。あなたのパスワードを狙っている相手がお金に糸目をつけないならその心配をしたほうがよいでしょう。相手に応じてパスワードの桁数を増やすことや記号をパスワードに含めることなどを検討してください。ムーアの法則が終わりに近づいているのでパスワードを20桁に増やさなくてもよさそうではあります。

タグ一覧

お仕事の依頼はこちらからどうぞ

お仕事の依頼はこちらからどうぞ