Векторы испытаний PBKDF2-HMAC-SHA2 - PullRequest
21 голосов
/ 27 февраля 2011

Существуют тестовые векторы для PBKDF2-HMAC-SHA1 в RFC6070 . Для HMAC-SHA2 имеются векторы испытаний в RFC4231 .

Но пока я нигде не нашел тестовых векторов для PBKDF2-HMAC-SHA2.

Меня больше всего интересует SHA256, поэтому я опубликую несколько векторов, которые я рассчитал в своей реализации. Я был бы счастлив, если бы кто-то мог подтвердить или подтвердить их или внести свой вклад.

Ответы [ 3 ]

17 голосов
/ 28 февраля 2011

I реализовал PBKDF2 с использованием стандартных модулей hashlib и hmac в Python и проверил выходные данные как по векторам RFC 6070, так и по векторам отправлено - это соответствует.

Вот векторы, которые я получаю с большим 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)
7 голосов
/ 27 февраля 2011

Испытательные векторы для PBKDF2-HMAC-SHA256:

Входные значения были взяты из RFC6070; с - количество раундов.

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
4 голосов
/ 20 января 2018

Вероятно, мне следует наконец опубликовать то, что я делал недавно, основываясь на этом же вопросе!

В моем репозитории Github , я скомпилировал тестовые векторы для

  • 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/129 байт, 1025 байт и т. Д.), Большое количество итераций, большое количество выходных размеров и т. Д. И т. Д.

Затем я собрал много экземпляров PBKDF2,и проверил эти тестовые векторы в отношении каждой крупной реализации, которую мне удалось найти (все также включаютd в вышеупомянутом репозитории, иногда включая исполняемые файлы Windows MinGW и обычно включая инструкции по компиляции Linux), включая

  • Python (hashlib)
  • Python (пользовательский код warner)
  • C (OpenSSL)
  • C (PolarSSL)
  • C ++ (Cryptopp)
  • .NET 4.5 (@ Jither's DeriveBytes)
  • SQL Server (пользовательский код, PBKDF2-HMAC-SHA-1 и PBKDF2-HMAC-SHA-512 только сейчас)

Учитывая, что я вижу идентичные результаты в 7 реализациях с использованием 5 различных языков с использованием нескольких основных криптографических библиотек,Я чрезвычайно уверен, что тестовые векторы не только предоставлены точно, но и что реализованные реализации могут использоваться в качестве набора для проверки любого другого желаемого набора тестовых векторов.Если они все согласны, то это правильно.

...