日本語
  • password-cracking
  • rainbow-table-attack
  • hashing

あなたのパスワードはどのようにしてクラックされるのか?パスワードセキュリティを向上させる方法は?

この記事では、パスワードをクラックするためのいくつかの古典的な方法と、その背後にある原則を紹介しました。これらの概念に対処するために、パスワード管理者とアカウント所有者の両方の観点から、パスワードのセキュリティを強化する方法を提供しています。

Darcy Ye
Darcy Ye
Developer

著名なアプリのユーザーのパスワードが漏洩したというニュースをよく目にします。特定のアプリを使用していないからといって、このような事件が自分には関係ないと感じるかもしれませんが、実際にはそうではありません。

最近、Twitter上でAIの手法がパスワードのクラック速度を大幅に加速させるというニュースもありました。そこで、その裏にある複雑さを理解し、パスワードのセキュリティをどのように改善できるかを探ることを決めました。

PassGAN Twitter

パスワードはどのようにしてクラックされるのか?

一般的に、アカウントのパスワードはさまざまなハッシュアルゴリズムを使用して処理され、その後データベースに保存されます。パスワードハッシュについてより良い理解を得るには、我々の以前のブログを参照することができます。残念ながら、常識に欠けた一部のサービスプロバイダーは、パスワードをデータベースにプレーンテキストで保存しています。この行為は、データが漏洩した場合、さらに重大な損害をもたらす可能性があります。

ハッシュ化されたパスワードを保存することで、データベースの管理者であっても元のパスワードにアクセスすることができず、セキュリティが大幅に向上します。入力されたパスワードの正確さを検証する際には、同じハッシュアルゴリズムを使用して入力されたパスワードを処理します。得られたハッシュは、データベース内の保存された値と比較されます。2つのハッシュ値が一致すれば、入力されたパスワードは正しいと見なされます。

簡単に言えば、パスワードのクラックは、許可されたパスワードルールに従って文字列を生成することを含みます。その後、前述の方法を使用してこれらの文字列を継続的にチェックし、最終的に正しいプレーンテキストパスワードを見つけ出します。

パスワードをクラックするための一般的な方法

このセクションでは、パスワードをクラックするための3つの一般的な方法を簡単に紹介します。

ブルートフォース攻撃

ブルートフォース攻撃は、許可されたパスワードルール内のすべての可能性を列挙し、一つずつ試すというものです。

例えば、携帯電話は4桁の数字のパスワードを設定できます。ブルートフォース攻撃は、000000010002、…、9999までのすべての可能性を一つずつ試します。

ブルートフォース攻撃は非常に時間がかかります。なぜなら、試みることが多すぎるからです。パスワード長を $L$、パスワードの各桁あたりの文字の可能性の数を $n$ とすると、ブルートフォース攻撃が試みる必要がある可能性の数は $n^L$ であり、これは非常に大きな数です。

多くのパスワードが数字、大文字と小文字の文字、特殊文字を組み合わせることを要求する理由は、$n$ を増やし、可能性を大幅に増やし、パスワードのクラックの難易度を上げるためです。

辞書攻撃

辞書攻撃は、辞書からの単語を使用し、スペース、数字、特殊文字やその他の要素を組み合わせてさまざまなパスワードの組み合わせを形成します。これらの組み合わせを用いてパスワードの一致を試みます。

多くの人々は、記憶しやすさのために明確な意味を持つ文をパスワードとして使用することを選びます。辞書攻撃は、このような特徴を持つパスワードをクラックするための効率的な方法です。

レインボーテーブル攻撃

レインボーテーブルは、プレーンテキストパスワードを対応するハッシュ値にマッピングした事前計算されたテーブルです。データベース内に保存されているハッシュ値をレインボーテーブルのものと直接比較することで、一致するものが見つかった場合、対応するプレーンテキストパスワードを直接取得することができます。

レインボーテーブルの利点は、ハッシュ値が事前計算(そしてレインボーテーブルに記録)されていれば、その場でプレーンテキストパスワードにアクセスできることです。ただし、ハッシュ値が事前計算されていない(そしてテーブルに存在しない)場合、レインボーテーブルを使用することはできません。

上記の方法に加えて、ここでカバーされていない無数の他の技術があります。一般的に、これらの方法を組み合わせて、すべての可能なパスワードをカバーし、クラックプロセスを迅速化します。

パスワードクラックをスピードアップする方法

前のセクションでは、いくつかの古典的なパスワードクラック方法を簡単に紹介しました。これらから、パスワードクラックの速度や成功率を向上させるためのアイデアをまとめることができます。

パスワードをクラックするためには、通常、次の2ステップが必要です:

  1. パスワードの検索空間を決定する(可能なパスワードを生成する)
  2. 可能なパスワードに対してハッシュアルゴリズムを使ってハッシュを生成し、クラックしたいパスワードのハッシュと比較する

前述の辞書攻撃とレインボーテーブル攻撃は、それぞれこれらの2ステップを最適化しています:

  • 辞書攻撃は、パスワードの検索空間を狭めます。「ユーザーは実際の意味を持つ単語の組み合わせを使う傾向がある」という仮定に基づいて、zzzz のような単語は辞書に含められていません。これは、誤った答えを予め排除することに似ています。複数選択式問題に取り組むのと同様、正解を確信していない場合でも、間違いなく誤っている選択肢を把握することができます。これらの明らかに誤った選択肢を排除することで、残された選択肢の中で正しく選ぶ可能性が高まります。
  • レインボーテーブル攻撃は、ハッシュアルゴリズムの実行時間を加速します。データ構造に精通している人々にとって、ルックアップは $O(1)$ の複雑性を持つ操作であり、時間の複雑性において $O(1)$ より簡単な操作はありません。対照的に、MD5 や SHA のような一般に使用されるハッシュアルゴリズムの時間の複雑性は $O(n)$ で、$O(1)$ よりはるかに遅いです。

実際には、パスワードクラックプロセスを最適化する際にも、上記の2つの観点からアプローチを開始します。文字列ハッシュアルゴリズムの $O(n)$ 時間複雑性の最適化には比較的余地が小さいため、ハードウェアや計算方法の改善をさらに考慮することが多いです。ここでは詳述しません。

AI はどのようにしてパスワードのクラックを助けるのか?

パスワードクラックの全体的な試みの中で、AI の役割は、露出したプレーンテキストパスワードから特定のパターンや構築方法を学ぶことにあります。この後、AI はこれらのパスワード構築パターンをシミュレートして、多くの可能なパスワードを生成できます。その後、AI はハッシュアルゴリズムや専用ハードウェアを使用してパスワードクラックを実行できます。

実際、他のパスワードクラックツールと比較して、PassGAN の強みは、私たちが上で述べた「可能性のあるパスワード検索空間を減少させる」アイデアで、「最も可能性が高いパスワードをできるだけ早く推測することができる」という点です。

Password Guessing Prob

パスワードをより安全にするには?

ここでは、パスワードを保護するための方法を2つの視点から説明します。ここでは、単にパスワード自体から始めます。アカウントのセキュリティを確保するための2要素認証 (MFA) などの他の手段については議論しません。

アイデンティティサービスプロバイダー側から

アイデンティティサービスのプロバイダーとして、すべてのユーザーのパスワードをホストしているため、これらのパスワードのセキュリティを保護する責任があります。ユーザーのパスワードのセキュリティを向上させるために実施できるいくつかのスキームは次のとおりです:

  1. パスワードをプレーンテキストで保存することを避ける: 常識のように思えるかもしれませんが、一部のサービスプロバイダーは依然としてパスワードをプレーンテキストでデータベースに保存しています。ハッシュ値を使ってパスワードを保存することでセキュリティが一層高まり、データベースが侵害されてもハッカーはハッシュ化されたパスワードをクラックするのにかなりの労力が必要です。

  2. パスワード検証のための API インターフェイスにレート制限を適用する: 前に述べたパスワードクラックのプロセスを再度考えます。このプロセスの重要な部分は、パスワードが正しいかどうかを「検証」することにあります。パスワードはアイデンティティサービスプロバイダーに委ねられているため、パスワード検証のための API を提供できる唯一の存在です。この API にアクセスする頻度を制限することで、たとえ非常に高い可能性のあるパスワード推測を持っていても、ハッカーがさまざまなパスワードを迅速に試すのを妨げることができます。

  3. より複雑なパスワードの構成を強制する: 例えば、前述のように、特定の長さのパスワード内の文字の多様性が高いほど、複雑性が増します。また、前述した AI 技術を活用して、送信前にパスワードのセキュリティを評価できます。パスワードが弱いと判断された場合、ユーザーはより強力な代替案を選ぶよう促されます。

ユーザーの視点から

アカウント所有者として、関連するデジタル資産も含めて、自分のアカウントパスワードのセキュリティを最大限に確保する必要があります。

  1. 異なるウェブサイトで同じパスワードを使用することを避ける: 特定のウェブサイトからパスワードを取得した後、多くのハッカーはこれらのアカウントの資格情報を使用して他のウェブサイトにアクセスしようとします。異なるサービスに対して複数のアカウントが同じパスワードを共有している場合、上記のシナリオでアカウントを失ったり情報が漏洩したりするリスクがあります。

  2. 可能な限り純粋にランダムなパスワードを選ぶ: このアプローチは、ほとんどの人が採用する一般的なパスワードパターンの再利用を防ぐのに役立ちます(先に述べたように英語の文を使用すること)。これにより、ハッカーが「パスワード検索空間を狭める」努力が複雑化し、パスワードの複雑性が高まります。

アイデンティティサービスのインフラストラクチャプロバイダーとしてのLogtoは、ユーザーアカウントのセキュリティを保護するために、上記のベストプラクティスを多く実施しています。ユーザーはアカウントの喪失を心配することなくさまざまなアプリと関わることができ、オンラインサービスプロバイダーはユーザーデータのセキュリティを最小限の努力で確保しながら、彼らのコアビジネス活動に集中することができます。