数年前、大文字、小文字、記号、数字で構成される 8 文字のランダムなパスワードを解読するのは非常に困難でした。場合によっては、そのようなパスワードを解読するのに何年もかかりました。
今日のテクノロジーの変化とレンタル可能な機械のおかげで、この時間は数時間に短縮されました。しかし、そもそもこれらのパスワードはどのように保存されるのでしょうか?
その日のメイクアップビデオ スクロールしてコンテンツを続けてください
パスワードをオンラインで保存する方法
システムがパスワードを保管しているデータベースは攻撃者に乗っ取られる可能性があるため、システムはユーザーのパスワードをファイルやデータベースに直接保存しません。代わりに、システムはユーザーのパスワードを暗号化し、攻撃者は各パスワードの暗号化されたバージョンに遭遇します。
システムがパスワードを暗号化するために使用するアルゴリズムがいくつかあります。これらのアルゴリズムの 1 つは対称アルゴリズムです。 対称アルゴリズムは暗号化の一種です 暗号化と復号化の両方に同じキーを使用できます。データの暗号化に使用するキーは、暗号化と復号化の両方で同じです。対称アルゴリズムのセキュリティには、復号化用のキーが 1 つしかないため、ある程度のリスクが伴います。このため、システムは通常、パスワード暗号化に対称アルゴリズムを使用しません。
一般に、システムが暗号化に使用する方法はハッシュ アルゴリズムです。ハッシュ アルゴリズムは、データの整合性を検証して表すためのものであり、データを暗号化するためのものではありません。ハッシュ アルゴリズムは、データを固定サイズのハッシュに変換します。これらのハッシュは通常、データの一意のハッシュを表します。
ハッシュ アルゴリズムのおかげで、攻撃者がパスワード データベースを乗っ取った場合、攻撃者はここから逆方向にパスワードにアクセスすることはできません。ここで注意すべき非常に重要なニュアンスがあります。理論的には、すべてのパスワードの組み合わせに同じハッシュ アルゴリズムを使用するシステムを侵害した攻撃者は、得られた結果を比較することができます。これらの比較の結果、攻撃者が同じ値を生成した場合、攻撃者はパスワードの公開バージョンを発見したことになります。この方法は試行錯誤がすべてであり、この攻撃形式は次のとおりです。 一般にブルートフォース攻撃と呼ばれる 。
2000 年代初頭、一般的なハッシュ アルゴリズムで暗号化された 8 文字のパスワードのすべての組み合わせを試すには数百年かかることがありました。もちろん、このセットには「123456」や「mypassword」などの非常に単純な組み合わせは含まれていません。今日のソフトウェアおよびハードウェア技術の発展に伴い、パスワードを解読する方法も大きく変化しました。
新興 GPU の影響
グラフィックス プロセッサ (GPU) の並列データ処理機能は、時間の経過とともに向上してきました。 GPU は、汎用 CPU のような多用途の演算を実行することはできません。したがって、非常に多くのコアと並列処理能力があるにもかかわらず、CPU のようなほぼすべての問題にそれらを使用することは意味がありません。
それでも、パスワードに使用される一部のハッシュ アルゴリズムを GPU 上で非常に効率的に実行することが可能です。従来の CPU で達成できる 1 秒あたりの計算可能なハッシュは、新しい GPU プラットフォームによって大幅に増加しました。
アイデアを得るには、以下の表で NTLM、MD5、SHA1 などのハッシュ アルゴリズムの 1 秒あたりのハッシュ数を調べてください。現時点では、これらのアルゴリズムが単なるハッシュ アルゴリズムであることを知っていれば十分です。このテーブルを作成するために、25 個の AMD Radeon GPU で構成されるクラスター システムを使用しました。
アルゴリズム 無料で音楽をダウンロードする場所 | 1 秒あたりのハッシュ数 |
NTLM | 350,000,000,000 |
MD5 | 180,000,000,000 |
SHA1 | 630億 |
SHA512クリプト | 364,000 |
Bcrypt | 71,000 |
脚本 | 33,000 |
ご覧のとおり、このようなシステムを使用すると、NTLM ハッシュを 1 秒あたり 3,500 億回生成できます。つまり、8 文字のパスワードのすべての組み合わせを 6 時間以内に試すことができます。さらに、この例のハードウェアは数年前のものです。今日のパスワード解読能力を想像してみてください。
ソフトウェア開発者は何をすべきでしょうか?
プログラマが取るべき道は非常にシンプルです。パスワードを暗号化する際には、ハッシュ値の計算に時間がかかるアルゴリズムを優先する必要があります。開発者は、CPU 上で使用しているアルゴリズムのパフォーマンスだけでなく、GPU の世界に対するアルゴリズムの回復力についても学ぶ必要があります。
開発者が Django、Ruby on Rails、Spring Security などのパスワード暗号化プロセスにも対応するソフトウェア フレームワークを使用している場合は、セキュリティの観点からフレームワーク内で正しい決定が行われているかどうかを確認する必要があります。
例えば、 工夫する は、Ruby on Rails でのユーザー操作に最もよく使用されるライブラリの 1 つで、デフォルトのハッシュ アルゴリズムとして Bcrypt を使用します。また、別のメソッドをハッシュ アルゴリズムとして使用することもできます。 Bcrypt アルゴリズムは、GPU が壊れるまでに依然として非常に長い時間がかかるため、信頼性があります。
要約すると、ハッシュ値の計算に時間がかかるほど、安全性は高まります。
パスワードは何文字必要ですか?
余分な文字を使用するたびに、パスワードを解読してパスワードの安全性を高めるために必要な試行錯誤の回数が幾何級数的に増加します。
この状況を 2 つの異なるシナリオを通して考えてみましょう。 NTLM ハッシュ アルゴリズムに関する上記の表の値を考慮し、パスワードを解読しようとすると想像してください。 8 文字以上のパスワードをターゲットにすることを想像してください。
文字数 | 大文字/小文字と数字 | 大文字/小文字、数字、特殊記号 |
8 | 1分未満 | 2分 |
9 記事の日付を見つける方法 | 2分 | 2時間 |
10 | 2時間 | 1週間 |
十一 | 6日間 | 2年 |
12 | 1年 | 200年 |
13 | 100年以上 | 1000年以上 |
表を調べると、大文字/小文字、数字、特殊記号をすべて組み合わせて使用する場合、少なくとも 12 文字のパスワードを使用すると安全であることがわかります。特殊記号を使用していない場合は、安全なパスワードの長さとして 13 文字を使用する必要があることがわかります。このシステムで NTLM ハッシュの代わりに Bcrypt ハッシュ方式を使用した場合は、8 文字で十分です。ただし、Web 経由で入力したシステムがどのハッシュ方式でパスワードを保持しているかを知る機会はありません。だからこそ、あらゆる可能性を考慮する必要があります。
ソフトウェア開発者にとっての主な問題は、ユーザーに最低 12 文字のパスワードを設定するよう説得するのがほぼ不可能であることです。現在では、この長さのパスワードの使用率は低いと言えます。したがって、開発したシステムの利用シーンに応じて、ユーザーに受け入れられる妥協点を見つける必要があります。 パスワードのセキュリティを向上させるため 。
開発者への最後の提案は、ユーザーに提示したフォームからの入力の最小長だけでなく最大長もチェックすることです。特に、セキュリティ目的で Bcrypt などの計算に時間がかかるハッシュ アルゴリズムの使用を有効にしている場合、ユーザーが入力するパスワードの最大長を制御しないと、何らかのリスクが発生する可能性があります。たとえば、攻撃者は、特別に用意されたリクエストを使用して、10 万文字のパスワードを数十個同時に試行することで攻撃を実行できます。このような場合、システムが他のユーザーに応答しなくなる可能性が高くなります。
エンドユーザーへのアドバイス
パスワードの長さは 12 文字以上にし、大文字と小文字の組み合わせ、数字、記号を必ず含めてください。パスワードを保存するシステムはハッキングされ、情報が悪用される可能性があることを決して忘れないでください。システムがパスワードの暗号化にどのアルゴリズムを使用しているかを知ることはできないため、予防策を講じて強力なパスワードを作成するかどうかは完全にユーザー次第です。