Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.01.2019(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 3 раз Поблагодарили: 5 раз в 5 постах
|
Добрый день. На днях борясь с ФСС обнаружил кой чего (безотносительно самого ФСС ). При генерации сессионного ключа 28147 всегда используется 2001 провайдер (TypeId=75). Соответственно параметры CIPHER_OID ключа всегда берутся для указанного провайдера. И если при шифровании ключа используется новый сертификат ФСС (уполномоченного лица) с 2012 ключом получается нехорошо :-(. В обернутом ключе параметры алгоритма прописываются 1.2.643.2.2.31.1 когда как ФСС ожидает 1.2.643.7.1.2.5.1.1. Средствами крипто про.НЕТ похоже не исправить :-(
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Спасибо, подумаем, как поправить. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 217
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 63 раз в 59 постах
|
Добрый день.
Шифрование и создание ключа делаете сами, или он вся работа с ним исключительно внутри WCF и\или XML?
Можете предоставить пример кода, который вы используете? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.01.2019(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 3 раз Поблагодарили: 5 раз в 5 постах
|
Что то навроде такого: Код:
public static void EncryptXmlElement(XmlElement elementToEncrypt, X509Certificate2 certificateToEncrypt, X509Certificate2 certificateToDecrypt = null)
{
if (elementToEncrypt == null)
{
throw new ArgumentNullException("elementToEncrypt");
}
if (certificateToEncrypt == null)
{
throw new ArgumentNullException("certificateToDecrypt");
}
var encryptedData = new EncryptedData
{
Type = EncryptedXml.XmlEncElementContentUrl,
EncryptionMethod = new EncryptionMethod(EncryptionMethod_XmlEncGost28147Url),
KeyInfo = new KeyInfo()
};
using (var key = new Gost28147CryptoServiceProvider())
{
var encryptedXml = new EncryptedXml();
var data = encryptedXml.EncryptData(elementToEncrypt, key, false);
byte[] encryptedKey = null;
if (certificateToEncrypt.PublicKey.Key is Gost3410)
{
encryptedKey = CPEncryptedXml.EncryptKey(key, (Gost3410)certificateToEncrypt.PublicKey.Key);
}
else if (certificateToEncrypt.PublicKey.Key is Gost3410_2012_256)
{
encryptedKey = CPEncryptedXml.EncryptKey(key, (Gost3410_2012_256)certificateToEncrypt.PublicKey.Key);
}
else if (certificateToEncrypt.PublicKey.Key is Gost3410_2012_512)
{
encryptedKey = CPEncryptedXml.EncryptKey(key, (Gost3410_2012_512)certificateToEncrypt.PublicKey.Key);
}
else
{
throw new InvalidOperationException("Unsupported key algorithm.");
}
var ek = new EncryptedKey
{
CipherData = new CipherData(encryptedKey),
EncryptionMethod = new EncryptionMethod(certificateToEncrypt.PublicKey.Key.KeyExchangeAlgorithm)
};
if (certificateToDecrypt != null)
{
ek.KeyInfo.AddClause(new KeyInfoX509Data(certificateToDecrypt));
}
encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));
encryptedData.CipherData.CipherValue = data;
}
EncryptedXml.ReplaceElement(elementToEncrypt, encryptedData, false);
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 217
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 63 раз в 59 постах
|
NETSetup.zip (1,501kb) загружен 22 раз(а).Попробуйте сборку из вложения. Пароль - 1. В данной сборке возможно явно задать параметры шифрования у объекта Gost28147CryptoServiceProvider: Код:
using (var key = new Gost28147CryptoServiceProvider())
{
key.CipherOid = "1.2.643.7.1.2.5.1.1";
// ...
}
Также возможно заменить используемый по умолчанию провайдер для Gost28147CryptoServiceProvider. Для этого в конфигурации необходимо создать секцию CryptoProNetSettings: Код:
<configuration>
<configSections>
<section name="CryptoProNetSettings" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
<CryptoProNetSettings>
<add key="DefaultSymmetricProvType" value = "80"/>
</CryptoProNetSettings>
</configuration>
|
|
1 пользователь поблагодарил Артём Макаров за этот пост.
|
migel оставлено 05.02.2019(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.01.2019(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 3 раз Поблагодарили: 5 раз в 5 постах
|
Автор: Артём Макаров NETSetup.zip (1,501kb) загружен 22 раз(а).Попробуйте сборку из вложения. Пароль - 1. Докладываю - принудительная установка CIPHEROID для провайдера работает. Но так как ФСС использует для экспорта/импорта ключей CALG_PRO_EXPORT то связь все равно не удается :-(. Если Вы уж синхронизируете URI и JCP/NET решения нельзя ли все таки как то указать в URI параметры алгоритма экспорта ключей для CALG_PRO_EXPORT и для CALG_PRO12_EXPORT Что нибудь этакое: Код:
public const string XmlKeyExchange2001 = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001";
public const string XmlKeyExchange2012_256_PRO = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256-01";
public const string XmlKeyExchange2012_256_P12 = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256-12";
public const string XmlKeyExchange2012_512_PRO = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-512-01";
public const string XmlKeyExchange2012_512_P12 = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-512-12";
Ибо делать два подхода к снаряду невместно :-) Отредактировано пользователем 5 февраля 2019 г. 16:11:46(UTC)
| Причина: Не указана
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Добавлять -01 или -12 наверно очень плохой вариант, лучше уж при такой идее вдохновиться принципом формирования урн для алгоритма каноникализации и параметры реализации алгоритма указывать после специального символа (решетки или двоеточия) вроде #ProExport #Pro12Export или :export:pro12 :export:pro.
Ну а в целом, менять стандарт по урн конечно непросто, "2 раза подходить" проще. Допустим ставить CALG_PRO12_EXPORT по умолчанию по урн госта-2012, но давать возможность переопределить на CALG_PRO_EXPORT. Или автоматом определять асимметричный ли ключ и от этого танцевать. Вроде уже что-то подобное обсуждали и решили не вводить новых идентификаторов.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.01.2019(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 3 раз Поблагодарили: 5 раз в 5 постах
|
Автор: two_oceans Добавлять -01 или -12 наверно очень плохой вариант, лучше уж при такой идее вдохновиться принципом формирования урн для алгоритма каноникализации и параметры реализации алгоритма указывать после специального символа (решетки или двоеточия) вроде #ProExport #Pro12Export или :export:pro12 :export:pro.
Это уже детали - основная идея чтобы алгоритм специфицировался более подробно. Автор: two_oceans Ну а в целом, менять стандарт по урн конечно непросто, "2 раза подходить" проще. Допустим ставить CALG_PRO12_EXPORT по умолчанию по урн госта-2012, но давать возможность переопределить на CALG_PRO_EXPORT. Или автоматом определять асимметричный ли ключ и от этого танцевать. Вроде уже что-то подобное обсуждали и решили не вводить новых идентификаторов.
Согласно высказываниям этого форума для симметричного ключа допустимо оба варианта. А ежели еще какой алгоритм врапа ключей вылезет - еще один подход делать?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
Подобные вещи всё-таки уместнее обсуждать в рамках ТК-26, а не здесь. Пока мы принили волевое решение использовать PRO12 для gost12. При расшифровании пытаемся использовать PRO_EXPORT, если PRO12 не подходит. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.01.2019(UTC) Сообщений: 43 Откуда: Москва Сказал(а) «Спасибо»: 3 раз Поблагодарили: 5 раз в 5 постах
|
Автор: Максим Коллегин Подобные вещи всё-таки уместнее обсуждать в рамках ТК-26, а не здесь.
На какой площадке ведется обсуждение? Автор: Максим Коллегин Пока мы принили волевое решение использовать PRO12 для gost12. При расшифровании пытаемся использовать PRO_EXPORT, если PRO12 не подходит.
Это замечательно, только для обмена со сторонними сервисами как нибудь нужно и шифровать с разными алгоритмами. Тот же (Не к ночи будет упомянут) ФСС PRO12 не понимает в принципе - ему PRO нужен.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close