パスワード暗号化方式には、1. プレーン テキストで保存、2. 対称暗号化アルゴリズムで保存、3. MD5 や SHA1 などの一方向 HASH アルゴリズム、4. PBKDF2 アルゴリズム、5. bcrypt などのアルゴリズムが含まれます。そして暗号。
#ユーザー パスワードの暗号化方法
ユーザー パスワードを保存する場合の一般的な暗号化方法は何ですか?データベース? ?パスワードを保存する一般的な方法は次のとおりです:
1. プレーン テキストで保存します
たとえば、ユーザーが設定したパスワードが「123456」の場合、「123456」はこれはデータベースに直接保存する最も簡単な方法ですが、最も安全でない方法でもあります。しかし実際には、多くのインターネット企業がこのアプローチを採用している可能性があります。
2. 保存する対称暗号化アルゴリズム
例: 3DES、AES、その他のアルゴリズム。この暗号化方法を使用すると、復号化によって元のパスワードを復元できます。もちろん、前提条件は、パスワードキー。しかし、大量のユーザー情報が漏洩しているため、鍵も漏洩する可能性が高く、一般的なデータと鍵を分けて保管・管理することはもちろん可能ですが、鍵を完全に保護することは非常に複雑であるため、これは良い意味ではありません。
3. MD5 や SHA1 などの一方向 HASH アルゴリズム
これらのアルゴリズムを使用すると、計算によって元のパスワードを復元することができず、実装が比較的簡単であるため、多くのインターネット企業が使用しています。ユーザーのパスワードを保存するこの方法は以前は比較的安全な方法でしたが、レインボー テーブル テクノロジーの台頭により、テーブル検索やクラッキング用にレインボー テーブルが作成される可能性があり、現在ではこの方法は非常に安全ではありません。
実際、同社は以前にもこの MD5 暗号化方式を使用していました。
4. PBKDF2 アルゴリズム
このアルゴリズムの原理は、HASH アルゴリズムにランダム ソルトを追加し、複数の HASH 操作を実行することとほぼ同じです。ランダム ソルトにより、レインボー テーブルの作成が大幅に困難になります。複数の HASH により、テーブルの作成とクラッキングの難易度も大幅に増加します。
PBKDF2 アルゴリズムを使用する場合、HASH は通常 sha1 または sha256 を使用します。ランダム ソルトの長さは通常 8 バイト以上である必要があり、HASH の数は少なくとも 1,000 回である必要があります。セキュリティは十分に高いです。パスワード検証プロセスでは 1000 回の HASH 操作が実行され、サーバーにとっては 1 ミリ秒しかかからないかもしれませんが、クラッカーにとっては計算コストが 1000 倍に増加し、少なくとも 8 バイトのランダム ソルトによりテーブル作成の難易度が N 倍増加します。このアルゴリズムは、米国国立標準技術研究所によっても推奨されています。
5. bcrypt や scrypt などのアルゴリズム
これら 2 つのアルゴリズムは、レインボー テーブルにも効果的に抵抗できます。これら 2 つのアルゴリズムを使用する場合は、対応するパラメーターも指定する必要があるため、クラックがより困難になります。 。
暗号化において、scrypt (「エス クリプト」と発音) は、2009 年に Colin Percival によって発明された鍵導出関数です。元々は、彼が設立した Tarsnap サービスで使用するために設計されました。カスタム ハードウェアに対する大規模な攻撃を念頭に置いて設計されており、大量のメモリを必要とするように意図的に設計されています。
Scrypt は計算に時間がかかるだけでなく、多くのメモリを消費するため、複数のダイジェストを並行して計算することが非常に困難になるため、レインボー テーブルを使用してブルート フォースを実行することはより困難になります。攻撃します。 Scrypt は運用環境では広く使用されておらず、慎重な精査や広範なライブラリのサポートが不足しています。ただし、アルゴリズム レベルで欠陥がない限り、Scrypt は PBKDF2 や bcrypt よりも安全であるはずです。
概要
PBKDF2、bcrypt、scrypt、およびその他のアルゴリズムを使用すると、レインボー テーブル攻撃に効果的に抵抗できます。データが漏洩した場合でも、最も重要な「ユーザー パスワード」を効果的に保護できます。ハッカーは、ユーザーのパスワードを大量にクラックして、資格情報スタッフィングやアカウント スキャンの根本原因を遮断することはできません。
以上がパスワードの暗号化にはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。