古いバージョンのブラウザーを使用しています。MSN を最適にご利用いただくために、サポートされているバージョンをご使用ください。

強力なパスワードを作る法則とは? 意外と知らない「パスワード」のハナシ

ITmedia NEWS のロゴ ITmedia NEWS 2018/12/14 08:00
画像はイメージ © ITmedia NEWS 画像はイメージ

 ほとんどの人が日常的に行っている、ログイン、サインインなどの認証作業。認証で利用したパスワードが漏えいして第三者からの不正アクセスを受けたりするなど、認証をめぐるセキュリティの問題は後を絶ちません。こうした課題を解決するには、サービス提供者側だけで対策するだけでなく、サービスの利用者も正しい知識を持っておくことも必要でしょう。

 本連載記事では、認証の仕組みや課題、周辺の情報について、できるだけ分かりやすくお伝えしていきます。

 本連載の第1回で、本人認証に使われる要素は「知識」「所有」「生体」の3種に分けられ、これらは「認証の3要素」と呼ばれると紹介しました。

 今回は、知識要素を使用して認証する知識認証の代表格である「パスワード」について、利用する際のTIPS的な内容を、利用者とサービス事業者それぞれの立場から話します。

●最も一般的な認証方法「パスワード認証」

 知識認証の最も一般的なものは「パスワード認証」です。念のため説明しますと、下記の手順で利用します。

・サービス登録時にID(アカウント名)と一緒に、オリジナルの文字列をパスワードとして登録

・ログイン時にIDと一緒にパスワードを入力

・パスワードが登録時のものと合致していればログイン成功

 登録時のパスワードを知っているのは自分だけのはずなので、ログイン時に自分であることを証明できるという仕組みです。

 知っているのは自分だけなので、基本的に自分が誰かに知らせたり、メモを残したり、記憶から出すようなことをしなければ他人に知られることはありません。あとは、入力している場面の盗み見や、マルウェアなどによるキー入力の詐取に注意すれば、拷問や薬物などの暴力的な手段に訴えない限り、第三者がパスワードを奪うことはできないでしょう。

 サービス提供側とユーザー側で、認証用の機器など新たにモノを用意する必要もなく、低コストで導入できるのも特徴です。このような強みを持つパスワードですが、昨今ではパスワードの脆弱性から引き起こされる事件がいくつもニュースになっています。パスワードの脆弱性とは何かを考えてみましょう。

●パスワードより、人間の脆弱性が問題

 パスワード情報は先ほど述べたように、記憶から出さない限り漏えいすることはありません。しかし、実際にはパスワードを誰かに知られてしまい、不正ログインされる事件が発生してしています。

 パスワード盗用による不正ログインは、主に以下の理由によるものです。

1. 推測されやすいパスワードにしてしまっている

2. メモに書くなど、記憶から出して保管している

3. 利用者側ではなく、サービス側から漏えい

 (1)と(2)は利用者側の不手際、(3)はサービス提供者側の不手際になります。

 利用者が(1)と(2)を行ってしまうのは、複雑なパスワードは作るのが面倒で覚えるのも困難だからです。実は(2)については、メモに書いて保管すること自体は問題ありませんが、メモをきちんと保管しなくてはいけません。「専用のメモ帳を持ち歩く」「メモを財布の中に入れておく」「普段から持ち歩くスマートフォン内にメモしておく」など、貴重品と同等の取り扱いをする必要があります。このような扱いをせずに、「いちいち取り出すのが面倒だから」という理由で、誰かの目につくところに放置してしまうことに問題があります。

 つまり、(1)も(2)も、人間の能力が追い付かないという人間側の脆弱性のためだと言えるでしょう。

 (3)については、利用者個人ではどうしようもなく、サービス側がきちんと管理してくれることを信じるしかありません。利用するサービスによって異なるパスワードを設定しておけば、特定のサイトで漏えいしたとしても二次被害を防げます。しかし、ここでも「別々のパスワードを作って管理するのは面倒だ」という人間の脆弱性が顔を出します。

 「もうパスワードは面倒くさい! 別の認証方法にしてくれ!」と言いたいところですが、現状は別の認証方法に対応していないサービスがほとんどです。別の認証方法の導入には、認証用の機器を用意するコストがかかるので、規模の大きいサービス業者以外は二の足を踏んでいる状況でした。しかし、スマートフォンの普及により、スマートフォンを認証用機器として利用する方法なら低コストで導入できるようになってきました。

 とはいえ、スマートフォンを持っていない人への対応や、利用者が認証のたびにスマートフォンを取り出したり、アプリを切り替えたりする手間があることも事実です。生体認証もまだ課題があり、普及の具合もスマートフォンはともかくPC利用のことを考えると十分とは言えない状況です。

 いまはいわゆる過渡期で、まだまだパスワードはなくならないでしょう。ですので、この「面倒くささ」をできるだけ回避しつつ、安全なパスワード作成・管理ができる方法を考えてみたいと思います。

●知られている攻撃から防ぐためのパスワード作成

 面倒くさい問題はとりあえず置いておいて、パスワードに対する攻撃について紹介します。そして、それらに強いパスワードの作り方を考えてみましょう。

総当たり攻撃(ブルートフォースアタック)

 片っ端から文字列を試していく攻撃です。使われている文字数と文字種が少ないパスワードの方が文字列のパターンが少ないので、当たる確率が高くなります。

 同じサービスに対して、早いタイミングで何回も同じ場所(IP)から攻撃を試しているとサービス側に気付かれてしまうので、さまざまなサービスに対して、ゆっくりと場所を変えながら侵入を試す方法(パスワードスプレー攻撃)が、どこかでひっそり行われていると想定します。

【総当たり攻撃への対抗策】

 下記に紹介するページでは、パスワードに使われている文字数と文字種によって、総当たり攻撃にどのくらいの時間が耐えられるかを検証した内容を掲載しています。

・パスワードの最大解読時間測定 【暗号強度別】(ディアイティ)

 また下記のサイトでは、文字列を入力すると、そのパスワードが総当たり攻撃で破られるのかかる時間を計算してくれます。米国のセキュリティ関係者によって作られたサイトで、パスワード管理アプリ「Dashlane」がスポンサードしています。

 算出時間が正確とは言い切れませんが、参考にはなります。「あなたのパスワードはインターネットに送られない」とは書いてありますが、実際に使っている・使おうとしているパスワードを入力するのは、止めておいたほうが無難でしょう。

・HOW SECURE IS MY PASSWORD?

 これらを参考にすると、「とにかく長いほうが良い」となります。英字だけでも少なくとも15桁以上であれば人間の寿命を越えそうです。

辞書攻撃

 パスワードに使われていそうな文字列のリスト、いわゆる「パスワード辞書」が不正侵入を試みる人たちの間に出回っています。このリストには、例えば「password」のいくつかの文字を置き換えた「p@55w0rd」といった文字列も掲載されていると考えられます。

【辞書攻撃への対抗策】

 誰かが思い付かないような、ランダムなパスワードにしましょう。しかし、あまりランダムにし過ぎると覚えづらくなってしまうので、バランスをとって、ランダム性を組み入れるくらいにしておきましょう。

リスト型攻撃

 どこかのサービス事業者から漏えいしてしまったパスワードのリストを使って、他のサービスへの侵入を試していく攻撃です。

【リスト型攻撃への対抗策】

 先述したように、サービス提供社側の漏えいは利用者側で対策できないので、サービスごとに異なるパスワードを設定して被害の拡散を防ぎましょう。ただし、これが「面倒くさい問題」の原因になります。

 パスワード作成に関連する攻撃方法はこんなところでしょうか。安全なパスワードの作成ルールをまとめてみました。

パスワード作成ルール

・推測されにくい、ランダム性のあるパスワードにする

・できるだけ長いパスワードにする

・それぞれのパスワードを異なるものにする

 このルールを守りつつ、できるだけ面倒くささを軽減できるパスワード作成方法を考えてみます。

●パスワードではなく「パスフレーズ」

 「とにかく長いほうが良い」ということで、言葉をつなげてパスワードにする「パスフレーズ」という方法が、内閣官房 内閣サイバーセキュリティセンター(NISC)が2018年7月25日に策定した「政府機関等の対策基準策定のためのガイドライン (平成 30 年度版)」に掲載されてます。

 有名なせりふや決まり文句、歌詞などを使用したり、自分の好きな言葉をつなげたりするのは、推測されやすいためNGです。ランダム性を持たせるために、辞書をランダムに開いて、目についた言葉を使います。辞書は英語でなくても、日本語の辞書を使って、ローマ字にしても構いません。

 また十分なランダム性とパスワードの長さを確保するために、言葉を3つ使いましょう。3単語なら覚えられるのではないでしょうか。

 この文字列に、サービスごとの変化を加えるために、登録先のサービス名もローマ字読みした文字列を追加します。

例:言葉は「鹿児島」「ラズベリー」「病床」で登録先は「ITmedia」の場合

→kagoshimarazuberiibyousyouaitiimedia

 言葉3つ+登録先サービスのローマ字読みなので、覚えることも可能でしょう。ただし、この方法ではどうしてもパスワードが長くなってしまい、登録できないサービスが多くなってしまいます。そこで、別の方法を考案します。

●オリジナルのパスワード作成方法を編み出す

 パスワードを作って覚えるのではなく、オリジナルのパスワード作成方法を編み出して、それを覚えるという方法です。

要素の例

・好きな言葉を選ぶ(ただし、自分や家族の名前や誕生日、住所など他人に公開している情報や、「password」「12345」やキーボード配列など誰でも思い付きそうな言葉はNG)

・辞書を使ってランダムな言葉を選ぶ

・現在時刻(実際にパスワードを作る時間ではなく、「今」この記事を読んでいる時刻)を4桁の数字にする

・好きな顔文字を入れる

改造の例

・ローマ字読みして、子音だけ抜き出す

・大文字・小文字を混ぜる

・省略するのではなく、飾り文字を増やす

・通常のキーボードの入力位置から指をずらして入力する

 「要素」から3つ以上の言葉を選び、それを「改造」しながらつなげます。十分な長さになればOKです。これに、登録するサービスの名前を「改造」したものを加えます。この部分は登録するサービスによって変える部分です。例えば以下のようになります。

・好きなテレビ番組の名前をローマ字読みして子音だけ抜き出す(母音のみにする場合や、「ん」の部分などは覚えやすさ・語呂重視で調整)

例:ttwnds

・現在時刻を4桁の数字にする

例:2034

・好きな顔文字

例:*w*

・登録するサービスの名前を短縮したもの

例:itm

 これらを全部組み合わせると……「ttwnds2034*w*itm」になります。この方法であれば、サービス側のパスワード作成制限にもある程度対応できるでしょう。

 しかし、この例のままパスワードを作るのはNGです! あくまでも「自分で作成方法を編み出す」ことが大事なのです。これは「パスワードの作り方の例」ではなく「パスワードの作り方の編み出し方」の例として考えてください。

 いずれのパスワード作成方法にせよ、あとで思い出せる必要があります。パスワード自体を直接思い出すのではなく、「あのときこうやって作ったなぁ」と作り方の方を思い出して、連想するくらいの感覚で良いと思います。使っているうちに覚えることができるはずです。自信がなければ、紙に書いておいて、その紙をきちんと管理し、覚えたら紙を処分すればいいのです。

●サービス側のパスワード作成制限は、もはや意味なし

 「パスフレーズ」はサービス側のも文字数制限のために、ほとんど使えない状況ですし、オリジナルパスワード作成ルールでパスワードを作っても、サービス側のパスワード作成の制限のために、例外が発生してしまう場合があります。

パスワード作成制限の例

(1)n文字以内にしないとNG

(2)数字・記号を使わないとNG

(3)英語大文字・小文字の両方を使わないとNG

 このようなルールを見たことがあるかと思います。(1)は、サービス側で用意した設備の都合か、システムの都合で長さを制限せざるを得なかった時代の名残でしょうか。技術が進化した現在であれば、長さに制限を加える必要もないでしょう。

 また、(1)を設定しなくてはならないようなシステムであれば、(2)~(3)を設定して使用させる文字種を増やし、パスワードのパターン数を増やしたり、推測されにくい文字列を使わせるようにする必要性が理解できます。しかし、長さに制限を加える必要がなければ、こちらの制限も必要なくなります。自由なルールでパスワードを使うことができる環境でありながら、利用者側がランダム性のある長いパスワードを使う必要性を理解していることが理想ですね。

●パスワードの定期変更ルールは不要?

 各サービスで、ランダム性のある十分な長さのパスワードをそれぞれ使用すれば、定期的なパスワード変更はもはや不要です。むしろ変更する労力や、単純なパスワードにしたり、メモして放置したりするリスクの方が大きいでしょう。

 しかし、十分に強いパスワードを作って定期的に変更すること自体がダメなわけではありません。実際その方がセキュリティは向上するはず。ただ、現状はそこまでする必要はないといえます。

●もはや自分でパスワードを覚えない! のもアリ

 自分でパスワードを作成・管理せずに、道具に任せてしまうのも1つの方法です。今ではWebブラウザにパスワードを記憶させる機能があります。ただし、認証する先がブラウザで使うサービスでないと利用できず、複数の端末にまたがって利用するにはコピー作業が必要です。

 パスワード管理アプリ・サービスを使用するのも選択肢としてアリです。信頼できる事業者のものを選べば、パスワードを書いたメモ帳を管理するのと同じです。

 ブラウザに覚えさせるにせよ、パスワード管理アプリ・サービスに覚えさせるにせよ、そこにアクセスするためのマスターパスワード(ブラウザの場合はその端末の起動・ロック解除パスワード)だけは、きちんと作成し、管理しておきましょう。

●漏えいに備える? サービス側の管理方法

 サービス側には、文字数・文字種制限のない環境を用意する他に、もう一つお願いがあります。それは、パスワードをそのまま保管しないでほしい、ということです。パスワードリストのデータが漏えいしないようにするのは当たり前ですが、万が一漏えいしたとしても簡単には使えないようにしておいてほしいのです。

サービス側のパスワード管理の注意点

・パスワード情報を隠して保管する

・パスワード情報をそのまま保管しない。ハッシュ化・暗号化して保管する

・ハッシュ化・暗号化の方法に独自性を組み入れる

 要は、不正利用者がパスワードデータを手に入れたとしても、元のパスワードが分からないようにしてほしいのです。当たり前に思えますが、この対策をしていなかった事業者からの漏えい事件もあったので、念のため。

 また長大なパスワードでも、ハッシュ化することで管理するデータの長さが短くなり、容量を圧迫しないで済むようになります。ハッシュ化と暗号化の違いや方法についてはここでは触れませんが、興味のある方は調べてみてください。

●ユーザーとサービスの間のパスワードの状態

 最後にサイト利用者に気を付けてほしい点ですが、「https」になっていない「http」のサイトでのパスワード入力は避けた方がいいです。パスワードに限らず、住所や電話番号、クレジットカード番号など、他人に知られたくない情報の入力も含みます。

 「http」のサイトでは通信の内容が暗号化されていませんので、ネットワーク上で傍受された場合、その内容を盗み見されてしまいます。

 また「https」であったとしても、そのサイトがフィッシングサイトの可能性もあります。メールやメッセージなどで通知されたURLから開いたサイトを利用すること自体を避けた方が無難です。URLは巧妙に細工されており、目視では本物か偽物か判別できないかもしれません。

 以上、パスワードのハナシでした。パスワードはみんなが使っているだけあって、いろいろなところで書かれていることの集大成な記事となってしまいました。「まとめ記事」としてご利用いただけると幸いです。

 次回は、あまり知られていないであろうパスワード以外の知識認証についてのハナシをします。

ITmedia NEWSの関連記事

image beaconimage beaconimage beacon