情報セキュリティに興味があります。私は最近、ハッシュのアイデアを紹介されました。私が現在ハッシュについて理解しているのは、ユーザーが入力したパスワードが必要だということです。次に、一連の変数を使用してすべてをスクランブルして「ハッシュ」をランダムに生成します。次に、このパスワードを入力してログインすると、そのパスワードがハッシュと一致します。わからないことがいくつかあります。
-
なぜこれらのハッシュを解読するのが難しいのですか?彼らが使用している方法を見つけたら、私は推測します。それを暗号化します(シフトオーバーする必要がある数がわかったら、シーザー暗号のような非常に単純な暗号を使用して、本全体で暗号化できます)。時間のようなものを使用して混乱させたとしても、オプションを制限できる非常に大きな方法がいくつかあります(シーザー暗号を使用しましょう)年mod xを使用しているので、現実的には2年の可能性があることをすでに知っているので、パズルの2番目のピースを理解します。
-
ランダムに生成された場合(2つのパスワードが同じであっても、出力が異なります)、どのようにしてそれを判断できますか?正しいですか?
-
どのようにクラックされますか。ハッシュキャットは、パスワードの復号化に成功したことをどのようにして知るのですか?
関連ビデオ(ただし、私の質問に正確に答えることはできません): https://www.youtube.com/watch?v=b4b8ktEV4Bg
コメント
- Q(3 )より具体的には、oclHashcatのようなプログラムは、ほとんどの場合、事前に定義されたリストで数百万のハッシュを試行します。実際には、パスワードを’復号化することはありません(覚えておいてください)。復号化できるのは暗号化(ハッシュ!=暗号化)のみですが、パスワードを試し、結果のハッシュが自分の持っているものと一致する場合は、元のパスワードである必要があります。つまり、’ t復号化すると、1秒間に何百万回も試行錯誤を繰り返して、一致するものが得られるかどうかを確認します。これが、ハッシュが遅い場合にも適している理由です。’ 。
- @Peleusこれは、私が得ていたものとよく似ています。唯一のことは、パスワードをハッシュするときに考えたことです。彼らはそれをランダムにスクランブルします。彼らはどのようにしてパスワードを取得し、同じランダムな動きでそれを再スクランブルしますか。また、同じ入力で別の出力が得られて混乱する場合もあります。
- I ‘あなたが’ “あなたのようにランダムにスクランブルをかけたと思った” ‘ ve今は別の方法で学習しましたが、’は間違いなくそうではありません。ハッシュはランダムではなく、’繰り返し可能ですが、’逆方向に作業することは不可能です’ sすべて。 ‘ cat ‘という単語のSHA256ハッシュは、常に100%同じです。そのため、’パスワードに確実に使用できるのです。ハッシュが毎回新しい値を生成し、以前のハッシュ値としか比較できなかった場合、’パスワードが正しいかどうかはわかりません。 :D
- わかりました。このビデオは私が知りたかったことを正確に説明しています。 youtube.com/watch?v=vgTtHV04xRI
- ハッシュが使用される理由を説明するより良いビデオ。 RSA暗号化について説明している上記のものとは異なり、’ハッシュを逆方向に移動するのが難しい理由。 youtube.com/watch?v=b4b8ktEV4Bg
回答
クイック、因数分解1081。
または、必要に応じて、次のように回答してください:23 x 47は何ですか?
どちらが簡単ですか?積のみが与えられたオペランドを回復するよりも、乗算を実行します(機械的に規則に従うだけです)。乗算。 (ちなみに、これは RSA などの一部の暗号化アルゴリズムの基盤です。)
暗号化ハッシュ関数 の数学的基礎は異なりますが、プロパティは同じです。前方への計算は簡単ですが(xが与えられた場合にH(x)を計算します)、後方への計算は事実上不可能です(yが与えられた場合、H(x)= yとなるようにxを計算します)。関数は、xをすべて試し、一致するものが見つかるまでH(x)を計算するよりも良い方法はないということです。
ハッシュ関数のもう1つの重要な特性は、2つの異なる入力のハッシュが異なることです。 H(x 1 )= H(x 2 )の場合、x 1 = x 2 であると結論付けることができます。 。数学的に言えば、これは不可能です—入力がハッシュの長さよりも長い場合、衝突が発生する必要があります。しかし、優れた暗号化ハッシュ関数を使用すると、世界中のすべてのコンピューティングリソースとの衝突を見つける既知の方法はありません。
暗号化ハッシュ関数については、 ThomasPorninによるこの回答をお読みください。続けて、お待ちください。
ハッシュ関数は暗号化関数ではないことに注意してください。暗号化とは、復号化できることを意味します(キーがわかっている場合)。ハッシュを使用すると、魔法の数字はありません。
推奨される主な暗号化ハッシュ関数は、 SHA-1 と SHA-2 ファミリ(主にSHA-256とSHA-512など、いくつかの出力サイズがあります)。 MD5 は古いものですが、既知の衝突があるため非推奨になりました。結局のところ、それらが本当に優れた暗号化ハッシュ関数であるという数学的な証拠はなく、多くのプロの暗号学者が何年もの間それらを破ろうとして失敗したため、広く信じられているだけです。
わかりました、それ」 ■ストーリーの一部。パスワードハッシュは、直接暗号化ハッシュ関数ではありません。パスワードハッシュ関数(PHF)パスワードとソルトの2つの入力を受け取ります。 salt は、ユーザーがパスワードを選択するとランダムに生成されます。ハッシュされたパスワードPHF(password、salt)と一緒に保存されます(重要なのは、2つの異なるアカウントが常に異なるソルトを持っていることです。十分に大きなソルトをランダムに生成することは、このプロパティを圧倒的な確率で持つための良い方法です。)ユーザーがログに記録するときこの場合も、検証システムはパスワードデータベースからソルトを読み取り、PHF(パスワード、ソルト)を計算して、結果はデータベースに保存されるものです。
要点は、誰かがパスワードを解読したい場合、彼らは「開始する前にハッシュし、各アカウントを個別に攻撃する必要があります。塩は、事前に多くのクラッキング作業を行うことを不可能にします。 レインボーテーブルを生成することによって。
これは(2)と(3)に答えます—正当な検証者と攻撃者は同じことを見つけますパスワード(ユーザーが入力したもの、または攻撃者が推測したもの)が正しいかどうか。話の最後のポイント:優れたパスワードハッシュ関数には追加のプロパティがあり、低速である必要があります。正当なサーバーはログイン試行ごとに1回だけ計算する必要がありますが、攻撃者は推測ごとに1回計算する必要があるため、速度が遅いと攻撃者はさらに傷つきます(攻撃者は通常、より多くの特殊なハードウェアを持っているため、これが必要です)。
パスワードをハッシュする必要がある場合は、独自の方法を考案しないでください。パスワードを使用してください標準的な方法の例: scrypt 、 bcrypt または PBKDF2 。
コメント
- くそーI他のすべてのサイトからセキュリティサイトにアクセスしてください。非常に明確なことの1つは、回答に非常に多くの労力を費やしていることです。正しくだけでなく、非常に徹底的です。2つの回答を選択できればいいのですが、あなたの回答ははるかに似ていました。探していました。
- @ Griffin-両方に賛成票を投じることはできますが、実際には-‘がtを超える場合2つの答え-1つしか受け入れられない場合でも、役に立ったと思うものすべてに賛成票を投じてください。ここでの多くの質問には複数の良い答えがあり、’は、手元のトピックをよりよく理解するために、ほとんどの答えを読むことをお勧めします。はい、時には反対票を投じたものでさえあります。 (どちらの方法でも)投票することで、将来の読者、特に特定のトピックについてまだ学習している読者が回答の有効性を判断するのにも役立ちます。 ;)
- 私は両方に投票しました!それらは非常に役に立ちました。
- +1:すべての答えは良いですが、これはI ‘完璧な答えに近いです。 / div> StackExchangeでこれまでに見たことがあります。できれば+10になります。
- @IlmariKaronenそれが’ここに来るのが好きな理由です。
回答
暗号化ハッシュ関数は、「大きな混合とスクランブリング」として説明できる数学的オブジェクトです。いくつかのビットの」。それらは入力としてビットのシーケンス(おそらく非常に長いもの)を取り、固定サイズの出力を提供します。大まかに言えば、それらは非常に絡み合っているため、それらについての秘密は何もありませんが(それは単なる決定論的コードです)、呼び出される基本的な方法を除いて、誰もそれらを「反転」する方法(特定の出力に一致する入力を見つける)を理解できません「運」:一致するものが見つかるまでランダムな入力を試みます。
科学的に、ハッシュ関数が存在する可能性があるのは、良い質問です。
ハッシュは暗号化ではありません。ハッシュには秘密も鍵もありません。
ハッシュ関数には多くの用途があります。それらの1つは「パスワードストレージ」です。ハッシュ関数はパスワードの保存に適しているように見えます。パスワードを直接保存したくありません(そうしないと、攻撃者がデータベースをときどき覗き見すると、情報が多すぎます。詳細については、このブログ投稿を参照してください)。 ; パスワード検証トークンを保存する必要があります。これは、(ユーザーが提示する)パスワードの検証を可能にするものの、パスワード自体は公開しないものです。つまり、パスワードのハッシュを保存しましょう。パスワードを検証するときは、ハッシュを計算して、保存されている値と一致するかどうかを確認します。ただし、ハッシュ値のみからパスワードを推測するのは難しいためです。ハッシュ関数は「反転」に対して回復力があります(上記を参照)。
パスワードは特別な種類のデータ(人間が覚えることができるデータ)であるため、適切なセキュリティのために「強化」が必要です。ハッシュ関数:
- 非常に遅いハッシュ関数が必要です。
- 1つのハッシュ関数は必要ありません。ただし、多くの個別のハッシュ関数があるため、各パスワードは独自のハッシュ関数でハッシュされます。これは、並行攻撃を阻止することです。単一のハッシュ関数を多くのバリアントに変換するこのプロセスは、塩漬けと呼ばれます。
この回答を参照してくださいハッシュパスワードの主題を徹底的に処理するため。
コメント
- 申し訳ありませんが、あなたの答えは非常に徹底的でよくまとめられていましたが、私は見つけましたもう1つの答えは、私が探していたものに似ています。
回答
ハッシュは一部の関数ですビット文字列(通常は可変長)から別のビット文字列(通常は小さく、固定長)へ。
ハッシュは、データ取得用のデータベース、およびハッシュテーブルと呼ばれるメモリ内データ構造で使用されます。これにより、文字列や多くのフィールドを持つ複雑なオブジェクトなどの任意のデータを2進数に減らして、関連データをフェッチするためのスパース配列へのインデックスとして直接使用できます(ハッシュ処理の詳細を含む)衝突)。
上記の方法で使用されるハッシュ関数は、暗号化ハッシュ関数の「cousins」です。それらは異なる要件に合わせて設計されています。計算が高速で、適切な分散を実現する必要があります。
安全なコンピューティングでは、暗号化ハッシュを使用して、データを代表的な小さなビット文字列にダイジェストします。暗号化関数にはさまざまな要件があります。それらは、元に戻すのが難しいように設計されています(「トラップドア」または「一方向」機能)。それだけでなく、重要な要件は、特定の平文とハッシュ値について、同じハッシュを生成する別の平文を見つけるのが難しいことです。
ハッシュは、パスワードだけでなく、ただし、データの整合性を検証するためのチェックサムとして、およびデジタル署名の実装の一部として。大きなドキュメントにデジタル署名するには、ドキュメントをハッシュして「ダイジェスト」(非常に長いものがハッシュされたときにハッシュ関数の出力に使用される名前)を生成する必要があります。次に、このダイジェストだけが公開鍵暗号システムを通過して署名を生成します。そこに弱点があります。攻撃者が同じダイジェストを持つドキュメントの作成に成功した場合はどうなるでしょうか。次に、本物のドキュメント上に作成された元の署名は、実際には偽造ドキュメントの署名であるように見えます。署名の移植による偽造が効果的に行われています。
パスワードハッシュにより、システムはのプレーンテキストバージョンを保存できません。パスワードでありながら、エントリを取得しようとしているユーザーがそのパスワードを知っているかどうかを確認できます。ハッシュにより、システムはプレーンテキストのパスワードを保存できないようになるだけでなく(非常に注意深く保護する必要があります)、ハッシュが公開されていても、パスワードは安全である可能性があります(公開鍵暗号の場合と同様)。システムは公開鍵を公開することができます)。実際には、ハッシュはパブリックアクセスから保護されています。たとえば、Unixライクなシステム上の/etc/shadow
ファイルは、世界中で読み取り可能な/etc/passwd
ファイルを補完します。 。
ハッシュ関数はランダムではありません。ただし、ランダム化は、パスワードとハッシュの大きな辞書を作成する攻撃者を阻止するために採用されています。これにより、攻撃者はハッシュコードを検索し、対応するパスワードを取得できます。
パスワードをより安全にハッシュするには、簡単に追加できます。それに対するいくつかのランダムなビットは「塩」と呼ばれます。もちろん、同じパスワードに異なるソルトを追加すると、異なるハッシュが発生します(衝突がほとんどまたはまったくないことを願っています)。
ランダムソルトがたとえば32ビット幅の場合、理論的には1つのパスワードが40億を超えるさまざまな方法でハッシュできることを意味し、考えられるすべてのハッシュの事前計算された辞書を持つことは非常に非現実的です。多数のパスワードの。
もちろん、ユーザーが認証されているとき、彼女はこのソルトについて何も知りません。ソルトはハッシュと一緒にユーザーのプロファイルに保存されるため(多くの場合、ハッシュと組み合わせて1つのコンパクトなビット文字列になります)、ユーザーのパスワードエントリが検証されると、ソルトはどのパスワードにも追加されます。彼女が入ったので、ハッシュは正しい塩で実行されます。パスワードが正しければ、使用されているソルトも正しいものであり、ユーザーのプロファイルから取得されているため、ハッシュは一致します。
これにより、ランダム性がパスワードハッシュに組み込まれます。
ハッシュをクラックしにくいのは、「トラップドア」または「一方向」関数から構築されていることです。数学では、そのようなものの例がたくさんあります。たとえば、 、単純な追加はトラップドアです。いくつかの整数を追加して合計を生成すると、合計だけを知っているため、元の数値を復元することはできません。
パスワードハッシュは暗号化されたパスワードではありません。攻撃者がパスワードのハッシュとソルト、そしてたまたまパスワードを推測すると、ログイン認証ソフトウェアが行うのとまったく同じ方法で、これを簡単に確認できます。彼女はハッシュ関数を介してパスワードとソルトを実行し、正しいことを確認します。ハッシュが出現します。
コメント
- 優れた書き込みスキルと非常に簡単y事実上正しい答えを理解するために、すべてのポイントに取り組み、自然な流れを維持することで、より包括的になります。 ‘は簡単なことではありません。回答ありがとうございます!
- 非常に有益です。すべての側面をカバーしました。
回答
ハッシュの鍵の1つは、情報を破棄することです。必要な知識がなくなったため、ハッシュを元に戻すことはできません。実行可能な(しかしかなり価値のない)ハッシュ関数の例をいくつか示します。パスワードを教えていただければ、次のようなことができます。
- 母音の数を数える
- 各文字のASCIIコードを取得し、それらをすべてXORします。
- パスワードのバイナリ表現のCRC32チェックサムを取得します(これは実際には実際のハッシュであり、暗号化されたものではありません)
これらの各インスタンスで、プロセスを元に戻すことはできません。代わりに、後でパスワードを指定したときにプロセスを再実行して、実行した計算が一致するかどうかを確認する必要があります。
For例:最初にパスワード「monkey」を教えてくれた場合、番号3(3母音)を保存する可能性があります。その後、パスワード「dragon」を認証しようとすると、同じチェックを再度実行して2を思い付きます。 3と一致しません。間違ったパスワードを教えてくれたのはわかっています。しかし、あなたが私にパスワード「メリッサ」を与えた場合、私はあなたが正しいパスワードを入力したと誤って思います。これはハッシュです衝突。
適用する一連のルールにより、指定されたパスワードを表すのは、ハッシュ関数です。これらは、元に戻すことができないため、「一方向」関数と見なされます。高品質のハッシュ関数は、潜在的な衝突の数を制限するように設計されているため、その問題について心配する必要はありません。さらに一歩進んで、暗号化ハッシュ関数は、特定の出力に一致する可能性のある文字列を思い付くのを困難にするように設計されています(おそらく意図的に衝突を作成します)。また、ハッシュ出力だけから特定の入力について収集できる情報の量を制限するように設計されています。
したがって、結果として、特定の暗号化ハッシュに一致するパスワードを判断する唯一の方法は、機能するパスワードに遭遇するまで、すべての可能性を試すことです。さらなる対策(ソルト、BPKDF2など)は、パスワードを推測する人が試行ごとにより多くのフープを飛び越えるようにすることで、この推測プロセスをさらに困難にします。
暗号化ハッシュ関数がどのようにそれを作成するかを完全に理解したことに注意してください有効なパスワードを思い付くのは難しい(元のパスワードでなくても)。これは「プリイメージ攻撃 “。上記の簡単な例では、3つの母音を含む候補パスワードとして” melissa “を考え出すことは、そのような攻撃の例です。
暗号化ハッシュ関数は通常、いくつかの”を介して入力を実行することによってこれを行います。特定のプロセスの「ラウンド」。各ラウンドの出力は、次のラウンドへの入力の一部になります。第1ラウンドの入力を把握するには、第2ラウンドの入力を把握する必要があります。これには、第3ラウンドの入力を把握する必要があります。つまり、各コンポーネントの各推測を意味します。長くて複雑な一連の計算で確認する必要があります。ThomasPorninには、この抵抗がどのように機能するかについてのかなりの徹底的な説明があります。理解してください。
回答
-
次の式を満たすzの定数値を決定します:xy ^ 7 + yz ^ 5 + x ^ 3z = 0。助けが必要ですか?OK、x = 32。それでも解決できませんか?その場合、そもそも答えを知らないはずです。
yの値。これにより、これが単一の変数の方程式になり、その単一の変数を解くのは6年生にとって簡単です(おそらく計算機が必要)は、信頼できる人とだけ共有している秘密です。それがなければ、zは何でもかまいません。その値は、yに依存するため、定数である既知のyがないと十分に解けません。」 yの値を知っている、それは私があなたにそれを個人的に与えるのに十分なほどあなたを信頼していないからです。
これは暗号化の基本原則です;数式または他の決定論的プロセスはうまくいきます-文書化されており、数式の1つ以上の可能な変数を公開することも許可されているため、2つの当事者は、お互いが暗号化するものを復号化できるように暗号を設定する方法について合意できます。ただし、2つの変数秘密を守ってください;一方を知っていれば、もう一方を発見できます。知っておくべきものが鍵であり、あなたがキーで発見できるのはメッセージです。
ハッシュの場合、少し異なります。ハッシュは、別の秘密を保持するために1つの秘密を保持する必要はありません。代わりに、ハッシュは不可逆的な数学的変換に基づいて機能します。H(x)= yの場合、既知のH -1 supはありません。 >(y)= xただし、yが得られるまですべての可能なxに対してH(x)を試行します。通常、これは、方程式のいくつかの中間結果があいまいであるためです。たとえば、正の数の平方根を計算すると、技術的に両方が生成されます。どちらの数値もそれ自体で乗算して結果を生成できるため、正と負の結果。係数の逆数も同様にあいまいです。xmod3によって生成される数値1は、任意のx = 3k +1によって生成される可能性があります。これらのタイプの「一方向」変換は、逆ハッシュ関数を計算しようとすると無限の可能性が生じるように組み合わされます。したがって、それらを解決するためのより簡単な(最も簡単な)方法は、1つの出力が一致するまですべての可能な入力を単純に試すことです。それでも長い時間がかかります。
-
ハッシュはランダムではありません。前に述べたように、ハッシュは不可逆的な数学演算の結果です。その操作は依然として決定論的でなければなりません。一定の入力が与えられると、操作を実行する回数に関係なく、出力は一定になります。ランダムな要素はありません。
混乱しているかもしれないのは、ハッシュがシミュレートするもの、つまりランダムオラクルです。写真の記憶と完全に乱数を生成する神秘的な方法を持った小さな男がいる黒い箱を想像してみてください。あなたは一枚の紙に何かを書き留め、それを男がそれを手に入れるスロットに押し込みます。彼はそれを読み、2つのことのうちの1つが起こります。彼は以前にそれを読んだことがないか、その場合、彼は新しい乱数を生成してあなたに渡し、あなたのメッセージと番号の両方を彼の記憶にコミットします。または、彼はこれを正確に読んだことがあります 前のメッセージ。その場合、彼は最初にそれを読んだときに生成した数を覚えており、あなたにその数を与えます。乱数ジェネレーターは、すでに生成した数を生成することは決してなく、無限の可能性のある大きさを持ち、小さな男です。メモリは無制限で間違いありません。したがって、小さな男は、以前にメッセージを読んだことがない場合は、以前にメッセージを読んだとは決して思わないでしょう。したがって、まったく同じメッセージに対して2つの異なる番号を生成することは決してありません。 2つの異なるメッセージの数。
これはハッシュ関数がシミュレートしようとするものです。無限のストレージスペースと無制限のユニバーサル可用性が必要になるため、写真メモリを使用してこの小さな男をモデル化することはできません。他の方法で他のデバイスに接続されていないデバイス。代わりに、メッセージをハッシュ値に「ダイジェスト」する、決定論的であるがランダムに見える計算に依存します。同じハッシュ関数、同じメッセージが与えられると、同じダイジェストが生成されますが、これらの関数は、返すことができるハッシュ値の数に制限があります。これにより、ハッシュコリジョンと呼ばれる可能性が生じます。ハッシュ値よりもメッセージの可能性が高いため、遅かれ早かれ(うまくいけば後で)、2人の異なる私ssagesは同じハッシュを生成します。
-
ハッシュは、3つの基本的な理由でクラックされる可能性があります。まず、それらはメッセージの決定論的で数学的な派生物であるため、数学者(したがって攻撃者)は最終的にメッセージとそのハッシュの間、または2つのメッセージとその結果のハッシュの間の数学的な関係を見つけます。かつてはランダムに見えていたものは、もはやそうではありません。これにより、見つかった弱点の性質に基づいて、多数の攻撃が可能になります。メッセージとそのハッシュが与えられたときに、衝突するメッセージを生成するアルゴリズム的な方法がある場合、それは問題です。メッセージを操作して結果のハッシュを予測する方法がある場合、それは別の問題です。実際にハッシュを逆にする方法があり、ハッシュからメッセージを生成し、再ハッシュすると同じハッシュを生成する場合、それは「深刻な問題」です。
次に、ハッシュのダイジェストサイズには制限があるため、遅かれ早かれ、2つのメッセージが同じハッシュを生成します。つまり、攻撃者は、特定のハッシュを生成するために使用するメッセージを 見つける必要がありません。 ;彼がしなければならないのは、同じハッシュを生成する a メッセージを見つけることだけです。これの確率は低く、理論的には、可能なハッシュがいくつあっても1つのチャンスですが、それでも無限のハッシュよりも優れています。
最後に、考えられるメッセージはたくさんありますが、はるかに小さいものがあります。 可能性のあるメッセージの数。通常、ハッシュ関数に提供するメッセージは、(言語、主題、電子フォーマット、目的に基づいて)何らかの構造を持っています。つまり、メッセージの一部が与えられると、メッセージの他の部分をより正確に推測できます。つまり、情報科学の用語では、ハッシュに変換されるメッセージは、ハッシュ関数自体よりもエントロピーが低いことがよくあります。簡単に言えば、256ビットのダイジェストを生成するハッシュ関数は、理論的にはそれらのビットの任意の順列2 ^ 256を生成できます。ただし、たとえば、攻撃が調査されているシステムによってこのハッシュ関数に入力される可能性のあるメッセージが10,000しかない場合、2 ^ 256の可能なハッシュ値のうち10,000のみが表示され、さらに重要なことに、最悪の場合、攻撃者は10,000の可能な入力すべてを試して、探しているハッシュ値を生成する入力を見つけるだけで済みます。
コメント
- そしてこれが… ITセキュリティが大好きな理由です’スタック交換サイトのこと
- またあなたの説明#1のはまさに私が必要としていたものです。しかし、私には質問があります。 “ハッシュ”は、特定のもの(この場合はパスワード)の番号バージョンのようなもののようです。だから私がウェブサイトを持っていて、100000人がサインアップした場合。次に、50%がパスワードを使用します” password ”
パスワード”パスワードの代わりに何度も?
- ‘安全なハッシュ(> = 256ビットのダイジェストサイズ)を使用してから、”パスワード”はストレージサイズを増やします。さらに、攻撃者がユーザーアカウントの50%が同じパスワードハッシュを持っていることを確認した場合、攻撃者は’すべてのユーザーが’ dは、1つのパスワードを解読するだけで、ユーザーアカウントの50%にアクセスできます。パスワードハッシュを”塩漬け”する必要があります。さまざまな方法がありますが、最終的には、同じアルゴリズムでハッシュされた同じパスワードが、アカウントごとに一意のソルト値が追加されるため、異なるダイジェストを生成します。