Добрый день. В очень общих чертах алгоритм похож. Совсем подробно подсказать не смогу - я больше по 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)
| Причина: Не указана