password

パスワード

2024年1月の共通テスト「情報関係基礎」の最初の問題(第1問、問1a)に次の問題が出題されました:

個人のアカウントで情報端末にログインするためのパスワードは, にするのがよい。

の解答群
複数の友人と話し合って考えたもの
英字,数字,記号を組み合わせたもの
自身がよく使うオンラインサービスと同じもの
特別な理由がない限り,与えられた初期パスワードのまま

正解はだったのですが、実はこの「パスワードは英字,数字,記号を組み合わせるべき」という伝承はすでに否定されています。

これについては、すでにたくさんの記事が書かれています(例えばImpress Watchの解説記事パスワードはとにかく長ければ良い 「新常識」をNISTガイドラインで確認する)が、念のためここでも解説しておきます。

米国のNISTガイドライン NIST SP 800-63B-4: Digital Identity Guidelines: Authentication and Authenticator ManagementHTML版)には次のように書かれています:

Verifiers and CSPs SHALL NOT impose other composition rules (e.g., requiring mixtures of different character types) for passwords.

要するに「異なる文字種を混ぜることを要求してはならない」ということです(verifier はパスワードを検証する主体、CSP (Credential Service Provider) はパスワードを発行する主体という意味です)。

短いパスワードしか設定できなかった時代には、少しでも複雑にするために数字・記号を混ぜるほうがよかったのかもしれませんが、文字数の制限がなければ、文字数を増やすほうが簡単です。

具体的に計算してみましょう。英字(52通り)、数字(10通り)、記号(仮に10通りとします)をすべて使った8文字のパスワードは (52 + 10 + 10)8 - 528 - 108 - 108 - (52 + 10)8 - (52 + 10)8 - (10 + 10)8 = 232038396607488 通り(約232兆通り)です。英字だけの8文字のパスワード 528 = 53459728531456 通り(約53兆通り)の約4倍です。一方、英字だけの9文字のパスワードは 529 通り(約2780兆通り)もあります。つまり、数字・記号を混ぜるより1文字長くするほうがずっと強いパスワードになります。

ちなみに、50兆通りのパスワードをネット経由で破ろうとすると、1回の試行に1秒かかるなら、全部を試すのに100万年以上かかります。

このようなわけで、今は、パスワードの長さを8文字とかに制限せず、数字・記号を混ぜる必要がない、というのが正しいとされています。冒頭の問題は今のベストプラクティスを反映していないといえるでしょう。

NISTガイドラインには、次のようにも書かれています:

Verifiers and CSPs SHALL NOT require subscribers to change passwords periodically. However, verifiers SHALL force a change if there is evidence that the authenticator has been compromised.

「定期的なパスワードの変更を要求してはならない」ということです。もちろんパスワードが漏洩したらすぐに変更しなければなりませんが、十分長いパスワードを使っている限り、パスワード変更の強制は逆効果です。

ちなみに、「与えられた初期パスワードのまま」は一般に好ましくないとされていますが、乱数で生成した複雑な初期パスワードを配っても、自由にパスワードを変更させると、簡単に破られるようなパスワードに変更してしまう人がけっこういるのが現実です。このような人にとっては、初期パスワードのほうが安全です。初期パスワードは生成した管理者が知ることができるのでまずいと思われるかもしれませんが、管理者はユーザのパスワードがわからなくてもすべての情報にアクセスできてしまうので、どっちみち同じことだ、とも考えられます。

[追記] 令和6年度 大学入学共通テスト問題評価・分析委員会報告書本試験の情報関係基礎の関係団体評価(PDF)の情報処理学会の評価に

なお,aは①が正解となっているが,③の初期パスワードが辞書攻撃に強く十分に長い場合,文字数の説明がない①の方が妥当だとは言い切れない点で説明不足を感じる。むしろ昨今では初期パスワードはそのような妥当性を十分に備えており,パスワード強度に十分な理解のないユーザがかえって弱いものに変更するリスクが指摘されることがある。

と書かれていました。

なお、2003年にパスワードに大文字・数字・記号を混ぜて定期的変更すべきと唱えた人は、誤りを認めています:The Man Who Wrote Those Password Rules Has a New Tip: N3v$r M1^d!

Bill Burr’s 2003 report recommended using numbers, obscure characters and capital letters and updating regularly—he regrets the error

パスワードについての常識はまだ日本では古いままのところが多々あります。

まーだ「大文字数字記号」入れろ言ってるんの?まだ8文字パスワード前提なの?いつの時代の話してんの?https://t.co/QlmJMQg4my pic.twitter.com/vc4tZKKWxb

— Hiromitsu Takagi (@HiromitsuTakagi) August 11, 2023

ではパスワードは何文字あれば安全でしょうか。

上述のNISTガイドラインには、パスワードだけによる方式では15文字以上、多要素認証の一つとしてのパスワードなら8文字以上としています。長さの上限は少なくとも64文字としています。

  1. Verifiers and CSPs SHALL require passwords that are used as a single-factor authentication mechanism to be a minimum of 15 characters in length. Verifiers and CSPs MAY allow passwords that are only used as part of multi-factor authentication processes to be shorter but SHALL require them to be a minimum of eight characters in length.
  2. Verifiers and CSPs SHOULD permit a maximum password length of at least 64 characters.

ネット越しのオンライン攻撃であれば、高速な試行が無理な上に、数回失敗しただけで何らかの対処をされる可能性があるので、長さはそれほど必要ありません。NISTのガイドラインが15文字とかを推奨しているのは、ユーザは必ずしもランダムな強いパスワードを設定するとは限らないために、余裕を持たせているのでしょう。

一方で、暗号化したファイルが盗まれた場合などは、オフライン攻撃といって、ネット越しではなく攻撃者のパソコンの中で何度でも高速に試行できます。この場合はできるだけ長いパスワードが必要です。ランダムな十数桁以上のパスワードにしましょう。


パスワードは、サイトごとに別のものを使うのが鉄則です。オンライン銀行と怪しいサイトとで同じパスワードを使い回したら、怪しいサイトの中の人がそのパスワードを使ってオンライン銀行にアクセスできてしまいます。そうでなくても、一つのサイトでパスワードが漏洩したら、全部のサイトが危うくなります。

そもそもパスワードを記憶して手で入力するのが危険です。フィッシング詐欺といって、メールなどで本物そっくりのサイトに誘導してパスワードを入力させる詐欺が非常に多いからです。

フィッシング詐欺に引っかからないためには、URLのドメイン名を見て、正しいサイトかどうかを判断すればいいのですが、ドメイン名の目視では判断を間違うことがあります。例えば arnazon という偽サイトがあれば amazon と見間違える可能性がありますし、「三菱UFJ」が mufg.jpmufj.jp かを覚えている人はどれくらいいるでしょうか?

そこでお勧めできるのが、OSやブラウザのパスワードマネージャを利用する方法です。パスワードマネージャは強力なパスワードをサイトごとに生成してくれるだけでなく、URLを厳密にチェックして(httpsであるかもチェックして)、フィッシングサイトでないことが確実な場合だけパスワードを自動入力してくれます。

パスワードを入力している手の動きを盗み見する、いわゆるショルダーハッキングに対しても、パスワードマネージャによる自動入力の方が有利です。

パスワードマネージャが自動入力しないサイトには、手入力でパスワードを入れないことが肝心です。残念ながら、わざわざパスワードマネージャによる自動入力ができない仕組みにしてあるセキュリティ意識の低いサイトが存在するので、そのようなサイトについては、ブックマークに登録しておき、メールなどのリンクをたどらず必ずブックマークからサイトに訪れるようにするのがよさそうです。

なお、ここで述べたことは、個人が自分のパソコン・スマホを使う場合の話です。企業等のパソコンを仕事で使う際には、その企業等のセキュリティポリシーに従いましょう。


他人のパスワードを使うと、不正アクセス禁止法の違反になります(この法律ではID・パスワードを「識別符号」と呼んでいます)。


m 通りの文字を使った n 桁のパスワードは mn 通りあります。例えば英字(大小文字)・数字・記号2通りを使うなら、m = 26×2 + 10 + 2 = 64 です。8桁にすれば、例えば Utz-VQ4i のようなパスワードになります。これは 648 = 281474976710656 通り(約281兆通り)あります。これだけあれば、オンラインのサービスのパスワードなら、しらみつぶしの方法で破られることは、まずなさそうです。

一方、例えば暗号化したファイルが流出した場合、何度でも試行できますので、超高速のコンピュータを使っても何年もかかるくらいの複雑なパスワードにしておく必要があります。私のコンピュータでは、十分安全な暗号化方式なら毎秒10〜35パスワードしか試せませんでした(パスワードをクラックする参照)が、敵はどんな強力なコンピュータを持っているかわからないので、十分長いパスワードを使いましょう。

2022年に尼崎市の委託業者が全市民の個人情報が入ったUSBメモリを紛失した事件がありましたが、その記者会見で市職員がUSBメモリのパスワードは13桁英数字と漏らしてしまいました。ネットでは Amagasaki2022 だろうとの予想が流れました。その後、USBメモリは無事発見されました。

13桁と漏らしてしまったことにより、どれくらいパスワードの試行回数が減ったでしょうか。ということで、問題です。

練習問題:m 通りの文字を使ったパスワードを、1桁、2桁、3桁、・・・と試していき、n 桁まで試し終わるための試行回数と、最初から n 桁だとわかっていて n 桁だけ試す場合の試行回数とでは、どれくらい違うでしょうか。

ヒント:1桁、2桁、3桁、・・・と試す場合、m + m2 + m3 + m4 + … + mn のような等比数列の和になります。


サーバに侵入され、パスワードのデータが盗まれた場合、パスワードは漏れるのでしょうか? 「十分複雑なパスワードなら、漏れない」が正解です。今どきのシステムはパスワードにランダムな文字列(ソルト)を追加した上でハッシュして、ソルトとともに保存しています。パスワードを復元するには、あらゆるパスワードを試してみるしかありません。それでも、オンライン攻撃と違って、何度でも試すことができますので、簡単なパスワードなら破られてしまいます。


冒頭の問題のように、ネットサービスではなく情報端末にログインする際には、英数字のパスワードではなく、数字だけの暗証番号(PIN、ピン、Personal Identification Number)を使うことがあります。

例えばWindowsパソコンにログインする際に、Microsoftアカウントのパスワードを打ち込むのと、数桁のPINを打ち込むのとで、どちらが安全でしょうか。パスワードのほうが長いから安全だと思われるかもしれませんが、必ずしもそうではありません。もしどこかから覗かれていてパスワードが漏れた場合、別のパソコンから自分のアカウントにログインされる可能性があります。PINは仮に漏れても、パソコンが盗まれない限り、安全です。

iPhoneの場合はパスコードと呼ばれますが、iPhoneでパスコードを設定すると、ストレージが暗号化されるという利点もあります。

PIN・パスコードは何回か間違えると一定時間ロックされ、さらに間違えるとデータが消去される、あるいは盗まれたと気づいたらリモートからデータを消去する、などの仕組みがあるはずなので、通常は数字4〜6桁で安全ですが、このツイートによれば、お子さんが親のスマホのパスコードを毎日2回ずつ試し、数ヶ月で正しいパスコードにたどりついたとのこと。このようなことが想定される場合は、英数字の長いパスコードを設定するしかなさそうです。

それでもPIN・パスコードはショルダーハッキングに弱いので、生体認証(指紋認証・顔認証)に置き換えられつつあります。


・・・と書いてきましたが、パスワードはそろそろ時代遅れです。できればパスキーに移行しましょう。


参考リンク: