Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Станислав Смышляев  
#11 Оставлено : 20 сентября 2017 г. 16:40:25(UTC)
Станислав Смышляев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 10.04.2013(UTC)
Сообщений: 186
Российская Федерация

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 81 раз в 62 постах
Ну функция CryptExportKey должна помочь, особых ограничений на диверсифицированные ключи возникать не должно.
С уважением,
Станислав Смышляев, к.ф.-м.н.,
Заместитель генерального директора ООО "КРИПТО-ПРО"
Техническую поддержку оказываем здесь.
Наша база знаний.
Offline Skarvon  
#12 Оставлено : 17 апреля 2018 г. 13:31:39(UTC)
Skarvon

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2012(UTC)
Сообщений: 37
Мужчина
Откуда: Москва

Сказал «Спасибо»: 9 раз
Здравствуйте!
Есть ли способ задавать длину выработки ключа 96 байт по алгоритму PBKDF2 и при вызове CryptDeriveKey брать последние 32 байта из этих 96 байтов?
Это нужно для работы с PKCS#12 в соответствии с рекомендациями ТК26

Отредактировано пользователем 17 апреля 2018 г. 13:37:42(UTC)  | Причина: Нажал Ctrl+Enter в надежде на перевод строки

Offline Сонина Лолита  
#13 Оставлено : 18 апреля 2018 г. 9:56:59(UTC)
Сонина Лолита

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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");
    }

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Сонина Лолита за этот пост.
Skarvon оставлено 18.04.2018(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.