Twitter 見ていたら、パスワード手帳に対して批判が集まっていた。
文具屋で見つけた人が写真付きでリツイートして、頭おかしい、情薄、作った会社潰れろ、などとリプライが付いていただけだけど、見た時点で 2500RT を超えていたので同じように思っている人が多いのではないか、と想像する。
でも、これ批判する人って、パスワードを正しく扱えているのかな?
状況は時代とともに変わる。
「パスワードを紙に書いてはならない」は、20年前なら確かにその通りだった。
しかし今は「暗記できる程度のパスワードを使ってはならない」と言うのが鉄則になっている。
それを知らずに「紙に書くなんて情薄」、と言っている人は、最新情報に追随できていない情薄である。
セキュリティ上、一番弱いのは、実は「パスワードは暗記しています」と言うやつ。
その昔、パスワードは紙に書くな、暗記せよ、と言われました。
だからその通りにしています。…そうだね、昔ならその方法が一番良かった。
ネットの普及以前であれば、パスワードを使うのなんて、社内の情報システムにログインするとか、unix 使いがアカウント使ってログインするとか、その程度だった。
多くてもせいぜい3~5個程度のパスワードなら暗記も出来たし、紙に書くなんて「やってはならないこと」だった。
でも、今はそうではない。
ネット上に、パスワードを使うサイトは沢山ある。
「これらを全部暗記している」という人がいたら、同じパスワードを複数のサイトで使いまわしているのではないかい?
もし思い当たるふしがあるなら、それがセキュリティ上「紙に書くよりもやってはならないこと」だと知らなくてはならない。
利用したサイトは、おそらく悪意はないだろう。悪意のあるサイトなんて、それほど多いわけではない。
でも、悪意はなくとも、技術が低くてセキュリティ管理が十分ではない、と言う可能性はある。
小さなサイトであれば、セキュリティが甘々で簡単にクラックされる、と言う可能性は高い。
じゃぁ、逆に大手は安心かと言えば、大手は利用者が多いために、クラッカーにとっては宝の山で、難しくてもクラックする甲斐がある。
つまり、どこのサイトも安全ではない、と言う前提でセキュリティを考えなくてはならない。
クラッカーは、どこか1か所のサイトでパスワードを入手したら、「ユーザーは同じパスワードを使いまわしている可能性が高い」と考え、多くの人が利用してそうなサービスで、そのパスワードが使えるのではないかと試してみる。
もし、あなたが「パスワードを紙に書いてはならない」という言葉を信じ、暗記できるだけの何パターンかのパスワードを多くのサイトで使いまわしていたとすれば、この時点で次々と、別サイトのアカウントを乗っ取られることになる。
実は、「パスワードは紙に書いてはならない」というのは古い情報であって、現在一番重要なのは「すべてのサイトでパスワードを変えておく」ということだ。
パスワードを変えてあれば、それだけで大丈夫?
…いや、実はそうでもない。
パスワードが流出する、と言う事件はたびたびあるが、ここで流出したパスワードと言うものを、3段階に分けて考えなくてはならない。
1) パスワードそのもの
2) 暗号化されたパスワード
3) ハッシュ化されたパスワード
セキュリティ意識の低いプログラマは、パスワードの管理に気を使わず、パスワードそのものを記録してあることが多い。
プログラマのセキュリティ意識ではなく、「システム発注者の」意識が低いのかもしれないが、利用者にとっては同じこと。
セキュリティ意識が多少ある人は、暗号化する。
しかし、実はこの行為には、ほとんど意味がない。
「暗号化してある」と言うことは「復号できる」と言う意味に他ならないからだ。
もし、サイトで「パスワードを忘れた」と申請したら、あなたが設定したパスワードそのものをメールで送ってきてくれる、と言うようなサービスをやっている場合は、間違いなく 1 か 2 の方法でパスワードを管理している。
万が一、クラッカーがデータを入手したら、パスワードは確実に漏れると考えたほうがよい。
真にセキュリティを知っているプログラマは、3 の方法を使う。
ハッシュ化って何? と言うことになるが、この方法ではパスワードは一切記録されないのに、ちゃんと「正しいパスワード」を認識できる。
#余談になるが、ハッシュ化は専門用語なので、一般にはこれも「暗号化」と言われてしまう。
報道から 2 か 3 かを見分けるのは、読み手の自己責任。
ある決まった値を、決まった鍵で暗号化すると、その答えは常に決まっている。
しかし、同じ値を、違う鍵で暗号化すると、その答えは先ほどの結果とは必ず異なる。
…このような暗号方法があったとしよう。
この「鍵」としてパスワードを使う。
ユーザーがパスワードを入力すると、それを「鍵」として「決まった値」の暗号化を行い、結果を記録されているものと照合する。
万が一記録が漏れ、復号に成功したとしても、得られるのはパスワードではなく、一定の値だけだ。
この方法ならパスワードが漏れることは無い。
ただし、暗号の計算方法は大抵わかっているので、複号を試みることはもちろん可能だ。
そして、復号できたとき、その時の「鍵」がパスワードだ。
じゃぁ、パスワード暗号化と何が違うのさ、というと、手間が全然異なってくる。
パスワードを暗号化する、というのであれば、鍵を別に用意しなくてはならない。
何千何万ものパスワードごとに鍵を変えるのは難しいので、全部同じ鍵だろう。
そしてその「鍵」は、機械的にいつでも復号できるようにしてあるのだから、パスワードが記録してあるマシンのプログラムのどこかで参照しているはずだ。
こうして、パスワードを記録したデータが漏れた時には、事実上全パスワードが漏れてしまう。
ところが、ハッシュ化であれば、「鍵」はユーザーが持っていることになる。
手当たり次第に復号化を試みることは可能だけど、時間をかけて1つづつパスワードを解き明かしていく…と言う作業が必要になってしまう。
しかも、ここでいう「時間をかけて」というのは、途方もない時間になるのだ。
…組み合わせを制限する、と言うテクニックを使わなければ。
たとえば、8文字のパスワードを、アルファベット26文字の大文字小文字、それに数字10種類を自由に組み合わせて作りだしたとしよう。
62種類を8文字連続するので、62の8乗…218兆通りほどの組み合わせができる。
いくらコンピューターが速くても、これを全部試してはいられない。
そこで、クラッカーは組み合わせを制限する。
完全ランダムな文字列は覚えにくいから、たぶん英単語を使っているだろう、と決めつけるのだ。
あらかじめ「単語辞書」を作っておき、その辞書に載っている単語を試す。
通常、パスワードシステムは8文字以上でないと受け付けないようになっているので、7文字以下の長さの単語は、別の単語と組み合わせて8文字になるようにする。
9文字以上のパスワードは、受け付けるシステムと受け付けないシステムがある。
…逆に言えば、「同じパスワードを使いまわしている人」は、8文字に揃えているはずだ。
だから、単語の組み合わせの際は、8文字になるものだけを試せばよい。
#使いまわしていない人のパスワードを知っても、うま味は少ない。
これで組み合わせはずいぶんと制限され、現実的な時間でパスワードを見つけ出せるようになる。
もちろん、この例に当てはまらないパスワードは見つけ出せないが、流出データに何万件ものパスワードハッシュがあるのであれば、そのうち1割を解読するだけでも十分な宝の山だ。
余談になるが古典的なクラッカー追跡ドキュメンタリー、「カッコウはコンピューターに卵を産む」の中では、8文字になるように英単語を組み合わせてパスワードを作る、と言う方法が推奨されている。
この時代、上に書いたような「単語を試してパスワードを解読する方法」は使われ始めたばかりで、コンピューターの速度も遅かったために、「8文字の英単語」を試すのがせいぜいだったのだ。
たとえば、3文字と5文字を組み合わせればこの方法では見つけ出されない、というので、書籍では「robotcat」というパスワードが例に出されている。
この時点では良い方法だったが、今は時代が変わった。
しかし、この方法が有名になりすぎ、今でもこの方法を使う人がいる。
クラッカーはそこにつけ込んでいるのだ。
万が一パスワードが漏れたらどうなるだろう?
たとえば、Amazon のパスワードが漏れ、登録してあったクレジットカードで買い物された…
なんていうのは、実はわかりやすい被害だ。
きっとクレジットカード会社が補償してくれるから大丈夫。
でも、Gmail のパスワードが漏れ、メールを覗かれ続けたとしたら…これはなかなか気づけない。
いつパスワードが漏れているかわからない、と言うことを考えると、対策は「時々パスワードを変える」と言うことになる。
クラッカーが、次にログインした時に「パスワードが変わった」ことに気が付けば、もう手の出しようがないのだ。
暗号と言うのは、時々鍵を変えるから意味を持つ。
鍵を変えずに運用し続けて、暗号が漏れたまま気づかないでいた…なんていうのは、歴史上よくある運用ミスだ。
歴史に学ばなくてはならない。
・サイトごとにすべて変更する。
・ほぼランダムに見える文字列を使う。
・時間的にも時々変更する。
これが、現代における「正しい」パスワードの運用方法。
全部暗記しておく? …いや、それは現実的ではないだろう。
これでもまだ「紙に書いてはならない」だろうか?
紙に書いてはならないから、クラウドの、Evernote や Dropbox で管理している、という人もいる。
これは論外。それらのサイトがクラックされたら、すべて漏れると考えてよいだろう。
#現実に、Evernote はクラックされてパスワードが流出したことがある。
クラウドはさすがに怖いから、ローカルの PC にファイルとしてパスワードを記録して、そのファイル自体を暗号化している、という人もいる。
でも、ネットに繋がっていればローカルからの流出だってあり得る。
暗号化してあると言うことは、鍵が知れれば「全部の」パスワードが漏れてしまう、と言うことでもある。
また、クラウドと違ってどこからでも参照するのが難しいから、各所にコピーをばら撒いておく…なんていうのは、流出の可能性を増やしているだけだ。
実は、それよりもネットに接続されていない、接続しようもない、でもどこにでも持ち運べる「紙」に書いた方が良い、というのも、セキュリティの専門家が指摘するところだ。
ただし、紙に書くならその取扱いは厳重にすること。
冒頭にあげた手帳、パスワード手帳だが、外見は「パスワード」など一言も書いていない。
普通の手帳に見えるようにしてある。
ただ、url と id とパスワードの組を書けるようになっているのは…少しいただけないように思う。
その3つ組を一緒に記録するのは、いくらなんでも危険だろう。
url や固有名詞は避けて、「いつも使っている銀行」くらいにとどめるのが良いのではないかな。
いや、銀行とすら書かず、GK (GinKou) とか BK (BanK) とか、軽く暗号化(符丁化)するといいだろう。
ID に関しても、多分名前をローマ字にしていたり、メールアドレスが使えたり、いくつかのパターンに収まるだろうから、そのヒント(こちらも符丁で)だけで。
で、パスワードは書いておけばよい。
ちゃんとすべてのサイトでパスワードをかえてあれば、パスワードだけわかっても何もできないはずだ。
ちなみに、第三の方法もあって、パスワードの一部を、そのサイトから得られる何かを使って、一定の手順で「計算」できる方法にしておく、というのもある。
一部は暗記して使いまわすが、一部は「計算」で導出する。
計算式が簡単すぎると推察されるかもしれないけど、ひと工夫すれば、自分以外にはわからなくなる。
この方法の欠点は、「全部のサイトで」違う、と言うほどのパスワードを作り出せていない可能性と、時間的に変化させることができないこと。
それでも、本当に重要なサイトだけ「正しく」管理を行い、それ以外はこちらの方法を使う、とかで使い分ければよいだろう、と思う。
2019.7.14 追記
この記事でのパスワード管理の結論の一つ、「時間的にも時々変更する」はやってはならない、とするご指摘をいただきました。
ご指摘は、2017年に米国政府機関である NIST が勧告し、これを受けて総務省も日本国内向けに勧告を行った、「パスワードの定期変更を強制すべきではない」に基づくものだと思います。
この記事の冒頭に書いたように、状況は時代とともに変わります。
記事を書いてから5年たち、日進月歩のコンピューターセキュリティの話としては、いささか古くなっているとは思います。
しかし、残念ながらご指摘をくださった方は、NIST ・総務省の勧告を勘違いしているようです。
この記事の内容は、2019 年時点では、まだ有効なままです。
何をどう勘違いしているのかなど、詳細を示すと長くなりますので新たな記事として書き起こしています。
このページの内容をここまで読まれた方は、5年後の状況に合わせて書かれた、新たな記事もお読みくださると幸いです。
同じテーマの日記(最近の一覧)
関連ページ
パスワードの管理方法(令和元年版)【日記 19/07/14】
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |