Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Коллеги, добрый день! В примере на зашифрование файла в документе "СКЗИ КриптоПро CSP. Руководство программиста Часть 1": Перед зашифрованием сессионного ключа (ключа алгоритма ГОСТ 28147-89) на ключе согласования (keyAgree) выполняется установка алгоритма экспорта сессионного ключа с помощью функции CryptSetKeyParam: CryptSetKeyParam(keyAgree, KP_ALGID, CALG_PRO_EXPORT,0).Если я правильно понимаю, реализация алгоритма экспорта ключа реализована в соответствии с пунктом 6 "Key Wrap Algorithms" RFC4357. Однако в пункте 6 RFC4357 представлено два алгоритма экспорта ключа: GOST 28147-89 Key Wrap и CryptoPro Key Wrap. Какому из этих алгоритмов соответствует идентификатор CALG_PRO_EXPORT? С уважением, Павел Отредактировано пользователем 8 августа 2017 г. 10:08:39(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
В дополнение к предыдущему вопросу...
Для выработки ключа согласования (KeyAgree) используется функция CryptImportKey на вход которой подаются открытый ключ получателя и закрытый ключ отправителя.
Согласно алгоритму VKO GOST R 34.10-2001 (rfc4357) для выработки ключа согласования (в rfc он называется KEK - key encryption key) требуются следующие данные: - открытый ключ получателя; - закрытый ключ отправителя; - UKM (не нулевое целое число, произведенное в соответствии с шагом 2, пункта 6.1, non-zero integer, GOSTR341001).
В примере на зашифрование файла приведенном в документе "СКЗИ КриптоПро CSP. Руководство программиста Часть 1" UKM нигде не вырабатывается и в функцию выработки ключа согласования (CryptImportKey) не передается.
Вопросы:
UKM вырабатывается автоматически в функции CryptImportKey или его надо вырабатывать отдельно?
Если UKM вырабатывается отдельно, то как его передать в функцию CryptImportKey, что бы он использовался при выработке ключа согласования?
С уважением, Павел
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Коллеги, добрый день!
Кто-нибудь сможет ответить на ранее озвученные вопросы?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 10.04.2013(UTC) Сообщений: 186 Сказал(а) «Спасибо»: 1 раз Поблагодарили: 81 раз в 62 постах
|
Добрый день! Прошу прощения за задержку с ответом. Ответы на эти (и аналогичные) вопросы мы постарались привести в следующем разделе нашей документации: Управление алгоритмами и параметрами RFC 4357. 1) CALG_PRO_EXPORT соответствует CryptoPro Key Wrap. 2) При экспорте UKM, если он не был задан явным образом с помощью отдельного SetKeyParam, создается случайным. При импорте UKM, если он не был задан явным образом с помощью отдельного SetKeyParam, берется из блоба. Отредактировано пользователем 14 августа 2017 г. 17:21:59(UTC)
| Причина: Не указана |
С уважением, Станислав Смышляев, к.ф.-м.н., Заместитель генерального директора ООО "КРИПТО-ПРО" Техническую поддержку оказываем здесь. Наша база знаний.
|
1 пользователь поблагодарил Станислав Смышляев за этот пост.
|
PPP оставлено 16.08.2017(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Станислав, добрый день!
1. По первому вопросу ответ понятен.
2. По второму вопросу:
Выработка ключа согласования (алгоритм VKO GOST R 34.10-2001) как при зашифровании данных, так и при расшифровании осуществляется с помощью функции CryptImportKey. Входными параметрами данной функции являются: 1) дескриптор криптопровайдера; 2) открытый ключ получателя (отправителя); 3) дескриптор закрытого ключа отправителя (получателя).
Выходным параметром является: - дескриптор ключа согласования.
Никакая информация из блоба при расшифровании данных (выработке ключа согласования на стороне получателя) в данную функцию не подается. Это говорит о том, что при выработке ключа согласования UKM не используется, либо всегда используется постоянное значение UKM.
Примечание: в примере на расшифрование файла в документе "СКЗИ КриптоПро CSP. Руководство программиста Часть 1", блоб содержащий UKM, передается в функцию импорта сессионного ключа, но не в функцию выработки ключа согласования.
Поправьте меня если я не прав. Прошу пояснить как функцию CryptImportKey (реализующую VKO GOST R 34.10-2001)передать блоб, содержащий UKM.
С уважением, Павел
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 834 Откуда: Москва Сказал «Спасибо»: 5 раз Поблагодарили: 215 раз в 174 постах
|
Автор: PPP Станислав, добрый день!
1. По первому вопросу ответ понятен.
2. По второму вопросу:
Выработка ключа согласования (алгоритм VKO GOST R 34.10-2001) как при зашифровании данных, так и при расшифровании осуществляется с помощью функции CryptImportKey. Входными параметрами данной функции являются: 1) дескриптор криптопровайдера; 2) открытый ключ получателя (отправителя); 3) дескриптор закрытого ключа отправителя (получателя).
Выходным параметром является: - дескриптор ключа согласования.
Никакая информация из блоба при расшифровании данных (выработке ключа согласования на стороне получателя) в данную функцию не подается. Это говорит о том, что при выработке ключа согласования UKM не используется, либо всегда используется постоянное значение UKM.
Примечание: в примере на расшифрование файла в документе "СКЗИ КриптоПро CSP. Руководство программиста Часть 1", блоб содержащий UKM, передается в функцию импорта сессионного ключа, но не в функцию выработки ключа согласования.
Поправьте меня если я не прав. Прошу пояснить как функцию CryptImportKey (реализующую VKO GOST R 34.10-2001)передать блоб, содержащий UKM.
С уважением, Павел Добрый день! В функцию CryptImportKey передать UKM нельзя. Он может попасть в контекст двумя путями. 1. Явная установка с помощью CryptSetKeyParam(KP_IV). 2. Прозрачная генерация при первой операции, где требуется использование ключа обмена. Например, при экспорте блоба с сессионным ключом. UKM, который использовался для экспорта, записывается в данный блоб и достаётся из него при импорте блоба в другой контекст. Если же ключ обмена используется не для шифрования сессионных ключей, то явно передать UKM можно так: CryptGetKeyParam(hKey1, KP_IV) CryptSetKeyParam(hKey2, KP_IV) |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Коллеги, добрый день! Попытался явно установить UKM в дескриптор закрытого ключа. Функция CryptSetKeyParam вернула ошибку 8009000A (Bad data). Ниже привожу фрагмент исходного текста: Код:
//*******************Set_UKM********************
byte pbIV2[8] = {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
if(CryptSetKeyParam(
hKey, // Дескриптор закрытого ключа отправителя
KP_IV,
pbIV2,
0))
{
printf("The UKM has been set. \n");
}
else
{
DWORD lstErr = GetLastError();
HandleError("Error UKM.");
}
//*******************End Set_UKM***************
// Получение ключа согласования импортом открытого ключа получателя
// на закрытом ключе отправителя.
if(CryptImportKey(
hProv,
pbKeyBlob, // Блоб с открытым ключом получателя
dwBlobLen, // Размер блоба
hKey, // Дескриптор закрытого ключа отправителя
0,
&hAgreeKey))
{
printf("The responder public key has been imported. \n");
}
else
{
HandleError("Error during CryptImportKey public key.");
}
Что делаю не так? Как правильно установить UKM?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 834 Откуда: Москва Сказал «Спасибо»: 5 раз Поблагодарили: 215 раз в 174 постах
|
Автор: PPP Коллеги, добрый день!
Попытался явно установить UKM в дескриптор закрытого ключа. Функция CryptSetKeyParam вернула ошибку 8009000A (Bad data). Ниже привожу фрагмент исходного текста:
Что делаю не так? Как правильно установить UKM? Добрый день. Его нужно устанавливать на ключ обмена. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2013(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 11 раз
|
Согласно пункту 5.2 "VKO GOST R 34.10-2001" RFC4357 ключ шифрования ключей (в нашем случае ключ согласования) вычисляется по следующему алгоритму:
1) Let K(x,y,UKM) = ((UKM*x)(mod q)) . (y.P) (512 bit), где x – закрытый ключ отправителя (256 bit) x.P – открытый ключ отправителя (512 bit) y - закрытый ключ получателя (256 bit) y.P - открытый ключ получателя (512 bit) UKM – не нулевое целое число, produced as in step 2 p. 6.1 [GOSTR341001] P - base point on the elliptic curve (two 256-bit coordinates) UKM*x - x multiplied by UKM as integers x.P - a multiple point 2) Вычисление хэш-значения длиной 256 бит от K(x,y,UKM): KEK(x,y,UKM) = gostR3411 (K(x,y,UKM))
Ключевые пары (x,x.P) и (y,y.P) ДОЛЖНЫ соответствовать [GOSTR341001].
Данный алгоритм НЕ ДОЛЖЕН использоваться когда x.P = P, y.P = P
Вопросы:
Если я буду устанавливать UKM в ключ обмена, то что (применительно к описанному выше алгоритму VKO): а) будет делать функция CryptImportKey(hProv, pbKeyBlob, dwBlobLen, hKey, 0, &hAgreeKey))? б) будет представлять выходной параметр "hAgreeKey" функции CryptImportKey в) будет делать функция CryptSetKeyParam(hAgreeKey, KP_IV, pbIV2, 0))? г) Возможно ли формулу "Let K(x,y,UKM) = ((UKM*x)(mod q)) . (y.P) (512 bit)" разбить на две функции: CryptImportKey и CryptSetKeyParam?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 12.08.2013(UTC) Сообщений: 834 Откуда: Москва Сказал «Спасибо»: 5 раз Поблагодарили: 215 раз в 174 постах
|
Автор: PPP Вопросы:
Если я буду устанавливать UKM в ключ обмена, то что (применительно к описанному выше алгоритму VKO): а) будет делать функция CryptImportKey(hProv, pbKeyBlob, dwBlobLen, hKey, 0, &hAgreeKey))? б) будет представлять выходной параметр "hAgreeKey" функции CryptImportKey в) будет делать функция CryptSetKeyParam(hAgreeKey, KP_IV, pbIV2, 0))? г) Возможно ли формулу "Let K(x,y,UKM) = ((UKM*x)(mod q)) . (y.P) (512 bit)" разбить на две функции: CryptImportKey и CryptSetKeyParam?
а) Можно сказать (это в реальности не совсем так, но как модель подходит), что она сделает структуру из трех полей: {ключ, открытый ключ, UKM}. б) Хэндл этой структуры. в) Переписывает поле UKM этой структуры. г) CryptImportKey и CryptSetKeyParam(KP_IV) задают для данного выражения входные значения. Само вычисление выполняется атомарно (вместе с хэшированием) в момент, когда ключ реально требуется. Тогда hAgreeKey превратится в хэндл настоящего объекта ключа. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close