Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.11.2010(UTC) Сообщений: 52 Откуда: Спб
Сказал(а) «Спасибо»: 4 раз
|
Здравствуйте. Требуется реализовать генерацию ключа в соответствии с пунктом 5.2 http://www.rfc-editor.org/rfc/rfc4357.txtПросмотрев примеры насколько я понял нужный мне пример gEncryptFileAgree.cs Код: // Шифрование тестового файла.
static void EncryptTestFile(string SourceContainer, string certFileName)
Но у меня в коде есть X509Certificate2 отправителя ( с закрытым и открытым ключом ) и X509Certificate получателя. Соответственно я не понимаю ( сегодня целый день пытался и не смог ) Как мне получить из них GostSharedSecretAlgorithm agree Код:CspParameters par = new CspParameters(75, null, SourceContainer);
Gost3410CryptoServiceProvider srcContainer = new Gost3410CryptoServiceProvider(par);
Gost3410Parameters srcPublicKeyParameters = srcContainer.ExportParameters(false);
// Создаем agree ключ
GostSharedSecretAlgorithm agree = srcContainer.CreateAgree(
alg.ExportParameters(false) );
Проблема в том что у меня нет контейнера ( в системе он конечно есть, но какое его имя я не знаю ), но при этом у меня есть оба необходимых для создания agree сертификата. Помогите пожалуйста имея cert1 & cert2 получить GostSharedSecretAlgorithm agree. Спасибо
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 150  Поблагодарили: 33 раз в 32 постах
|
Вопрос в том, как по сертификату найти ему соответствующий контейнер с закрытым ключом? Можно, например, так: 1. Код:Gost3410CryptoServiceProvider prov = (Gost3410CryptoServiceProvider)certificate.PrivateKey;
2. Код:CspKeyContainerInfo info = ((ICspAsymmetricAlgorithm)certificate.PrivateKey).CspKeyContainerInfo;
CspParameters pars = new CspParameters(info.ProviderType, info.ProviderName, info.KeyContainerName);
Gost3410CryptoServiceProvider srcContainer = new Gost3410CryptoServiceProvider(pars);
Отредактировано пользователем 29 ноября 2012 г. 12:25:31(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.11.2010(UTC) Сообщений: 52 Откуда: Спб
Сказал(а) «Спасибо»: 4 раз
|
Как просто, спасибо. Также у меня есть еще один вопрос по тому же самому AgreeKey. Код:GostSharedSecretAlgorithm agree = srcContainer.CreateAgree(alg.ExportParameters(false));
У класса GostSharedSecretAlgorithm есть только 2 функции - Wrap and Unwrap позволяющие зашифровать и расшифровать секретный ключ. Есть какой-нибудь способ вытащить ключ из класса GostSharedSecretAlgorithm и прямо им зашифровать файл для отправки ?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 150  Поблагодарили: 33 раз в 32 постах
|
Не очень понятен вопрос. Сам файл вы зашифровываете симметричным ключом. В открытом виде этот ключ получить нельзя. Отредактировано пользователем 29 ноября 2012 г. 13:49:32(UTC)
| Причина: Не указана |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.11.2010(UTC) Сообщений: 52 Откуда: Спб
Сказал(а) «Спасибо»: 4 раз
|
Ну а хотя бы зашифровать им какие-либо данные кроме как ключ шифрования ?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 150  Поблагодарили: 33 раз в 32 постах
|
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.11.2010(UTC) Сообщений: 52 Откуда: Спб
Сказал(а) «Спасибо»: 4 раз
|
Понятно. Последний непонятный момент. Как сказано в RFC в том же самом пункте 5.2 http://www.rfc-editor.org/rfc/rfc4357.txtЦитата: 1) Let K(x,y,UKM) = ((UKM*x)(mod q)) . (y.P) (512 bit), where x - sender's private key (256 bit) x.P - sender's public key (512 bit) y - recipient's private key (256 bit) y.P - recipient's public key (512 bit) UKM - non-zero integer, 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) Calculate a 256-bit hash of K(x,y,UKM): KEK(x,y,UKM) = gostR3411 (K(x,y,UKM)) Больше всего интересует UKM, который в соответствии с RFC Цитата: 1) For a unique symmetric KEK, generate 8 octets at random and call the result UKM. For a KEK, produced by VKO GOST R 34.10-2001, use the UKM that was used for key derivation. В примерах UKM отсутствует. Как его указать или что испольузется вместо него ?
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.11.2010(UTC) Сообщений: 52 Откуда: Спб
Сказал(а) «Спасибо»: 4 раз
|
Так все таки, является ли реализация криптопро соответствующей стандарту ?
|
|
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
sadgb написал:В примерах UKM отсутствует. Как его указать или что испольузется вместо него ? UKM генерируется и используется неявно, поэтому в примерах он не наблюдается. sadgb написал:Так все таки, является ли реализация криптопро соответствующей стандарту ? Конечно. Наша реализация соответствует нашему стандарту. |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.11.2010(UTC) Сообщений: 52 Откуда: Спб
Сказал(а) «Спасибо»: 4 раз
|
Здорово. Проблема в том что нам нужно реализовать взаимодествие двух ОС с использованием этого протокола и на одной из них ( ОС Магистра ) нет возможности использовать КриптоПРО ( а на второй мы используем криптопро ). Проблема в том, что мы не можем понять как сделать аналог строчки, Код: var symmetric = agree.Unwrap(cek, GostKeyWrapMethod.CryptoProKeyWrap);
потому что не понимаем где взять UMK. Особая проблема это то, что в примерах передаваемый WrappedKey 65 байт. А если смотреть стандарт то чтобы сделать Key Unwrap всегда первый шаг Цитата: 1) If the wrapped content-encryption key is not 44 octets, then error. Подскажите пожалуйста где взять UMK или как хотя бы сделать UnWrap. И почему передается CEK в 65 байт а не в 44. И как вообще передается 256 битовый ключ и 32-х битный UNK в 65 байтах ( 520 бит ) Ведь как сказано в стандарте Цитата:5) The wrapped content-encryption key is (UKM | CEK_ENC | CEK_MAC). а это 8 + 32 + 4 = 44 байта Но строчка Код:var wrappedKey = agree.Wrap(symmetric, GostKeyWrapMethod.CryptoProKeyWrap);
возвращает массив 65 байт. Что занимает еще 21 байт и можно ли их как-то откинуть ? Например, если отправитель и получатель не меняются, то первые 5 байт всегда одинаковые 48-63-48-40-4 Отредактировано пользователем 5 декабря 2012 г. 15:03:42(UTC)
| Причина: Не указана
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close