logo Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Komatozzznik  
#1 Оставлено : 11 февраля 2020 г. 9:46:04(UTC)
Komatozzznik

Статус: Новичок

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

Сказал(а) «Спасибо»: 4 раз
Друзья, товарищи...
Есть у Вас демо страница
https://cryptopro.ru/sit...ge/cades_bes_sample.html
Мне необходимо повторить её "результат" в консольном приложении (Да, я понимаю, что при каждой подписи результат частично меняется)
Суть вопроса в том, что я не понимаю, как она "работает"
Я понимаю общий алгоритм, что она вычисляет хэш сообщения, шифрует его ключом из сертификата, добавляет(или нет?) открытый ключ и т.д., но как мне это повторить используя примеры из сдк?
Можно алгоритм по подробнее или ссылку на него? Т.е, какие процессы происходят после нажатия "подписать"? Код (естественно) писать не нужно, думаю всё есть в примерах, нужен только алгоритм.
Как я это вижу
1) Сообщение заворачивается в бинарник и вычисляется его хэш(по какому алгоритму?)
2) Хэш шифруется закрытым ключом.
3) Зашифрованный хэш подписывается с подкреплением сертификата(Помимо открытого ключа, надо ли мне добавлять какие то атрибуты?)

Я что-то упускаю в алгоритме(да и вообще не ошибаюсь в матчасте)? Вроде бы делал всё по этой логике, но мой "вывод" определённо отличается от того, что я получаю на странице.
Offline two_oceans  
#2 Оставлено : 11 февраля 2020 г. 11:06:14(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 62 раз
Поблагодарили: 219 раз в 206 постах
Добрый день. В очень общих чертах алгоритм похож. Совсем подробно подсказать не смогу - я больше по xades а не cades, хотя сходство в формате есть. Вообще есть высокоуровневый, среднеуровневый и низкоуровневый интерфейсы.
В высокоуровневый надо только передать параметры - данные, сертификат, цепочку сертификатов, некоторые параметры и функция все сделает из коробки. На тестовой страничке как раз такой вариант.
В низкоуровневом надо будет заморачиваться с отдельным вычислением хэша, подписанием хэша и сборой всего в формат cades. Алгоритм что написали как раз для него.
Среднеуровневый - получаете полуфабрикат, в который можно что-то добавить перед окончательным подписанием.
Цитата:
Как я это вижу
1) Сообщение заворачивается в бинарник и вычисляется его хэш(по какому алгоритму?)
Ну как бинарник... надо просто считать именно те байты которые есть в файле или строке в памяти, чтобы среда программирования не подбросила какую-нибудь автоматическую конвертацию кодовой страницы для текста. Вычисляется хэш, для подписей гост алгоритм фиксирован по алгоритма ключа, то есть для ключей гост-94 и гост-2001 был хэш гост-94, для ключей гост-2012 хэш тоже называется гост-2012, отличаются тем, что ключи и схема подписи 34.10, а хэш 34.11. По традиции длину в алгоритме гост обозначают по длине хэша, есть гост-2012 256 и гост-2012 512. На горизонте маячит гост-2015 там уже 34.12 и 34.13. Для зарубежных алгоритмов немного сложнее - для некоторых хэш фиксирован по алгоритму ключа, для некоторых (RSA) не фиксирован (можно выбирать из списка подходящих).
Цитата:
2) Хэш шифруется закрытым ключом.
Во-первых, хэш шифруется закрытым ключом в зарубежных алгоритмах. В гост-2001 и гост-2012 на этом месте разработчики алгоритма гост схитрили в закрытом/открытом ключа находятся части которые не подходят для прямого шифрования данных. За счет этого в зарубежном RSA длина ключа 2048..4096 бит, а в гост 256..512 бит. Вместо этого есть отдельная процедура "подписания" с участием частей закрытого ключа и отдельная процедура "проверка подписи" с участием частей открытого ключа плюс определенные параметры заданные в самом алгоритме. Предопределенные параметры объединены в парамсеты и оид парамсета может присутствовать в некоторых местах, а может не присутствовать - так как есть параметры, которые берутся по умолчанию. Поэтому если подписать не с тем парамсетом, много где не смогут проверить подпись. Однако смотрите дальше, вероятно первый хэш подписывать не придется, зато надо будет вычислить еще три-четыре хэша и подписать закрытым ключом только самый последний (ниже).

Цитата:
3) Зашифрованный хэш подписывается с подкреплением сертификата(Помимо открытого ключа, надо ли мне добавлять какие то атрибуты?)
Во-вторых, в случае bes может еще включаться хэш от подписанных атрибутов (заметьте, что есть и неподписанные). Тонкости уже отличаются в cades и xades, потому далее просто для справки. В xades от хэша данных и хэша подписанных атрибутов (а в подписанных атрибутах еще и хэш сертификата плюс опознавательные признаки сертификата - обычно издатель и номер сертификата) формируется структура SignedInfo, от которой вычисляется еще один хэш (сам вот этот хэш в отличие от предыдущих не включается в подпись) и он подписывается закрытым ключом (результат подписывания включается в подпись).

Сам сертификат не подписывается, лежит в неподписанной части структуры подписи. Как вариант вместо сертификата может быть только сам открытый ключ, но для квалифицированной ЭП сертификат обязателен.

Все части которые подписываются другими субъектами - соподписи других людей, подписанные метки доверенного времени и т.д. - включаются как неподписанные атрибуты.

Отредактировано пользователем 11 февраля 2020 г. 12:08:10(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Komatozzznik оставлено 11.02.2020(UTC)
Offline Андрей *  
#3 Оставлено : 11 февраля 2020 г. 11:21:45(UTC)
Андрей *

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

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

Сказал «Спасибо»: 333 раз
Поблагодарили: 1302 раз в 1017 постах
Здравствуйте.

На указанной странице формируется присоединенная подпись, вывод на странице в base64.
Посмотреть можно в js код и воспроизвести на .NET + CAdESCOM (если нужно)

или воспользоваться через MS CryptoAPI + .NET:

В SDK есть пример.
\Program Files (x86)\Crypto Pro\.NET SDK\Examples\simple.zip\CMS\cs\SingleSigner.cs
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Komatozzznik оставлено 11.02.2020(UTC)
Offline Андрей *  
#4 Оставлено : 11 февраля 2020 г. 11:24:33(UTC)
Андрей *

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

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

Сказал «Спасибо»: 333 раз
Поблагодарили: 1302 раз в 1017 постах
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Komatozzznik оставлено 11.02.2020(UTC)
Offline Komatozzznik  
#5 Оставлено : 11 февраля 2020 г. 11:51:41(UTC)
Komatozzznik

Статус: Новичок

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

Сказал(а) «Спасибо»: 4 раз
Попробую "переварить". Кое-какие ответы уже вижу, спасибо.
Если темы закрываете, прошу пару дней не закрывать (на случай доп. вопросов)
Offline Komatozzznik  
#6 Оставлено : 11 февраля 2020 г. 13:23:34(UTC)
Komatozzznik

Статус: Новичок

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

Сказал(а) «Спасибо»: 4 раз
Тему можно закрывать, нужные ответы действительно дали. Спасибо!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.