パスワード管理はすべての人にとって身近な問題
仕事がらということもあるかもしれませんが、実に多くのサービスにアカウント(名義)をつくってます。日頃利用するSNSなどのウェブサービスはもちろん、メール・アプリ・制作ツール・プロバイダ・銀行口座・クレジットカード・無線LANルータ・業務で管理しているサイトやサーバなどなど…考えるだにうんざりしますが、それぞれにログインが必要で、パスワードが必要で、そのどれも不正アクセスを受けると困るものばかりです。
程度の差こそあれ、どんな人にとってもパスワードの管理は深刻な問題でしょう。身の回りを見ていても、FacebookやLINEのアカウント乗っ取りは日常茶飯事ですし、いつだれがアカウントをジャックされて偽レイバンの広告を吐かされてもおかしくない、というのが今のインターネットです。どうやってアカウントの安全を守ろうか、というお話はどんな人にとっても関心の高いことになったと思います。
どのようにして安全なパスワード管理を実現するか。わたしがこれまで採った対策の経緯を簡単にご紹介したいと思います。なおここで紹介しているパスワードの作り方には脆弱なものもあります。そのように書きますので、注意して読み進めていただければと思います。
パスワード使いまわしからの脱出…定形パスワード+サービス名
パスワード管理でももっともやってはいけないことのひとつがパスワードの使い回しです。ひとつのパスワードが破られると芋づる式に他のサービスのアカウントが破られることとなり大変危険だからです。この仕事をはじめる前は私も8文字のお決まりのパスワードを使いまわしていました。自分の名前やプロフィールなどとは関係のない8文字でしたが、単なるアルファベットと数字の組み合わせ8文字であり、総当り方式の攻撃(プログラムをつかって自動的に文字総当りでパスワードを生成しログインを何度も試みる攻撃法。ブルートフォースアタックとよびます)にかかればひとたまりもなかったことでしょう(蛇足ですがお金を扱うサービスなのにパスワード文字数を10、あるいはもっと少ない数字以下に制限しているサービス、ホント勘弁してほしいです)。
まず私は様々なサービスに同じパスワードを使うことをやめました。仮にこれまで使っていた定形パスワードをhoge5690
としましょう。まず私はそのパスワードにサービス名を加えることで、パスワードの使い回しを避けることにしました。
たとえばTwitterならば「tw + hoge5690」でtwhoge5690
、Facebookならばfbhoge5690
という具合です。これならば単純なパスワードの重複は避けられます。ただこれを今読んでいる皆さんもお気づきのこととと思いますが、この方法は単純すぎて「パスワードを破られる→他サービスのパスワードも破られる」という流れを止めるには不十分です。「tw」という文字列が入っていれば「これはTwitrer用の文字列だな、じゃあFacebookはこれをfbに変えれば…」と簡単に発想できるわけですから。
パスワードに求められるものの整理と対策
ではどうすればいいのか。私はパスワード管理に求める条件を書き出しました。
- すぐに引き出せる…業務で日常的に扱うので、あまり情報の引き出しに手間がかかる方法は困る(紙に書くのはこの時点で除外)。なのでできれば記憶できるものがいい
- 文字長は長いほうが総当り型の攻撃に強くなる(1文字増やすごとに総当り攻撃に必要な試行回数は天文学的に上がる)。だが記憶できる(=引き出しが速くなる)ことを優先すると、あまり長くはできない。12文字程度あればまあいいとする
- 暗号化しないでデータとして保存したくない
- サービス名が類推できるような文字列・自分のプロフィールに関する文字列は入れない
- 英単語は入れない(ブルートフォースアタックの派生型で辞書攻撃というものがあります。より効率的に攻撃するために英語の辞書データを用いてパスワードを生成し総当りをかける方法です)
多くの要件は「記憶できる」という要件と矛盾してしまい、悩ましいところでした。
で、過去のわたしが考えた末に使っていた方法は、最初に紹介した「定形パスワード+サービス名」をちょっと複雑にしたものでした。
「hoge5690 + Twitter」の組み合わせならば、これらを一見分かりにくく混ぜる、というやり方でした。下の文字列がそれです。
hTowgiet5t6e9r0
こうするとかなり解読しにくくなったと思いますが、気づけば簡単です、
hTowgiet5t6e9r0
このように定形パスワードに一文字ずつサービス名を挿入していく、という方法です。これであれば
- ある程度文字数を稼げて
- サービス名も連続した文字列としては入っておらず
- 意味のある英単語は存在せず
- 覚えやすい形で大文字も混ぜられる
- まるっと記憶できなくてもすぐ書き出せる
これはうまいこと考えたな、と自分で思ったものでした。
しかし、やはりルールとしては単純なものです。タネが分かればあっという間に横に食い破られる、という意味ではあまり本質的な解決にはなっていないわけです。
パスワード管理ツールの力でパスワードを覚える運用をやめた
結局、今はパスワード管理ツール(1Password)のお世話になり、すべてのパスワードを記憶することを諦めました。
ランダムに発生させた15〜20文字のパスワードをサービスを登録するたびに発行し、これを管理ツールに記録します(もちろんパスワードは暗号化されています)。情報の引き出しにはマスターパスワードというパスワードを利用しますが、近年は端末による指紋認証で代える(もちろん定期的にマスターパスワードは打たないといけませんが、記憶しつづけるためにもこれは必要な手続きでしょう)ことも可能になり、よりスピーディに安全に情報を引き出すことができるようになりました。
なお簡易的にこういうことをするならば、Evernoteが内容の一部の暗号化に対応はしていますので、これを利用するのも手でしょう。ただ私はEvernoteは今はそれほど使わないですし、もしもEvernoteがサービス停止したときに暗号化したメモを展開(デコード)した状態でエクスポートできるのか、というあたりかなり疑問ではあるので採用はしていません。
パスワード管理ツールは結構高い上に、月額サービス化の流れが顕著です。勇気はいりましたが、パスワード管理というものは結局この社会を生きる中で避けることができないものであり、大きなリスクをともなう存在であり、また私にとっては仕事を遂行するにあたって日常的に必要不可欠なものです。そこにコストをかけてでも、利便化が必要であるという結論に至ったわけです。
そもそもパスワードは認証のやり方としては原始的な方法です。いずれはこれに代わる認証方法が主流になっていくのかとは思っていますが、このパスワード時代を効率的に生き抜くために、いろいろやったことでした。
追記:多くの人が言ってますけどパスワードを定期的に変更する必要はありません
よく言われるパスワードの定期変更は、肝心の文字数が稼げてなければ総当たり攻撃の前には無力です。むしろ定期的に変更する必要がある分、省力化のために文字数の少ないパスワードにしてしまいがちですし「201709」といったような年月を表す文字列が入りやすいため類推しやすいものになりがちです。定期変更より文字数が長い強固なパスワードをずっと運用するほうが安全性が高く業務効率がずっといいと思われます。他でもよく書かれることですが、こちらにも書いておきました。
このブログ主の夫のほう。大阪を中心に活動するウェブデザイナー。水交デザインオフィス代表。JUSO Coworking運営。趣味でハウス・ディスコDJ / デレマスP。共著書『世界一わかりやすいWordPress 導入とサイト制作の教科書』発売中です。