PBKDF2-HMAC-SHA2测试载体

时间:2011-02-26 23:48:31

标签: cryptography hmac sha2 pbkdf2

RFC6070中有PBKDF2-HMAC-SHA1的测试向量。在RFC4231中有针对HMAC-SHA2的测试向量。

但到目前为止,我还没有在任何地方找到PBKDF2-HMAC-SHA2的测试向量。

我对SHA256最感兴趣,所以我会发布一些我用我的实现计算的向量。如果有人可以验证/确认,或者自己贡献,我会很高兴。

4 个答案:

答案 0 :(得分:17)

implemented PBKDF2使用Python中的标准hashlibhmac模块,并根据RFC 6070向量和vectors you posted检查输出 - 它匹配。

以下是我使用较大dkLen来匹配较大摘要输出大小的向量。这是pbkdf2-test-vectors.py sha256的输出,大约需要10分钟才能运行。

PBKDF2 HMAC-SHA256 Test Vectors

Input:
  P = "password" (8 octets)
  S = "salt" (4 octets)
  c = 1
  dkLen = 32

Output:
  DK = 12 0f b6 cf fc f8 b3 2c
       43 e7 22 52 56 c4 f8 37
       a8 65 48 c9 2c cc 35 48
       08 05 98 7c b7 0b e1 7b (32 octets)


Input:
  P = "password" (8 octets)
  S = "salt" (4 octets)
  c = 2
  dkLen = 32

Output:
  DK = ae 4d 0c 95 af 6b 46 d3
       2d 0a df f9 28 f0 6d d0
       2a 30 3f 8e f3 c2 51 df
       d6 e2 d8 5a 95 47 4c 43 (32 octets)


Input:
  P = "password" (8 octets)
  S = "salt" (4 octets)
  c = 4096
  dkLen = 32

Output:
  DK = c5 e4 78 d5 92 88 c8 41
       aa 53 0d b6 84 5c 4c 8d
       96 28 93 a0 01 ce 4e 11
       a4 96 38 73 aa 98 13 4a (32 octets)


Input:
  P = "password" (8 octets)
  S = "salt" (4 octets)
  c = 16777216
  dkLen = 32

Output:
  DK = cf 81 c6 6f e8 cf c0 4d
       1f 31 ec b6 5d ab 40 89
       f7 f1 79 e8 9b 3b 0b cb
       17 ad 10 e3 ac 6e ba 46 (32 octets)


Input:
  P = "passwordPASSWORDpassword" (24 octets)
  S = "saltSALTsaltSALTsaltSALTsaltSALTsalt" (36 octets)
  c = 4096
  dkLen = 40

Output:
  DK = 34 8c 89 db cb d3 2b 2f
       32 d8 14 b8 11 6e 84 cf
       2b 17 34 7e bc 18 00 18
       1c 4e 2a 1f b8 dd 53 e1
       c6 35 51 8c 7d ac 47 e9 (40 octets)


Input:
  P = "pass\0word" (9 octets)
  S = "sa\0lt" (5 octets)
  c = 4096
  dkLen = 16

Output:
  DK = 89 b6 9d 05 16 f8 29 89
       3c 69 62 26 65 0a 86 87 (16 octets)

答案 1 :(得分:7)

PBKDF2-HMAC-SHA256的测试载体:

输入值取自RFC6070; c是轮数。

Input:
 P = "password" (8 octets)
 S = "salt" (4 octets)
 c = 1
 dkLen = 20
Output:
 DK = 12 0f b6 cf fc f8 b3 2c 43 e7 22 52 56 c4 f8 37 a8 65 48 c9


Input:
 P = "password" (8 octets)
 S = "salt" (4 octets)
 c = 2
 dkLen = 20
Output:
 DK = ae 4d 0c 95 af 6b 46 d3 2d 0a df f9 28 f0 6d d0 2a 30 3f 8e


Input:
 P = "password" (8 octets)
 S = "salt" (4 octets)
 c = 4096
 dkLen = 20
Output:
 DK = c5 e4 78 d5 92 88 c8 41 aa 53 0d b6 84 5c 4c 8d 96 28 93 a0


Input:
 P = "password" (8 octets)
 S = "salt" (4 octets)
 c = 16777216
 dkLen = 20
Output:
 DK = cf 81 c6 6f e8 cf c0 4d 1f 31 ec b6 5d ab 40 89 f7 f1 79 e8


Input:
 P = "passwordPASSWORDpassword" (24 octets)
 S = "saltSALTsaltSALTsaltSALTsaltSALTsalt" (36 octets)
 c = 4096
 dkLen = 25
Output:
 DK = 34 8c 89 db cb d3 2b 2f 32 d8 14 b8 11 6e 84 cf
      2b 17 34 7e bc 18 00 18 1c


Input:
 P = "pass\0word" (9 octets)
 S = "sa\0lt" (5 octets)
 c = 4096
 dkLen = 16
Output:
 DK = 89 b6 9d 05 16 f8 29 89 3c 69 62 26 65 0a 86 87

答案 2 :(得分:4)

我应该最终根据这个问题发布我之前做过的事情!

my Github repository,我编译了

的测试向量
  • PBKDF2-HMAC-SHA-512
  • PBKDF2-HMAC-SHA-384
  • PBKDF2-HMAC-SHA-256
  • PBKDF2-HMAC-SHA-224
  • PBKDF2-HMAC-SHA-1 而对于疯狂的或那些没有SHA-1支持的古代系统:
  • PBKDF2-HMAC-MD5

测试从RFC6070开始,以及@ChristianAichinger在PBKDF2-HMAC-SHA-256上面的答案,并增加了几十个以实现更严格的测试,例如围绕某些大小的密码和盐的边界条件(15) / 16/17字节,63/64/65字节,127/128/128字节,1025字节等),大迭代计数,大输出大小计数等等。

然后我收集了许多PBKDF2实例,并针对我能够找到的所有主要实现验证了这些测试向量(所有这些都包含在上面的存储库中,有时包括Windows MinGW可执行文件,通常包括Linux编译指令),包括< / p>

  • Python(hashlib)
  • Python(华纳的自定义代码)
  • C(OpenSSL)
  • C(PolarSSL)
  • C ++(Cryptopp)
  • .NET 4.5(@ Jither的DeriveBytes)
  • SQL Server(自定义代码,仅限PBKDF2-HMAC-SHA-1和PBKDF2-HMAC-SHA-512)

鉴于我在使用多个主要加密库的5种不同语言的7个实现中看到相同的结果,我非常有信心不仅提供的测试向量准确,而且提供的实现可以用作集合验证任何其他所需的测试向量集。如果他们都同意,那就是正确的。

答案 3 :(得分:0)

作为 socketscrypt 规范)的一部分,为 PBKDF2 和 HMAC-SHA-256 提供了测试向量(因为 scrypt em> 在内部使用 PBKDF2)。

有趣的是,dkLen 超过了 32(SHA-256 块的大小),因此它确实测试了中间哈希块的串联是否有效。


   PBKDF2-HMAC-SHA-256 (P="passwd", S="salt",
                       c=1, dkLen=64) =
   55 ac 04 6e 56 e3 08 9f ec 16 91 c2 25 44 b6 05
   f9 41 85 21 6d de 04 65 e6 8b 9d 57 c2 0d ac bc
   49 ca 9c cc f1 79 b6 45 99 16 64 b3 9d 77 ef 31
   7c 71 b8 45 b1 e3 0b d5 09 11 20 41 d3 a1 97 83

   PBKDF2-HMAC-SHA-256 (P="Password", S="NaCl",
                        c=80000, dkLen=64) =
   4d dc d8 f6 0b 98 be 21 83 0c ee 5e f2 27 01 f9
   64 1a 44 18 d0 4c 04 14 ae ff 08 87 6b 34 ab 56
   a1 d4 25 a1 22 58 33 54 9a db 84 1b 51 c9 b3 17
   6a 27 2b de bb a1 d0 78 47 8f 62 b3 97 f3 3c 8d