Тест-тесты PBKDF2-HMAC-SHA2
Существуют тестовые векторы для PBKDF2-HMAC-SHA1 в RFC6070. Существуют тестовые векторы для HMAC-SHA2 в RFC4231.
Но до сих пор я не нашел тестовых векторов для PBKDF2-HMAC-SHA2 где-нибудь.
Меня больше всего интересует SHA256, поэтому я выложу несколько векторов, которые я вычислил с моей реализацией. Я был бы счастлив, если бы кто-то мог проверить/подтвердить их или внести свой вклад.
Ответы
Ответ 1
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)
Ответ 2
Тест-векторы для 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
Ответ 3
Вероятно, я, вероятно, должен был бы опубликовать то, что я сделал некоторое время назад на основе этого самого вопроса!
В мой репозиторий 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 и проверил эти тестовые векторы на каждую основную реализацию, которую я смог найти (все они также включены в вышеупомянутый репозиторий, иногда включая исполняемые файлы Windows MinGW и обычно включают в себя инструкции по сборке Linux), включая
- Python (hashlib)
- Python (пользовательский код Warner)
- C (OpenSSL)
- C (PolarSSL)
- С++ (Cryptopp)
- .NET 4.5 (@Dither DeriveBytes)
- SQL Server (пользовательский код, PBKDF2-HMAC-SHA-1 и PBKDF2-HMAC-SHA-512 только сейчас)
Учитывая, что я вижу идентичные результаты в 7 реализациях с использованием 5 разных языков с использованием нескольких основных криптографических библиотек, я очень уверен, что не только тестовые векторы предоставлены точными, но и то, что предоставленные реализации могут использоваться как набор для подтверждения любого другого набора тестовых векторов. Если все согласны, тогда это правильно.