Статус: Сотрудник
Группы: Участники
Зарегистрирован: 10.04.2013(UTC) Сообщений: 186  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 81 раз в 62 постах
|
Ну функция CryptExportKey должна помочь, особых ограничений на диверсифицированные ключи возникать не должно. |
С уважением, Станислав Смышляев, к.ф.-м.н., Заместитель генерального директора ООО "КРИПТО-ПРО" Техническую поддержку оказываем здесь. Наша база знаний.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.09.2012(UTC) Сообщений: 37  Откуда: Москва Сказал «Спасибо»: 9 раз
|
Здравствуйте! Есть ли способ задавать длину выработки ключа 96 байт по алгоритму PBKDF2 и при вызове CryptDeriveKey брать последние 32 байта из этих 96 байтов? Это нужно для работы с PKCS#12 в соответствии с рекомендациями ТК26 Отредактировано пользователем 17 апреля 2018 г. 13:37:42(UTC)
| Причина: Нажал Ctrl+Enter в надежде на перевод строки
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.11.2014(UTC) Сообщений: 31  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 25 раз в 21 постах
|
Здравствуйте! Интерфейс функции CryptDeriveKey не позволяет использовать последние 32 байта из 96. Чтобы обойти это ограничение, Вы можете использовать следующую последовательность действий: Код: BYTE pbTmpHashValue[96];
DWORD dwHashLen = sizeof(pbTmpHashValue);
HCRYPTHASH hSecondHash;
// получить значение pbkdf2 длины 96 байт
if (!CryptGetHashParam(hHash, HP_HASHVAL, pbTmpHashValue, &dwHashLen, 0)) {
printf("CryptGetHashParam HP_HASHVAL failed\n");
exit(1);
}
// создать дополнительный объект хэша с длиной хэш-значения 32 байта
// например, объект CALG_GR3411_2012_256
if (!CryptCreateHash(hProv, CALG_GR3411_2012_256, 0, 0, &hHash)) {
printf("CryptCreateHash CALG_GR3411_2012_256 failed\n");
exit(1);
}
// установить в новый объект хэша требуемое значение ключа
if (!CryptSetHashParam(hHash, HP_HASHVAL, pbTmpHashValue + dwHashLen - 32, 0)) {
printf("CryptSetHashParam HP_HASHVAL failed\n");
exit(1);
}
// выработать ключ с требуемым значением
if (!CryptDeriveKey(hProv, CALG_G28147, hHash, CRYPT_EXPORTABLE, &hKey)){
printf("CryptSetHashParam HP_HASHVAL failed\n");
exit(1);
}
else {
printf("The key has been derived. \n");
}
|
|
 1 пользователь поблагодарил Сонина Лолита за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close