パスワード
2024年1月の共通テスト「情報関係基礎」の最初の問題(第1問、問1a)です:
個人のアカウントで情報端末にログインするためのパスワードは,ア にするのがよい。
正解は①のようですが、本当にパスワードは英字,数字,記号を組み合わせるべきでしょうか? 確かにパスワードが8文字しか設定できないといったときには、少しでも複雑にするために数字・記号を混ぜるほうがいいでしょうけれども、文字数の制限がなければ、文字数を増やすほうが簡単です。
具体的に計算してみましょう。英字(52通り)、数字(10通り)、記号(仮に10通りとします)をすべて使った8文字のパスワードは (52 + 10 + 10)8 - 528 - 108 - 108 - (52 + 10)8 - (52 + 10)8 - (10 + 10)8 = 232038396607488 通り(約200兆通り)です。英字だけの8文字のパスワード 528 = 53459728531456 通り(約50兆通り)の約4倍です。一方、英字だけの9文字のパスワードは 529 通りで、528 の52倍です。つまり、数字・記号を混ぜるより1文字長くするほうがずっと強いパスワードになります。
ちなみに、50兆通りのパスワードをネット経由で破ろうとすると、1回の試行に1秒かかるなら、全部を試すのに100万年以上かかります。
このようなわけで、今は、パスワードの長さを8文字とかに制限せず、数字・記号を混ぜる必要がない、というのが正しいとされています。冒頭の問題は今のベストプラクティスを反映していないといえるでしょう。
米国の標準 NIST SP 800-63B-4: Digital Identity Guidelines: Authentication and Authenticator Management には次のように書かれています:
Verifiers and CSPs SHALL NOT impose other composition rules (e.g., requiring mixtures of different character types) for passwords.
つまり、異なる文字種を混ぜることを要求してはならない、ということです(verifier はパスワードを検証する主体、CSP (Credential Service Provider) はパスワードを発行する主体という意味です)。
ほかに、次のようにも書かれています:
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
パスワードはユーザIDと組み合わせて使うものです。ユーザIDは秘匿する必要がないものですが、パスワードは秘匿すべきものです。
パスワードは、長くてランダムなものにしましょう。サイトごとに別のパスワードを使いましょう。パスワードを人に教えないようにしましょう。
ランダムなパスワードは、OSやブラウザのパスワードマネージャに生成してもらうのが簡単です。あるいは、パスワード生成のページや、Pythonのプログラムでも作成できます。
パスワードを定期的(たとえば数ヶ月ごと)に変更することを強制するシステムがありますが、面倒なのでかえって安易なパスワードにしてしまうユーザもいるということで、今は推奨されていません(上記NISTの推奨参照)。一方、盗み見(いわゆるショルダーハッキング)などでパスワードが漏れたら、すぐに悪用されてしまうでしょうから、数ヶ月ごとの変更ではほとんど役に立ちません。パスワードを打ち込んでいるところを見られたように感じたら、すぐに変更しましょう。パスワードマネージャによる自動入力なら、パスワード入力を盗み見られる心配もありません。
推測不可能なパスワードを、利用するサイトの数だけ作れば、覚えることは不可能です。「複雑な文字列(固定)+サイトの省略名(YHOとかGGLとか)」を薦める人もいるようですが、それでは推測できてしまいます。
サイトのURLとパスワードとの対応表を、安全な方法で記録しておくには、パスワードマネージャを使うのが簡単です。
メールなどのリンクをクリックして現れたサイトが本物サイトとそっくりだったとしても、そこにパスワードを打ち込んではいけません。たいていは詐欺(フィッシング)です。
まずhttpsでないサイトにパスワードを打ち込んではいけません。httpsであることとURLとを確認してパスワードを打ち込めばいいのですが、一般の人が正しいURLを覚えられるかは疑問です。例えば「三菱UFJ」が mufg.jp か mufj.jp かを覚えている人はどれくらいいるでしょうか?
パスワードマネージャを使えば、複雑なパスワードがサイトごとに自動生成でき、httpsの正しいURLのサイトだけで自動入力されます。URLを目視で確認して、記憶したパスワードを手で打ち込むより、ずっと安全です。私はmacOS/iOSに含まれている「パスワード」というアプリ(旧Keychain)を使っています。iCloudで同期しておけばMacとiPhoneで同じパスワードが使えます。ほかに 1Password が有名です。
パスワードマネージャが自動入力しないサイトには、手入力でパスワードを入れないことが肝心です(でも、残念ながらわざわざ自動入力できない仕組みにしてあるセキュリティ意識の低いサイトがある💢)
なお、ここで述べたことは、個人が自分のパソコン・スマホを使う場合の話です。企業等のパソコンを仕事で使う際には、そのセキュリティポリシーに従いましょう。
他人のパスワードを使うと、不正アクセス禁止法の違反になります(この法律では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 のような等比数列の和になります。
ではパスワードは何文字あれば安全でしょうか。
これは、想定するのがオンライン攻撃かオフライン攻撃かによります。
暗号化したファイルが盗まれた場合は、オフライン攻撃といって、ネット越しではなく攻撃者のパソコンの中で何度でも高速に試行できます。この場合はできるだけ長いパスワードが必要です。少なくとも十数桁にしましょう。
一方、ネット越しのオンライン攻撃であれば、高速な試行が無理な上に、数回失敗しただけで何らかの対処をされる可能性があるので、ランダムなパスワードであれば、長さはそれほど必要ありません(もっとも、パスワードマネージャが前提なら、わざわざ短くする意味はありませんが)。なお、この場合、攻撃者はよく使われる安易なパスワードを固定して、ユーザIDをいろいろ変えて攻撃するのが一般的です。
サーバに侵入され、パスワードのデータが盗まれた場合、パスワードは漏れるのでしょうか? 「十分複雑なパスワードなら、漏れない」が正解です。今どきのシステムはパスワードにランダムな文字列(ソルト)を追加した上でハッシュして、ソルトとともに保存しています。パスワードを復元するには、あらゆるパスワードを試してみるしかありません。それでも、オンライン攻撃と違って、何度でも試すことができますので、簡単なパスワードなら復元できてしまいます。
冒頭の問題のように、ネットサービスではなく情報端末にログインする際には、英数字のパスワードではなく、数字だけの暗証番号(PIN、ピン、Personal Identification Number)を使うことがあります。
例えばWindowsパソコンにログインする際に、Microsoftアカウントのパスワードを打ち込むのと、数桁のPINを打ち込むのとで、どちらが安全でしょうか。パスワードのほうが長いから安全だと思われるかもしれませんが、必ずしもそうではありません。もしどこかから覗かれていてパスワードが漏れた場合、別のパソコンから自分のアカウントにログインされる可能性があります。PINは仮に漏れても、パソコンが盗まれない限り、安全です。
iPhoneの場合はパスコードと呼ばれますが、iPhoneでパスコードを設定すると、ストレージが暗号化されるという利点もあります。
PIN・パスコードは何回か間違えると一定時間ロックされ、さらに間違えるとデータが消去される、あるいは盗まれたと気づいたらリモートからデータを消去する、などの仕組みがあるはずなので、通常は数字4〜6桁で安全ですが、このツイートによれば、お子さんが親のスマホのパスコードを毎日2回ずつ試し、数ヶ月で正しいパスコードにたどりついたとのこと。このようなことが想定される場合は、英数字の長いパスコードを設定するしかなさそうです。
それでもPIN・パスコードはショルダーハッキングに弱いので、生体認証(指紋認証・顔認証)に置き換えられつつあります。
・・・と書いてきましたが、パスワードはそろそろ時代遅れです。できればパスキーに移行しましょう。
参考リンク: