4

SHA-3は既知の関数 (NIST ハッシュ関数コンペティションのファイナリストとしての Keccak) であるように思われるため、このトピックに関連するいくつかの質問があります。

  1. NIST のサイトによると、NIST は政府の資金提供の失効により閉鎖されています。SHA-3 が最終的に受け入れられる可能性はありますか?
  2. BouncyCastleライブラリには SHA-3 の実装があり、ダイジェスト結果はウィキペディアの記事に投稿された例と同じです(私はこれをテストしました)。最終的な規格が承認されていないので、これは信頼できますか? ウィキペディアは、これは変更される可能性が高いと述べていますが、最終的なアルゴリズムは変更の対象ではないように思われるため、どのように変更できますか (または、別のアルゴリズムになる可能性があります)。
  3. ここで誰かが、キーの強化とパスワードのハッシュのために SHA-3 で PBKDF2 を使用することは避けるべきであると指摘しました。しかし、私はなぜ理解できないのですか?(アルゴリズムが高速でない場合、攻撃者にどのように有利になるでしょうか?)
  4. BouncyCastle Java api に基づく scala での PBKDF2 -HMAC-SHA3実装をテストするためのテスト ベクトルがどこにも見つかりませんでした。テスト仕様をいくつかの結果とともに投稿できます。しかし、最初に誰でも/仕様のテスト ベクトルを投稿できますか?

これがscalaでの私の実装です:

package my.crypto

import org.bouncycastle.crypto.digests.SHA3Digest
import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator
import org.bouncycastle.crypto.PBEParametersGenerator
import org.bouncycastle.crypto.params.KeyParameter

object PBKDF2WithHmacSHA3 {

  def apply(password: String, salt: Array[Byte], iterations: Int = 65536, keyLen: Int = 256): Array[Byte] = {
    val generator = new PKCS5S2ParametersGenerator(new SHA3Digest(256))
    generator.init(
      PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(password.toCharArray),
      salt,
      iterations
    )
    val key = generator.generateDerivedMacParameters(keyLen).asInstanceOf[KeyParameter]
    key.getKey
  }
}

私にとって疑わしいことの1つはnew SHA3Digest(256)、コンストラクターの256ビット長です。提供されたキーの長さと同じにする必要がありますか、それとも私が行ったように固定されたものにする必要がありますか? 一部の固定値しか使用できず、オブジェクト API ユーザーがキー長パラメーターとして任意の値を指定できるため、固定長を使用することにしましたが、一般的でないもののほとんどはSHA3Digestコンストラクター内から例外がスローされます。また、デフォルト値は 288 (キーの長さが指定されていない場合) のようで、奇妙に見えます。

前もって感謝します!

4

1 に答える 1

6
  1. シャットダウンは一時的です。SHA-3 は、2014 年のどこかの時点で標準化される可能性が最も高いでしょう。
  2. いいえ、これらの値は SHA-3 ではなく、おそらく Final Round Keccak のものです。SHA-3 仕様はまだありません。標準化の前に SHA-3 が微調整される可能性は非常に高いです。

    => 現在 SHA-3 を実装することは不可能です。実装できるのは Keccak だけです。

  3. パスワード ハッシュは、攻撃者にとって可能な限り高くつく必要があります。攻撃者は防御側とは異なるハードウェア (少なくとも GPU) を使用しますが、場合によってはカスタム チップも使用します。

    防御側は、ハッシュに割り当てられた限られた時間 (たとえば 100 ミリ秒) を持っており、その制約を考慮して、攻撃者にとってできるだけ高価な関数を望んでいます。これは、カスタム ハードウェアが標準のコンピューターよりも大きな利点を得るべきではないことを意味します。したがって、ソフトウェアに適したハッシュを使用することをお勧めしますが、Keccak は比較的ハードウェアに適しています。

    SHA-1 と SHA-2 はハードウェアでも優れているため、実際には、他のパスワード ハッシュが PBKDF2-HMAC-SHA-x より優れている点に比べれば、違いはわずかです。標準への準拠ではなくセキュリティを重視する場合は、scrypt をお勧めします。

于 2013-10-05T11:42:10.757 に答える