この質問 に現在トップ投票されている:
セキュリティ関連ではありませんが、セキュリティ上の問題ではない別の問題は完全であり、パスワードのハッシュ化と暗号化の違いをgrok。プログラマが安全でない「パスワードを思い出させる」機能を提供しようとしているコードで最もよく見られます。
この違いは何ですか?私はいつも、ハッシュは暗号化の一種であるという印象を受けていました。ポスターが参照している安全でない機能とは何ですか?
ハッシュは一方向の機能です(まあ、マッピング)。元に戻すことはできません。セキュアハッシュアルゴリズムを適用すると、元の文字列を取得できません。できることは、「衝突」と呼ばれるものを生成することです。つまり、同じハッシュを提供する別の文字列を見つけることです。暗号的に安全なハッシュアルゴリズムは、衝突の発生を防ぐように設計されています。 Rainbow table を使用して安全なハッシュを攻撃できます。これは、保存する前にハッシュに salt を適用することで対処できます。
暗号化は適切な(双方向の)機能です。元に戻すことができます。キーがあれば、マングルされた文字列を解読して元の文字列を取得できます。
それが参照している安全でない機能は、パスワードを暗号化すると、アプリケーションにキーがどこかに保存され、データベース(および/またはコード)にアクセスする攻撃者がキーと暗号化されたテキストの両方を取得することで元のパスワードを取得できることです、ハッシュでは不可能です。
人々は通常、クラッカーがデータベースまたはコードを所有している場合、パスワードを必要としないので、違いは意味がないと言います。ユーザーのパスワードを保護する義務があるため、これはナイーブです。主に、ほとんどのユーザーは同じパスワードを何度も繰り返し使用するため、パスワードを漏らすことでより大きなリスクにさらされます。
ハッシュは一方向の機能です。つまり、パスワードをハッシュすると、ハッシュから元のパスワードを取得することはvery難しくなります。暗号化は双方向の機能であり、暗号化されたテキストから元のテキストを取得する方がはるかに簡単です。
プレーンハッシュは、辞書攻撃を使用すると簡単に無効になります。攻撃者は、辞書内のすべてのWord(または特定の長さまでの文字のすべての組み合わせ)を事前にハッシュし、この新しい辞書を使用してハッシュされたパスワードを検索します。格納されたハッシュ化されたパスワードごとに一意のランダムソルトを使用すると、攻撃者がこの方法を使用するのがはるかに難しくなります。基本的に、使用するすべてのソルト値に対して新しい一意の辞書を作成する必要があり、攻撃が大幅に遅くなります。
暗号化アルゴリズムを使用してパスワードを保存することは安全ではありません。ユーザーまたは管理者が暗号化されたテキストから元のパスワードを取得する方が簡単である場合、攻撃者も同じことをするのが簡単だからです。
上の画像に示すように、パスワードが暗号化されている場合、パスワードは常に隠された秘密であり、だれかがプレーンテキストパスワードを抽出できます。ただし、パスワードがハッシュされると、ハッシュ値からパスワードを回復する方法がほとんどないため、リラックスできます。
暗号化されたパスワードとハッシュされたパスワード-どちらが良いですか?
プレーンテキストパスワードは、DES、AESなどの対称暗号化アルゴリズムを使用して、または他のアルゴリズムで暗号化して、データベース内に保存できます。認証(ユーザー名とパスワードでIDを確認)で、アプリケーションはデータベースに保存されている暗号化されたパスワードを解読し、ユーザーが提供したパスワードと同等かどうかを比較します。このタイプのパスワード処理アプローチでは、誰かがデータベーステーブルにアクセスしても、パスワードは単純に再利用できません。ただし、このアプローチにも悪いニュースがあります。アプリケーションで使用されているキーと一緒に暗号化アルゴリズムを入手した場合、データベースに保存されているすべてのユーザーパスワードを復号化して表示できます。 「これは私が得た最良のオプションです」、ソフトウェア開発者は悲鳴を上げるかもしれませんが、より良い方法はありますか?
はい、あなたはここでポイントを見逃しているかもしれません。解読して比較する必要がないことに気づきましたか?パスワードを変換されたWordに変換できる一方向のみの変換アプローチがある場合、逆の操作(変換されたWordからのパスワードの生成)は不可能です。誰かがデータベースにアクセスできたとしても、変換された単語を使用してパスワードを再現または抽出する方法はありません。このアプローチでは、ユーザーの極秘パスワードを知ることができる人はほとんどいません。これにより、複数のアプリケーションで同じパスワードを使用するユーザーが保護されます。このアプローチにどのアルゴリズムを使用できますか?
暗号化は両方の方法で変換でき、最終値が元の値に戻すことができ、ハッシュを使用すると最終結果から元の値に戻すことができないと常に考えていました。
ハッシュアルゴリズムは通常、本質的に暗号化されますが、主な違いは、暗号化は復号化によって可逆的であり、ハッシュ化はそうではないことです。
暗号化機能は通常、入力を受け取り、同じサイズまたはわずかに大きいサイズの暗号化された出力を生成します。
ハッシュ関数は入力を受け取り、通常は固定サイズの通常より小さな出力を生成します。
ハッシュ化された結果を取得して「デハッシュ」して元の入力を取得することはできませんが、通常は同じハッシュを生成するものにブルートフォースすることができます。
言い換えると、認証スキームがパスワードを取得してハッシュし、それを必要なパスワードのハッシュ化されたバージョンと比較する場合、元のパスワード、そのハッシュのみを実際に知っている必要はなく、ブルートフォースを実行できます別のパスワードであっても、一致するものへの道。
ハッシュ関数は通常、衝突の可能性を最小限に抑え、他の何かと同じハッシュを生成するものを計算するのを難しくするために作成されます。
ハッシュ:
これは一方向のアルゴリズムであり、一度ハッシュ化するとロールバックできません。これは暗号化に対するスイートポイントです。
暗号化
暗号化を実行する場合、これを行うキーがあります。このキーが漏洩すると、すべてのパスワードが簡単に解読される可能性があります。
一方、データベースがハッキングされたり、サーバー管理者がDBからデータを取得し、ハッシュ化されたパスワードを使用したとしても、ハッカーはこれらのハッシュ化されたパスワードを破ることはできません。適切なソルトでハッシュを使用し、PBKDF2で追加のセキュリティを使用する場合、これは実際には不可能です。
ハッシュ関数の書き方を調べたい場合は、 here にアクセスしてください。
ハッシュを実行する多くのアルゴリズムがあります。
MD5-Message Digest Algorithm 5(MD5)ハッシュ関数を使用します。出力ハッシュの長さは128ビットです。 MD5アルゴリズムは、1990年代初頭にRon Rivestによって設計されたものであり、現在の推奨オプションではありません。
SHA1-1995年に公開されたセキュリティハッシュアルゴリズム(SHA1)ハッシュを使用します。出力ハッシュの長さは160ビットです。最も広く使用されていますが、これは現在好ましいオプションではありません。
HMACSHA256、HMACSHA384、HMACSHA512 -SHA-2ファミリーの関数SHA-256、SHA-384、およびSHA-512を使用します。 SHA-2は2001年に公開されました。ハッシュ関数の名前が示すように、出力ハッシュの長さはそれぞれ256、384、および512ビットです。
理想的には両方を行う必要があります。
まず、一方向セキュリティのパスパスワードをハッシュします。セキュリティを強化するためにソルトを使用します。
パスワードハッシュのデータベースが危険にさらされた場合、辞書攻撃から守るためにハッシュを暗号化します。
他の答えと同じように、引用があった文脈では、ハッシュは情報を保護するために使用されるツールであり、暗号化は情報を取得し、権限のない人が読み取り/使用するのを非常に困難にするプロセスです。