【IT雑学】「良いパスワード」を考える
拙著『ストーリーで学ぶWindows Server』の「はじめに」が、日経BP社のWebサイトで公開されました。2022年5月の出版なので、少し間が空きましたが、これを機会に裏話みたいなものを紹介しようと思います。
「【自著紹介】『ストーリーで学ぶWindows Server』」でも紹介したとおり、本書は私がふだん講義で話しているような余談を多く盛り込んでいます。実際に役に立つ知識ではなくても、技術の背景や裏話、さまざまなエピソードを紹介することで、印象に残り、知識が身に付きやすいと考えているからです。
もっとも、あまりに長い余談はかえって理解を妨げるので、何でも話せばいいというものではありません。『ストーリーで学ぶWindows Server』でも、記述を省略した部分が多々あります。
そこで、このブログでは省略したエピソードも含めて紹介していこうと思います。
良いパスワード
インターネット上で提供されるサービスを使う場合、こんなことを聞いたことはないでしょうか。
- パスワードは定期的に変更しなさい
- サービスごとに異なるパスワードを使う
- パスワードは英数字だけではなく記号も含めて複雑にしなさい
現在ではどれも必ずしも適切ではないとされています。
一般に、パスワードは「(1)他人から推測されにくく、(2)自分は覚えやすい文字列」が良いとされています。
出身地、ひいきのスポーツチームやアイドル、生年月日などは比較的推測されやすく、そのまま使うことは望ましくありません。
私が学生時代、大学の計算機センターはパスワードが4文字でした(後に8文字まで拡張されました)。ある日、ゼミ仲間のアカウントに保存されているデータが必要になったのですが、その日は研究室に顔を出していませんでした。
困ったなあと思っていると、修士課程の先輩が「彼は広島出身だからパスワードはこれだろう」と言ってcarpと入力したらログオンできてしまいました。現在だと、こうした行為は法律で禁止されています。もちろん当時でもマナー違反です。
パスワードの定期的な変更は不要
自分だけが知っていて、他人から推測されにくい単語というのはなかなか思いつかないものです。定期的にパスワード変更を強制されると、ついついありふれたパスワードを使ってしまいがちです。セキュリティに配慮したはずが、これでは逆効果です。
現在では、総務省も「パスワードの定期的な変更は不要」「定期的な変更がかえって問題になる場合がある」としています(安全なパスワード管理|社員・職員全般の情報セキュリティ対策|企業・組織の対策|国民のための情報セキュリティサイト)
単一のパスワードで済ませる場合もある
サービスごとに異なるパスワードを使うのは、インターネットで提供されるサービスにはいい加減な管理をしているものが少なからずあるからです。
中にはパスワードをそのまま保存しているサービスもあります。パスワードを忘れたと問い合わせ結果、現在使用中のパスワードを教えてもらったら、そのサービスは危険です。
本来、パスワードは誰にも分からない形で保管すべきです。パスワードを忘れてしまったら、新しいパスワードを設定するように求められるのが最小限のセキュリティです。
しかし、十分信頼できる場所にパスワードを保存しておき、そのパスワードが流出しないと考えられるなら、複数のサービスで使い回すことは問題ありません。
たとえば、Azure Active Directory(Azure AD)では、認証を行なった結果としてトークン(一種の「身分証明書」)を発行します。Azure ADに対応したアプリケーションは、ユーザーから提示されたトークンをチェックすることで本人確認が完了したとみなします。この手順は標準化されているため、アプリケーションを提供するベンダーに依存しません。単一の認証情報で不k数のアプリケーションを認証する仕組みを「シングルサインオン(SSO)」と呼びます。SSOは認証情報の一部を使い回していますが、複数のアプリケーションでパスワードそのものを使い回すわけではないので比較的安全です。以下に簡略化した図を示します。
「複雑なパスワード」が複雑とは限らない
推測されにくいよう、複雑なパスワードを使いなさいと言われます。間違いではないのですが、複雑すぎるパスワードは覚えにくく、かえってトラブルが増えます。そのへんにメモする人もいるでしょう。パスワードをメモすること自体は問題ありませんが、メモを放置するのは問題です。
「複雑なパスワード」の条件として「英大文字、英小文字、数字、記号の4種類を組み合わせる」という規則を採用している場合もあります。しかし、この規則だけだと「Admin-1」も許可されてしまいます。もちろん、これは複雑ではありません。
オンプレミス環境で広く使われているActive Directoryドメインサービスでは、「パスワードの最低長(たとえば7文字以上)」という規則に加えて、「英大文字、英小文字、数字、記号の4種類のうち3種類以上」「パスワード文字列にユーザー名を含まない」という規則を設定できます。しかし、これでは「Pa$$w0rd」のような単純な文字列も許可されてしまいます。
いまどきのセキュリティ攻撃プログラムは「0(ゼロ)」と「O(オー)」「a」と「@」、「S」と「$」のような規則を内蔵しており、「Pa$$w0rd」は「Password」と同程度の安全性しかありません。「Password」は、ありふれたパスワードの筆頭です。
これがAzure Active Directory(Azure AD)だと「ありふれたパスワードを禁止する」という規則が設定されている上、前述の変換規則も組み込まれています。そのため「Pa$$w0rd」のような安易なパスワードは使用できません。
Active Directoryドメインサービスには、パスワードチェックルーチンを拡張する仕組みがあったような気がするので、Azure ADと同様の規則を追加して欲しいものです。
あ、でも、この拡張機能はWindows NT 4.0だけだったかもしれません。
結局どうすればいいのか
このように、パスワードの使用にはいろいろ課題があります。理想的にはパスワードの使用をやめて、別の認証方法を使うべきでしょう。Azure ADならそれが可能ですが、残念ながら、書籍ではそこまで言い切ってはいません。これは「今後の課題」です。