Ключ DK вычисляют как функцию диверсификации PBKDF2 (P, S, c, dkLen) с использованием в качестве псевдослучайной функции PRF функции HMAC_GOSTR3411:
DK = PBKDF2 (P, S, c, dkLen). (1)
Функцию диверсификации вычисляют по следующему алгоритму:
1) Если dkLen > (232 - 1)·64, то алгоритм завершает работу с ошибкой (неверные параметры).
2) Вычисляют n = [dkLen/64].
3) Для каждого i от 1 до n вычисляют набор значений:
![]() Uc(i) = HMAC_GOSTR3411 (P, Uc-1). (2)
T(i) = U1(i)
4) Ключ DK вычисляют как конкатенацию байтовых строк {T(i)} с последующим усечением полученной последовательности до длины выходной последовательности:
(4)Шифрование данных при использовании ключа DK осуществляют в соответствии со схемой PBES2, см. 6.2 [1], с использованием ГОСТ 28147-89 в режиме гаммирования с обратной связью.
Процесс шифрования в данной схеме выглядит следующим образом:
1) Выбирают случайное значение S размерности от 8 до 32 байт. Рекомендуемая размерность - 32 байта.
2) Число итераций c выбирают в зависимости от условий применения. Минимально допустимое значение параметра 1000, рекомендуемое 2000.
3) Устанавливают dkLen = 32.
4) Производят выработку последовательности DK = PBKDF2 (P, S, c, 32).
5) Ключ шифрования данных K получают усечением выходной последовательности T(1) до размерности 32, то есть
.6) Выбирают случайное значение синхропосылки S' размерности 8 байт.
7) Осуществляют шифрование данных по алгоритму ГОСТ 28147-89 (раздел 4) на ключе K с синхропосылкой S' в режиме гаммирования с обратной связью.
8) Параметры S, c, S' сохраняют в качестве параметров алгоритмов в соответствии с разделом 7.
Расшифрование данных осуществляют аналогичным образом с использованием параметров S, c и S', применявшихся при зашифровании.
Для вычисления контрольной суммы передаваемых данных следует использовать схему PBMAC1, см. 7.1 [1], на основе функции HMAC_GOSTR3411 с ключом
DK = PBKDF2 (P, S, c, 32). (5)
rsadsi OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) 113549}
pkcs OBJECT IDENTIFIER ::= {rsadsi 1}
pkcs-5 OBJECT IDENTIFIER ::= {pkcs 5}
Объектный идентификатор для схемы PBKDF2:
id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12}
Параметры алгоритма:
(6)где
1) salt - значение случайной синхропосылки S, представленное в виде OCTET STRING;
2) iterationCount - число итераций алгоритма c;
3) keyLength - размер ключа в байтах; размер ключа в рамках схемы PBES2 может отсутствовать, так как всегда равен 32; в рамках схемы PBMAC1 он должен быть равен 32 и должен всегда присутствовать, так как функция HMAC_GOSTR3411 имеет переменный размер ключа;
4) prf - описание алгоритма псевдослучайной функции, где
prf.algorithm = id-tc26-hmac-gost-3411-12-512
prf.parameters = NULL.
Объектный идентификатор для схемы PBES2:
id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}
Параметры алгоритма:
(7)где
1) keyDerivationFunc - идентификатор и параметры алгоритма выработки парольного ключа PBKDF2 с параметрами в соответствии с 7.1;
2) encryptionScheme - идентификатор и параметры алгоритма шифрования ГОСТ 28147-89 в соответствии с [2]:
encryptionScheme.algorithm = id-Gost28147-89
encryptionScheme.parameters = Gost28147-89-Parameters
Параметры:
Gost28147-89-Parameters ::= SEQUENCE {
iv Gost28147-89-IV,
encryptionParamSet OBJECT IDENTIFIER
}
Gost28147-89-IV ::= OCTET STRING (SIZE (8)) должно содержать значение
синхропосылки шифрования S'.
Объектный идентификатор для схемы PBMAC1:
id-PBMAC1 OBJECT IDENTIFIER ::= {pkcs-5 14}.
Параметры алгоритма:
(8)где
1) keyDerivationFunc - идентификатор и параметры алгоритма выработки парольного ключа в соответствии с разделом PBKDF2;
2) messageAuthScheme - идентификатор алгоритма HMAC_GOSTR3411_2012_512.
При шифровании данных согласно схеме PBES2 рекомендуется использовать набор подстановок, описанный в [3].
Объектный идентификатор набора:
id-tc26-gost-28147-paramSetISO = OBJECT IDENTIFIER ::= { iso(1) member-body(2) ru(643) rosstandart(7) tk26(1) algorithms(1) cipher(5) params(1) tk26iso(1) }.
(справочное)
Данные тестовые вектора сформированы по аналогии с тестовыми векторами из [4].
Input:
P = "password" (8 octets)
S = "salt" (4 octets)
c = 1
dkLen = 64
DK = 64 77 0a f7 f7 48 c3 b1 c9 ac 83 1d bc fd 85 c2
61 11 b3 0a 8a 65 7d dc 30 56 b8 0c a7 3e 04 0d
28 54 fd 36 81 1f 6d 82 5c c4 ab 66 ec 0a 68 a4
90 a9 e5 cf 51 56 b3 a2 b7 ee cd db f9 a1 6b 47
???????????????????????????????????????????????????????????????????????????
Input:
P = "password" (8 octets)
S = "salt" (4 octets)
c = 2
dkLen = 64
DK = 5a 58 5b af df bb 6e 88 30 d6 d6 8a a3 b4 3a c0
0d 2e 4a eb ce 01 c9 b3 1c 2c ae d5 6f 02 36 d4
d3 4b 2b 8f bd 2c 4e 89 d5 4d 46 f5 0e 47 d4 5b
ba c3 01 57 17 43 11 9e 8d 3c 42 ba 66 d3 48 de
???????????????????????????????????????????????????????????????????????????
Input:
P = "password" (8 octets)
S = "salt" (4 octets)
c = 4096
dkLen = 64
DK = e5 2d eb 9a 2d 2a af f4 e2 ac 9d 47 a4 1f 34 c2
03 76 59 1c 67 80 7f 04 77 e3 25 49 dc 34 1b c7
86 7c 09 84 1b 6d 58 e2 9d 03 47 c9 96 30 1d 55
df 0d 34 e4 7c f6 8f 4e 3c 2c da f1 d9 ab 86 c3
???????????????????????????????????????????????????????????????????????????
Input:
P = "password" (8 octets)
S = "salt" (4 octets)
c = 16777216
dkLen = 64
DK = 49 e4 84 3b ba 76 e3 00 af e2 4c 4d 23 dc 73 92
de f1 2f 2c 0e 24 41 72 36 7c d7 0a 89 82 ac 36
1a db 60 1c 7e 2a 31 4e 8c b7 b1 e9 df 84 0e 36
ab 56 15 be 5d 74 2b 6c f2 03 fb 55 fd c4 80 71
???????????????????????????????????????????????????????????????????????????
Input:
P = "passwordPASSWORDpassword" (24 octets)
S = "saltSALTsaltSALTsaltSALTsaltSALTsalt" (36 octets)
c = 4096
dkLen = 100
DK = b2 d8 f1 24 5f c4 d2 92 74 80 20 57 e4 b5 4e 0a
07 53 aa 22 fc 53 76 0b 30 1c f0 08 67 9e 58 fe
4b ee 9a dd ca e9 9b a2 b0 b2 0f 43 1a 9c 5e 50
f3 95 c8 93 87 d0 94 5a ed ec a6 eb 40 15 df c2
bd 24 21 ee 9b b7 11 83 ba 88 2c ee bf ef 25 9f
33 f9 e2 7d c6 17 8c b8 9d c3 74 28 cf 9c c5 2a
2b aa 2d 3a
???????????????????????????????????????????????????????????????????????????
Input:
P = "pass\0word" (9 octets)
S = "sa\0lt" (5 octets)
c = 4096
dkLen = 64
DK = 50 df 06 28 85 b6 98 01 a3 c1 02 48 eb 0a 27 ab
6e 52 2f fe b2 0c 99 1c 66 0f 00 14 75 d7 3a 4e
16 7f 78 2c 18 e9 7e 92 97 6d 9c 1d 97 08 31 ea
78 cc b8 79 f6 70 68 cd ac 19 10 74 08 44 e8 30
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/prikaz/111/r_50_23516.html
На правах рекламы:
|