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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Shrike  
#1 Оставлено : 18 мая 2011 г. 23:27:36(UTC)
Shrike

Статус: Участник

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

Здравствуйте.

Диклаймер: начинающий юзер КриптоПро и т.п.

Задача: в клиентском приложении (.net4) требуется подписание документов (бинарных данных) ЭЦП и их шифрование. Клиент взаимодействует с собственным сервером (т.е. с УЦ напрямую не взаимодействует).
Также клиент должен уметь генерировать ключевую пару для запроса сертификата ЭЦП у сервера (но не используя протоколы УЦ, так что формат запроса значения не имеет).

Изучаю вопрос какое API использовать в клиенте. В качестве CSP - могут быть КриптоПро от 2.0 и выше.

Взгляд упал на Sharpei, прочитал весь форум, остались следующий вопросы:
- правильно ли я понимаю, что использовать .net стек System.Cryptography без Sharpei так, чтобы использовался КриптоПро CSP, я не могу? Т.е. я должен использовать CryptoApi/CAPICOM.
- чем Sharpei принципиально лучше, чем CryptoApi? Понятно, что это позволит использовать .net API System.Cryptography.* в своем приложении. Но есть ли какие-то другие причины помимо удобства?
- насчет удобства (.net vs raw CryptoApi). Функций capi вроде не так много, p/invoke заглушки получить не проблема (http://www.idrix.fr/Root/Samples/Capi.cs). Насколько сильно использование Sharpei упрощает работу с подписанием/шифрованием?
- можно ли использовать Sharpei для генерации ключей (для запроса сертификата)? как?
- я много раз читал здесь, что Sharpei требует отдельного инсталлятора и установки в GAC. Не могли бы вы пояснить причину этого? Для "нормальных" сборок .net это довольно странное требование. В чем техническая причина? Недостатки очевидны - я не могу распространять приложение с Sharpei по ClickOnce. Да понятно, что КриптоПро все равно ставить, но КриптоПро часто уже стоит и не меняется.

Offline Максим Коллегин  
#2 Оставлено : 19 мая 2011 г. 0:49:41(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,405
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 720 раз в 624 постах
1. Можете. pkcs#7 вполне функционален, начиная с CSP 3.0
2. А чем .net лучше с++ или java? Он другой. Нужен он в основном для работы самого фреймворка и стандартных приложений на нем. (sslstream, WCF, SharePoint, XMLDsig, XMLEncrypt и т.д.)
3. При наличии отлаженных p/invoke - не сильно, но порог вхождения для CAPI несколько выше. В комплект SDK входит множество полезных примеров.
4. Можно, есть в примерах.
5. Из-за внутренних механизмов безопасности framework
Знания в базе знаний, поддержка в центре поддержки
Offline Shrike  
#3 Оставлено : 19 мая 2011 г. 8:04:34(UTC)
Shrike

Статус: Участник

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

Спасибо за ответы!

maxdm написал:
1. Можете. pkcs#7 вполне функционален, начиная с CSP 3.0

Извините, не понял, что вы подразумеваете под "pkcs#7 вполне функционален, начиная с CSP 3.0" ?
Как же я смогу шифровать/подписывать через System.Security.Cryptography без класса-реализации CSP? К кому обращаться?

maxdm написал:
2. А чем .net лучше с++ или java? Он другой. Нужен он в основном для работы самого фреймворка и стандартных приложений на нем. (sslstream, WCF, SharePoint, XMLDsig, XMLEncrypt и т.д.)

А. Это аргумент. Да, мой-то код сможет заюзать CryptoApi, но WCF нет. Логично.

maxdm написал:
3. При наличии отлаженных p/invoke - не сильно, но порог вхождения для CAPI несколько выше. В комплект SDK входит множество полезных примеров.


maxdm написал:
4. Можно, есть в примерах.

Да, нашел пример simple\KeyManage\cs\GostKeyManage.cs
Немного странно, что генерация ключей в контейнер и получение ключей из контейнера делаются одинаковым кодом.
Как с помощью Sharpei просмотреть все контейнеры? Типа как в самом КриптоПро CPS на закладке Сервис, кнопка "Протестировать" (контейнер закрытого ключа), потом "Browse".

maxdm написал:
5. Из-за внутренних механизмов безопасности framework

Уточните, пож-та, что за механизмы безопасности? Речь про CAS?
Насколько мне известно нет никакой принципиальной разницы для исполняемого кода в сборке, загруженной из GACа и из локальной папки, кроме того, что сборка из GACa всегда будет в FullTrust. Проблема на наличии нужны permissions или еще в чем-то?
Offline Максим Коллегин  
#4 Оставлено : 19 мая 2011 г. 17:01:45(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,405
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 720 раз в 624 постах
1. CSP нужен всегда
2. Функциональность выбора контейнера сделана в последних релизах - посмотрите в ветке форума.
3. Да, дело в Permissions.
Знания в базе знаний, поддержка в центре поддержки
Offline Shrike  
#5 Оставлено : 19 мая 2011 г. 17:53:47(UTC)
Shrike

Статус: Участник

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

maxdm написал:
1. CSP нужен всегда

Вы имеете в виду КриптоПро CSP? Это понятно, без него говорить не о чем.
Я имел в виду, не очень понятно как я могу работать через System.Security.Cryptography не имея типа реализации AsymmetricAlgorithm...

maxdm написал:
2. Функциональность выбора контейнера сделана в последних релизах - посмотрите в ветке форума.

Вы про Gost3410CryptoServiceProvider.SelectContainer? Это хорошо, но надо без вашего UI - чтобы был механизм обхода считывателей и контейнеров на них.

maxdm написал:
3. Да, дело в Permissions.

Если дело в permissions, то установка в GAC не может быть обязательным требованием. А просто чтобы заранее избежать лишних вопросов, разве нет?
Если я буду загружать Sharpei в апдомен с FullTrust (а по умолчанию это так и есть), все должно работать.. Или есть какие-то нюансы?
Offline Челпанов А.  
#6 Оставлено : 19 мая 2011 г. 18:23:10(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Цитата:
Можете. pkcs#7 вполне функционален, начиная с CSP 3.0

- CSP достаточно и 2.0
Цитата:
Я имел в виду, не очень понятно как я могу работать через System.Security.Cryptography не имея типа реализации AsymmetricAlgorithm...

- С System.Security.Cryptography.Pkcs и System.Security.Cryptography.X509Certificates работать без Gost3410CryptoServiceProvider сложно, но есть общие способы работы (CspParameters...) с помощью которых что-то сделать можно и без Sharpei. Удасться, например, проверить подпись под CMS документом.
Цитата:
Вы про Gost3410CryptoServiceProvider.SelectContainer? Это хорошо, но надо без вашего UI - чтобы был механизм обхода считывателей и контейнеров на них.

- Если без окон, то только через P/Invoke. Microsoft такой функциональности не предоставляет, рекомендует пользоваться сертификатами в My (а про контейнеры и их именование пользователю забыть).
Цитата:
Если дело в permissions, то установка в GAC не может быть обязательным требованием.

- Если бы все нубы были такими, жить стало бы проще, и тех. поддержка была бы делом очень занимательным. Permission действительно важны, но это не все. Microsoft не всегда аккуратно обращается с криптографическими алгоритмами: в некоторых случаях (например, получение секретного ключа по сертификату) разрешены только алгоритмы RSA и DSA; мы исправляем эту ситуацию; исправление делаем не .Net средствами, а миксом из нативных средств и управляемого кода. Поставить такой Mix clickOnce все равно не получится, как минимум по тому, что этот механизм стартует до загрузки default домена.
С уважением, Александр.
Offline Shrike  
#7 Оставлено : 19 мая 2011 г. 19:09:49(UTC)
Shrike

Статус: Участник

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

Челпанов А. написал:
Цитата:
Можете. pkcs#7 вполне функционален, начиная с CSP 3.0

- CSP достаточно и 2.0
Цитата:
Я имел в виду, не очень понятно как я могу работать через System.Security.Cryptography не имея типа реализации AsymmetricAlgorithm...

- С System.Security.Cryptography.Pkcs и System.Security.Cryptography.X509Certificates работать без Gost3410CryptoServiceProvider сложно, но есть общие способы работы (CspParameters...) с помощью которых что-то сделать можно и без Sharpei. Удасться, например, проверить подпись под CMS документом.

А использовать безопасность WCF на сертификатах получится?

Челпанов А. написал:
Цитата:
Вы про Gost3410CryptoServiceProvider.SelectContainer? Это хорошо, но надо без вашего UI - чтобы был механизм обхода считывателей и контейнеров на них.

- Если без окон, то только через P/Invoke. Microsoft такой функциональности не предоставляет, рекомендует пользоваться сертификатами в My (а про контейнеры и их именование пользователю забыть).

Я как раз не предлагаю юзеру думать про контейнеры, именно поэтому SelectContainer не нравится.
Потом когда сертификаты в MY связаны с ключами действительно логичней идти от сертификата. Но у меня предварительный этап: я генерирую ключи в контейнере, получаю открытый ключи и отсылаю куда-то (на "сервер").
Потом получаю с сервера сертификат и мне надо связать этот сертификат с ключами в контейнере. Логично было бы перебрать контейнеры и найти нужный с открытым ключем из сертификата.

Челпанов А. написал:
Цитата:
Если дело в permissions, то установка в GAC не может быть обязательным требованием.

- Если бы все нубы были такими, жить стало бы проще, и тех. поддержка была бы делом очень занимательным. Permission действительно важны, но это не все. Microsoft не всегда аккуратно обращается с криптографическими алгоритмами: в некоторых случаях (например, получение секретного ключа по сертификату) разрешены только алгоритмы RSA и DSA; мы исправляем эту ситуацию; исправление делаем не .Net средствами, а миксом из нативных средств и управляемого кода. Поставить такой Mix clickOnce все равно не получится, как минимум по тому, что этот механизм стартует до загрузки default домена.

понятно, что дело темное... Серьезное ограничение получается для библиотеки :( ClickOnce очень не хочется терять.
А баги на connect.microsoft.com создавали?
Offline Shrike  
#8 Оставлено : 19 мая 2011 г. 19:21:26(UTC)
Shrike

Статус: Участник

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

Кстати, то, что вызов Gost3410CryptoServiceProvider.SelectContainer(true, false, IntPtr.Zero) генерирует исключение CryptographyException ("The action was cancelled by the user.") , если в диалоге нажать отмену, считаю неправильным. Тема конечно дискутабельная, но корректней возвращать null. А исключение генерировать, если действительно произошла ошибка.
В текущем варианте понять случилась ошибка или нет (нажали "отмену" - это нормально, не надо никуда логировать, показывать мессаджбоксы и т.п.) невозможно, кроме как не сравнив текст исключения (sucks).
Offline sedovav  
#9 Оставлено : 31 июля 2012 г. 16:33:21(UTC)
sedovav

Статус: Участник

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

Сказал «Спасибо»: 5 раз
Подскажите, а с КриптоПро .Net та же ситуация, что и с Sharpei - требует отдельного инсталятора и установки в GAC?
Offline Максим Коллегин  
#10 Оставлено : 1 августа 2012 г. 14:44:41(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,405
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 720 раз в 624 постах
Да.
Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.