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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline PPP  
#1 Оставлено : 7 августа 2017 г. 18:56:17(UTC)
PPP

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

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

Offline PPP  
#2 Оставлено : 8 августа 2017 г. 12:19:51(UTC)
PPP

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

Группы: Участники
Зарегистрирован: 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, что бы он использовался при выработке ключа согласования?


С уважением,
Павел
Offline PPP  
#3 Оставлено : 11 августа 2017 г. 9:20:45(UTC)
PPP

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

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

Сказал(а) «Спасибо»: 11 раз
Коллеги, добрый день!


Кто-нибудь сможет ответить на ранее озвученные вопросы?
Offline Станислав Смышляев  
#4 Оставлено : 14 августа 2017 г. 17:20:25(UTC)
Станислав Смышляев

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

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

С уважением,
Станислав Смышляев, к.ф.-м.н.,
Заместитель генерального директора ООО "КРИПТО-ПРО"
Техническую поддержку оказываем здесь.
Наша база знаний.
thanks 1 пользователь поблагодарил Станислав Смышляев за этот пост.
PPP оставлено 16.08.2017(UTC)
Offline PPP  
#5 Оставлено : 14 августа 2017 г. 18:37:51(UTC)
PPP

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

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


С уважением,
Павел
Offline Агафьин Сергей  
#6 Оставлено : 15 августа 2017 г. 11:08:40(UTC)
Grey

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

Группы: Участники
Зарегистрирован: 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)
С уважением,
Сергей
Техническую поддержку оказываем здесь.
Наша база знаний.
Offline PPP  
#7 Оставлено : 15 августа 2017 г. 11:46:55(UTC)
PPP

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

Группы: Участники
Зарегистрирован: 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?
Offline Агафьин Сергей  
#8 Оставлено : 15 августа 2017 г. 11:51:50(UTC)
Grey

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

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

Сказал «Спасибо»: 5 раз
Поблагодарили: 215 раз в 174 постах
Автор: PPP Перейти к цитате
Коллеги, добрый день!

Попытался явно установить UKM в дескриптор закрытого ключа. Функция CryptSetKeyParam вернула ошибку 8009000A (Bad data). Ниже привожу фрагмент исходного текста:


Что делаю не так? Как правильно установить UKM?


Добрый день.
Его нужно устанавливать на ключ обмена.
С уважением,
Сергей
Техническую поддержку оказываем здесь.
Наша база знаний.
Offline PPP  
#9 Оставлено : 15 августа 2017 г. 12:11:55(UTC)
PPP

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

Группы: Участники
Зарегистрирован: 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?
Offline Агафьин Сергей  
#10 Оставлено : 15 августа 2017 г. 12:22:25(UTC)
Grey

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

Группы: Участники
Зарегистрирован: 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 превратится в хэндл настоящего объекта ключа.
С уважением,
Сергей
Техническую поддержку оказываем здесь.
Наша база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.