web-dev-qa-db-ja.com

Bcryptはハッシュアルゴリズムですか、それとも私の研究資料は間違っていますか?

私は現在、Comptia Security +試験の勉強をしており、オンラインの模擬試験で次の質問を受けました。


または、テキストとして表されます:

▶ Which of the following are hashing algorithms? (Select all that apply)
----------------------------------
???? ✔️ ☑️  MD5 (☑️ Your answer)
???? ✔️ ☑️  RIPEMD (☑️ Your answer)
???? ☐ ➖  Bcrypt (❌ Your answer)
???? ✔️ ☑️  HMAC (☑️ Your answer)
???? ✔️ ☑️  SHA (☑️ Your answer)
----------------------------------
➖ Your answer to this question is incorrect or incomplete.

ハッシュアルゴリズムとしてBcryptを含めるのは間違っていましたか?

62
treefidy

それは良い質問ではありません。 bcryptを「ハッシュアルゴリズム」と呼ぶのは間違いではありませんが、bcryptはHMACではなくbcryptであることが不思議ではありますが、他のものと質的に異なることは間違いありません。それらを3つのカテゴリにグループ化できます。

  • bcryptpasswordハッシュであることが意図されており、パスワードベースの鍵導出としても知られています。関数、その目的は計算に費用がかかるであるため、攻撃者が入力を推測するために平均して多くの試行を行わなくても、testing推測するのに高いコストがかかります。その他の例には、PBKDF2、scrypt、およびArgon2、およびBalloonハッシュが含まれます。

  • MD5、RIPEMD、およびSHAcollision-resistantハッシュを意味し、その目的は難しくすることです同じハッシュを持つ異なるメッセージを見つけるため。偶然にも、MD5、RIPEMD、SHA-0、およびSHA-1(SHA-2またはSHA-3ではありません)はすべて壊れています。衝突はすべて報告されています。それらはpreimage-resistantとなるように設計されているため、規定のハッシュを持つメッセージを見つけるのは困難であり、second-preimage-resistantであるため、規定のメッセージと同じハッシュを持つ2番目のメッセージを見つけるのが難しい。それらのどれも、これらのプロパティが壊れていませんでした。 MD5、RIPEMD、SHA-0/SHA-1とは異なり、今日に至るまで他の例として、BLAKE2bやSHAKE128などがあります。

  • [〜#〜] hmac [〜#〜]は、構築するための手法です擬似ランダム関数ファミリ(PRF)またはメッセージ認証コード(MAC) SHA-256のような特定のハッシュ関数から。 HMACは大まかに「キー付きハッシュ」と呼ばれますが、MACとしての偽造不可、またはPRFとしての疑似ランダム性など、セキュリティの目的が明確にされていません。キーがランダムに均一に選択されている場合、攻撃者はキーがメッセージのMACを推測できないこと、およびメッセージのハッシュを均一なランダムビット文字列と区別できないことを知らない。

暗号で「ハッシュ」という言葉だけが、入力またはスクランブルされた出力をスクランブルする関数を意味します。他の種類のハッシュ関数があります:ハッシュテーブルで時々使用されるFNV-1文字列ハッシュ関数。衝突確率の範囲が保証されたPoly1305のようなユニバーサルハッシュファミリー。高度なセキュリティを備えた非常に安価なメッセージ認証コードを作成するために使用される場合があります。 HKDFのような鍵導出関数。Diffie–Hellman共有シークレットのような高エントロピーで非均一なビット文字列を均一なランダムビット文字列に変換するために使用されます。 etc.これらの「ハッシュ」を呼び出すことは間違いありませんが、collision-のようなより具体的な用語を使用すると役立つ場合があります耐性ハッシュまたは疑似ランダム関数ファミリまたはユニバーサルハッシュファミリ

85

不思議なことに、それらのtwoは他のものとは異なりますが、明らかに、そのうちの1つだけを間違っているとマークしました。

上記のすべてのオプションは、間違いなくハッシュ関数です。すべての入力メッセージを受け取り、「ダイジェスト」または「ハッシュ」を生成します。これは、入力では決定論的であるが、可逆的ではない、高エントロピービットの固定長のセットです。ただし、入力と使用方法には違いがあります。

MD5、RIPEMD、およびSHA(現在は通常SHA1と呼ばれます)は、すべて同じ機能のクラスであり、1つの入力(任意のメッセージ)を受け取り、そのメッセージのダイジェスト(これは、は、少なくとも理論的には、衝突とプリイメージ耐性を備えています。それらの特定の特性(ダイジェストの長さなどの機械的に、実際にはセキュリティなど)はさまざまですが、高いレベルでは互換性があります。

Bcryptは、saltとコスト/作業係数の2つの追加パラメーターを取ります。さらに、これは短い文字列(パスワードなど)のみをハッシュすることを目的としており、入力の長さを72バイトに制限します。標準のハッシュ関数のような出力を生成しますが、(おそらくはるかに)遅くなります。

HMACは、外部で定義されたハッシュ関数を必要とする構成です。関数として、HMACは使用するメッセージ、ソルト、およびハッシュ関数の入力を必要とします。 bcryptとは異なり、入力メッセージに制約を導入しません-このように、他の3つに似ていますが、他の4つすべてとは異なり、ダイジェストを計算するためのアルゴリズムを実際には指定せず、その操作を指定されたハッシュ関数。

要約すると、次の答えのいずれかについて主張することができます。

  • 5つすべてがハッシュ関数です。メッセージを受け取り、一方向、固定長、確定的、高エントロピーのダイジェストを生成するためです。
  • Bcryptは、任意の長さのメッセージを操作できないため、ハッシュ関数ではない唯一のものです。
  • HMACは、ダイジェストを計算するための手順を定義していないため、ハッシュ関数ではない唯一のものです。
  • MD5、RIPEMD、およびSHAのみがtrueハッシュ関数です。

明らかに、あなたの学習資料は2番目の見方をしています。個人的には、3番目または4番目のビューに傾いています。 HMAC-SHA-256はハッシュ関数(キーを要求することで「純粋な」ものとは異なります)ですが、HMAC自体はハッシュ関数ではありません。 「小麦粉、塩、水、トルティーヤの作り方を知っている人を手に入れ、小麦粉、水、塩を人に与え、人にトルティーヤを作るように言う」というのはトルティーヤのレシピです。

35
CBHacking

トピックの理解をテストするために言葉遣いのニュアンスを利用しようとするが、実用的な意味での本当の意味を持たない、理想的ではない多くの「認定」質問を見つけることができます。現実世界の現実のポイントを正当に論じることができるかもしれませんが、認定テストが何を評価しようとしているかに直面しても、それは実際には問題ではありません。

私のネットワークのバックグラウンドから来て、「上品な」ネットワークに関する多くの例を簡単に見つけることができました。これは、認証の質問が一般に Network Engineering スタックでトピックから外れている理由の一部です。 Test Xは、10.250.0.0/255.255.0.0が有効なネットワークではないことを示しているため、答え-「クラスA "ネットワークは255.0.0.0のマスクを持っています)今日の世界でネットワークを実行することに本当に何の影響もありません。

また、よくある答えが「ハッシュ関数」にこだわっている理由もわかりません。 certificationの質問では、「ハッシュアルゴリズムは次のうちどれですか?」 (私の強調)。ハッシュ関数については触れられていません。

したがって、提供された5つのうち4つは、独自のハッシュ関数が組み込まれているかどうかにかかわらず、それ自体がアルゴリズムと見なすことができます。一方、bcrypt(関数の場合)は、blowfishに基づくアルゴリズムを使用しており、それ自体はアルゴリズムではありません。

ばかげた違いかもしれませんが、繰り返しになりますがこれは認定の質問です

5
YLearn

ウィキペディアから:

bcryptは、Blowfish暗号に基づいてNiels ProvosとDavidMazièresが設計したパスワードハッシュ関数で、1999年にUSENIXで発表されました。

注:パスワードハッシュアルゴリズムは衝突に強い必要はありません。 Thomasの回答 を参照してください。これが、暗号化ハッシュアルゴリズムとの違いです。

1
kelalaka