目次
日常にあふれるパスワード
いまやパスワードは日常的に使われており、業務用ツールの他にもSNSやゲームをするために、パスワードを全く使わない人はほぼいないのではないでしょうか。
パスワードは、システムやアプリにおける正規の利用者であることを証明するために使います。その前提として、正しいパスワードを知っているのは、唯一正規の利用者だけでなければなりません。
よって、誕生日や名前などの推測しやすい単語は利用しないように警告されていますし、色々なシステム、アプリケーションで同じパスワードを使いまわすことや、覚えられないからといってポストイットなどに書いて周囲に見えるような所に貼っておくなどは危険な行為です。
一方で、利用しているシステムやアプリケーションが多くなると、新たなパスワードを覚えることも大変なためパスワードの使いまわしが発生し、パスワードの漏えい事故が起きると、芋づる式に他のシステムへの侵入を許してしまいます。
今回は、パスワードについて、その仕組みと今後推奨される対策について述べていきます。
パスワードの仕組みと攻撃者側の環境変化
パスワードを理解するために、ハッシュについて簡単に触れます。パスワードの技術においては、入力された文字列から固定長でハッシュという値が生成されます(ハッシュ化)。
さらに、そこから生成されたハッシュ値が他の文字列でも同じハッシュ値にならないようにソルトとよばれるデータを付加して調整されています。ソルトについては、興味があれば調べてみてください。
(外部サイト)リンク:https://ja.wikipedia.org/wiki/ソルト_(暗号)
ここでパスワードの話に戻ってきますが、パスワードは、キーを使って復号する暗号化方式とは異なり、入力された文字列をハッシュ値に変換し、あらかじめ登録されているハッシュ値と一致しているかを判定します。二つのハッシュ値が一致した場合、パスワードが正しいと判断されてシステムへのアクセスが可能となります。
なぜ一度ハッシュ値に変換する、という複雑なプロセスを介しているかというと、システムが侵害されてパスワードが漏えいしたとしても、ハッシュ化されているため解読できないようにするためです。
では、攻撃者はどうやってパスワードを解読するのでしょうか。
実は、ハッシュ化において、パスワードに復号化するための計算はできません(ハッシュ化自体においてはパスワードを復号するための情報が欠落している)。
つまり、ハッシュ値からパスワードを割り出すことはできないのです。そのため、攻撃者はブルートフォース攻撃のように色々な組合せで、トライ&エラーを繰り返して正解を探す必要があります。
ハッシュ化を行っている場合、攻撃者は地道な作業を行うことになりますが、コンピュータの能力が高ければ(つまり計算速度が早ければ)、それだけパスワードの解読時間が短縮されることになります。
現在、クラウドが普及し、誰でも手軽に利用できるようになりました。
クラウドコンピュータでは汎用的な処理を行うCPU(Central Processing Unit)を利用したコンピュータシステムが一般的ですが、スーパーコンピュータ(HPC、High Performance Computer)もクラウドサービスで利用可能になっています。つまり、HPCのパフォーマンス次第では、攻撃者にとって簡単にパスワードの解読が可能となってしまいます。
HPCには、データを細かく分けて逐次的に処理する計算に向く「スカラ型」と、多くのデータをまとめて並列的に処理をする「ベクトル型」があります。従来HPCの主流はスカラ型(スーパーコンピュータ「京」など)であり、クラウドで利用できるHPCもスカラ型でした。しかし、開発が進められている「富岳」では、スカラ型+ベクトル型のチップを採用しています。
また、GPUで有名なNVIDIA社のHPCがAWSに利用できるようになったことで、誰でも(費用はかなりかかりますが)パスワードの短時間での解析が可能になってしまう可能性があります。*1
パスワードが短時間で解読されてしまう未来
パスワードは長ければ長いだけ組合せも多くなり、破られにくくなります。ハッシュ値を固定長にするソルトは、機械的に付加するために基本的に同じデータを利用しますので、元々のデータ(=パスワード)自体はサイト毎に使いまわさないことに越したことはありません。
また、誕生日や住所などは使わないように推奨されています。そして、一般的には数字(0~9の10文字)、アルファベット(あるいは大文字と小文字が使える場合、52文字)、記号(多くは、^*%$!&@# の8文字)の組合せが使われます(大文字と小文字、あるいは記号はシステムによっては使えなかったりします)。
もし、この組合せ文字が全て使え、かつ8文字が設定できると仮定した場合、設定できるパスワードには70文字の組合せが8回(8乗)分あることになります。
つまり、パスワードの組合せは708=576,480,100,000,000通り、576.48兆通りもあり、途方もない数値に見えます。
この組合せについて、Hive Systems社が行った実験*2では18分34秒で突破されるという結果がありました。
また、同サイトでは仮にChatGPTの開発環境と同等な環境でパスワード解読を試みる場合にかかる時間を算出していました。なんと0.9秒で8文字のパスワードが解読できてしまうそうです。
もちろん、そのような環境を用意するには、現時点では膨大な資金が必要になりますが、昨今の技術の発展を見ると、こうした大規模環境が一般的に低コストで使えるようになる未来もそう遠くはないかもしれません。0.9秒とはいかないまでも、短時間で突破されてしまう危険性が迫ってきています。
そうなると、パスワードの文字数が8文字では不十分と言えるでしょう。ちなみに、11文字でも4日、12文字だと8か月、13文字だと47年・・・となりますので、最低でも11文字かそれ以上が必要です。
また、パスワードの使い回しではなく、1、2文字を変更して利用する人もいますが、この計算(解読)速度を見れば、無意味に近いことはお分かりだと思います。
パスフレーズのススメ
これまでの説明から、8文字程度のパスワードでは不安ですし、さらにシステム、アプリ毎のパスワードを覚えることも大変だと思います。そこで、パスワードではなく、パスフレーズが推奨され始めています。
パスフレーズとは、文字どおり「句」を暗号キーにしたもので、特徴として文字列が自然に長くなるためパスワード(単語)に比べ強固である点と、印象に残るため覚えやすい点があります。
パスフレーズを作るコツを紹介します。
セキュリティ面では、一般的な言い方ではなく、個々人独特の言い方が推奨できます。例えば、結婚している相手の名前ではなく呼び方、可愛がっているペットや人形の愛称などは、戸籍や会社メールからは調べられません。攻撃者にとって解読が困難になるでしょう。
また、調べられる偉人の格言や、想像が可能な呼び方(ハニーとかベイビーなど)なども利用すべきではなく、独自の呼び方は有効です。重要なのは、数字、アルファベットの大文字と小文字、記号、空白などを置き換えたり、といった自分なりのルールを作り独自性のあるフレーズを作ると破られる可能性を低減できるでしょう。
パスフレーズについては、「覚えやすさ」も重要な要素です。サイトの入力として許される文字数で、なるべく文字を多く使う長いフレーズを作成すればよいのではないでしょうか。パスワードでは生成するツールもありますが、覚えられる文字ではないためにお勧めできません。
パスフレーズは私も重宝しており、覚えやすさの点では問題ありませんが、入力するのが大変なほどです・・・。
パスワードを見直してみませんか
実はパスフレーズも自分なりの文字変換ルールや、フレーズの内容を考えるのは骨が折れる作業ではあります。しかし、サイバー脅威が増えている昨今、自分のアカウント情報などが乗っ取られないために自己防衛の手段を整えることが重要だと思います。
システムおよびアプリ提供者側のもう一つの方法として、パスワード入力回数の制限があります。例えば5回誤った場合は、システムやアプリケーションをロックし入力できない状態にして、例えば30分以上は入力できなくなるようにするというもの。
これもブルートフォース攻撃に対して、攻撃者の時間をかけさせるには非常に良い方法です。
もちろん、アプリケーションの変更は必須ですし、利用者側が不便に感じることもあるので、セキュリティ対策の状況やUXのバランスを見ることが必要です。
今回は、利用者目線、自身を守る手段として、パスワードではなくパスフレーズについてご紹介しました。一度検討をしてみてはいかがでしょうか。
出典 (参考文献一覧)
※1 内閣府ホームページ | スカラ型とベクトル型について (参照日:2023-08-15)
※2 hivesystems | Are Your Passwords in the Green? (参照日:2023-08-15)