皆様こんにちは。ネットワーク事業部の生方です。
先日、パナマのセキュリティ企業「Nord Security」から、2022年に最も使われたパスワードの国別ランキングが発表されました。
https://nordpass.com/most-common-passwords-list/
このランキングは世界30カ国で使用されているパスワードを集計したもので、Nord Security社は詳細を明らかにしていないものの、サイバーセキュリティ研究者と協力して行ったとしており、ネットに流出してしまったデータを解析したものと考えられています。
ランキングを見ると非常に安直なパスワードが広く利用されていることがよくわかります。
全世界でみても1位から順に「password」「123456」「123456789」「guest」と、パスワードがわからない時に誰でも試しそうなものがそのまま設定されています。
パスワードの保護については別の認証と組み合わせる二段階認証や、定期的な変更、パスワードの保管方法など様々な側面から考える必要がありますが、今回はパスワードの文字列そのものにテーマを絞って、安全なパスワードについて考えていきたいと思います。
パスワードはどのようにして解析される?
安全なパスワードを検討する前に、見方を変えて攻撃する側から考えてみましょう。そもそも攻撃者たちはどのようにしてパスワードを見破ってしまうのでしょうか?
パスワードの解析方法には様々ありますが、よく使用されると言われる方法をいくつかご紹介いたします。
ブルートフォースアタック(総当たり攻撃)
「ブルートフォースアタック」とは、あらゆる文字の組み合わせを総当りで打ち込んでいき、正解を探り当てる攻撃方法です。
例えば、数字だけが使用できる4桁のパスワードがあったとします。
全く手がかりが無かったとしたら、パスワードの組み合わせは0~9の10文字が4桁で10の4乗=10000通りとなります。この10000通りをすべて試せば、いつかは正解のパスワードを見つけることができます。
仕組みとしては単純で、コンピュータのプログラムで行うことも容易なため、時間をかければ確実に突破できる方法となります。
ディクショナリーアタック(辞書攻撃)
「ディクショナリーアタック」とは、その名の通り辞書に載っている単語をパスワードとして試していく攻撃方法です。辞書といっても語学辞書だけでなく、人名や地名、社名や商品名などあらゆる単語を辞書登録して試しています。
パスワードを作る時に、どうしても覚えやすい言葉を使いたいという心理が働いてしまうことを利用した攻撃で、ブルートフォースアタックよりも効率よくパスワードを突破できるとされています。
一単語だけでなく、複数の単語を組み合わせたり、大文字小文字を変えたりしてさまざまなパターンで攻撃するアルゴリズムもあるようです。
クレデンシャルスタッフィング
「クレデンシャルスタッフィング」とは、すでに流出してしまったパスワードを他のサービスで試す攻撃方法です。
例えば、あるSNSのログイン情報であるメールアドレスとパスワードの組み合わせが流出してしまったとします。
その場合、他のSNSやショッピングサイトでも全く同じメールアドレスとパスワードを使っていたとすると、芋づる式にいくつものアカウントを乗っ取られてしまいます。
一般的にパスワードの良くない使い方として、複数のサービスで同じパスワードを利用することが挙げられますが、これはこのようなクレデンシャルスタッフィングの被害に合う可能性があるためです。
安全なパスワードとは何か?
これを踏まえて、安全なパスワードとはどんなものなのか要素を考えてみましょう。
弊社ブログでも以前にパスワードについて取り上げた記事がありますが、必ずこれが正解という定義はありません。
総務省やIPA(情報処理推進機構)の情報なども参考にしながら、安全なパスワードの要素をまとめてみました。
- ある程度の長さの文字列にする(12文字以上)
- 大文字・小文字・数字・記号など複数の文字種を組み合わせる
- 一般的な辞書に掲載されている単語一つだけにしない
- 同じ文字の繰り返しやわかりやすい順番の文字列にしない
- 電話番号や生年月日などの推測されやすい文字列にしない
- パスワードを複数のサービスで流用しない
※参考 総務省 国民のためのサイバーセキュリティサイト、IPA チョコっとプラスパスワード
短い文字列の場合、前述のブルートフォースアタックを使用されると一瞬で突破されてしまいます。文字数が多いほど組み合わせは増えますので、解析にも時間がかかります。
明確な文字数はありませんが、最初にご紹介したNord Securityのサイトでは12文字以上を推奨しています。
また、複数の文字種を組み合わせることでも組み合わせ数は一気に増えますので、単一の文字種だけでパスワードを作るのは避けましょう。
一般的に使われる単語はどうしてもディクショナリーアタックで突破されやすくなります。複数の単語を組み合わせるとしても、あまり意味合いを持たない組み合わせにしたほうが推測されにくくなります。
パスワードを作るときの工夫
とはいっても、ある程度の長さの不規則なパスワードで、すべてのサービスで別の物を使うとなると、それを丸暗記しておくのは現実的ではありません。
パスワード管理ソフトなどを使うという方法も一つですが、ここでは比較的覚えやすく強度の高いパスワードを作るときのコツについてご紹介したいと思います。
ベースとなる複数の単語を決める
全く意味のないランダムな文字列を覚えておくというのはかなり難しいものです。
一般的な単語を使うことはディクショナリーアタックの危険性もありますが、2つ以上の単語を組み合わせることで覚えやすく、なおかつ強度をあげることができます。
文章そのものに意味が出てしまうと推測されやすくなりますので、できるだけ関連性の低い言葉同士が良いと思います。
例えば、「ピザ」と「温泉」というまったく関係ない言葉を組み合わせてみましょう。
「pizza」+「onsen」=「pizzaonsen」といった感じになります。
単語を逆順にする、大文字を入れる
前述の「pizzaonsen」を逆から書くと「nesnoazzip」になります。
ここからさらにローマ字の母音だけを大文字にすると「nEsnOAzzIp」となって、さらに不規則な形になりました。
元の単語→逆さま→大文字というルールを知っていれば理解できますが、これだけ見れば十分不規則な文字列になりました。
アルファベットをよく似た数字や記号と入れ替える
数字や記号を組み込むために、似た形のアルファベットと入れ替えるという手法があります。
「nEsnOAzzIp」の場合であれば、O(オー)を数字の0、I(アイ)を数字の1、Aを@に入れ替えると「nEsn0@zz1p」になります。
複数の文字種や記号を組み合わせることで、さらにパスワードの強度を上げることができます。
他にも
S→$、Z→2、q→9(読みが同じ)
など、形や読みが近いものを使うことで覚えやすさを保ちつつ、複雑なパスワードにすることができます。
ちなみに、このようなアルファベットを形や音が似た記号などに変換する表記法のことをLeet(リート)と呼ぶそうです。
WikipediaにもLeetの変換規則が記載されているので、変換する際の参考にしてください。
ウィキペディア(Wikipedia) Leet
サービスごとのキーワードを追加する
このベースとなった文字列に、サービスごとの特有のキーワードを組み合わせることで、全てのサービスで別のパスワードを使うことが可能になります。
例えば、利用するサービスの最初と最後の文字を、2つの単語の間に入れるというルールにしてみましょう。
googleで使うパスワードの場合は、「nEsn0」+「ge」+「@zz1p」=「nEsn0ge@zz1p」
yahooで使うパスワードの場合は、「nEsn0」+「yo」+「@zz1p」=「nEsn0yo@zz1p」
こうなれば、複数のサービスで異なるパスワードにすることが可能になりますので、クレデンシャルスタッフィングで突破される危険性も下がりますし、ディクショナリーアタックで解析するのも難しくなります。
文字列そのものを暗記するのは少し大変かもしれませんが、ベースの単語と変換ルールさえしっかり把握できていれば、パスワードがわからなくなることは無くせるでしょう。
おわりに
今回は安全なパスワードについて考えてみましたが、いまはあらゆるデジタルサービスを利用するためにたくさんのパスワードを持たなくてはいけません。
ついつい覚えやすさを優先してしまいがちですが、安易なパスワードは一瞬で解析されて、それを使ってあらゆる情報や資産を盗まれてしまう可能性も十分あります。
ご紹介したように、パスワードそのものの強度を上げて攻撃者に解析されないようにする工夫も大事ですが、パスワードをどのように管理するかや、パスワードだけに頼らない認証方法なども重要なポイントになってきますので、別の機会にはそのような部分も掘り下げてご紹介できればと思います。