пятница, 6 апреля 2012 г.

ГОСТ Р 34.10-2001 цифровая подпись

За стандарты вроде XML Signature убивал бы. Ну чего мешало подписывать XML как бинарные файлы, как CMS или S/MIME. На этот XML signature подсажены практически все федеральные службы: Банки, ФМС, ФТС и пр.
Что такого уродского в XML signature лучше всего без картинок объяснять, когда потеряется логическая нить, пора рубить с плеча.
Тут основной прикол заключается в исхдной постановке задачи, форматирование XML не должно влиять на результат. Т.е  если я навставлял пробелов или поменял местами атрибуты в тегах, переименовал пространства имен, то XML документ не изменился. Так что подпись не должна зависеть от форматирования. Так перед выполнением операции хеширования (контроля целостности) выполняется нормализация документа по определенному алгоритму.
Процедура подписи:

Составляется XML документ определенной структуры, с шапкой и телом, в тело вписывается структура Signature, которая состоит из чего подписываем (SignedInfo), чем подписываем (KeyInfo) и чего из этого получается (SignatureValue). Подписывается не сам сам документ, а хеш от нормализованного представления документа и хеш от нормализованной ключевой информации. Так что сам документ надо где-то сбоку пристроить в разделе (Object). А  в ключевую информацию предварительно вписать сертификат открытого ключа X509 упакованный в формате Base64 поверх формата DER. Хеши кодируются Base64 и вписываются в структуру SignedInfo, потом от нормализованного представления структуры SignedInfo cчитается хеш и вписывается в структуру CMS в раздел Signed-Attributes, кроме того в раздел Signed-Attributes можно вписать разные другие атрибуты подписи, например дату и время. Раздел подписывается и цифровая подпись попадает в структуру CMS. CMS кодируется Base64 и вписывается в структуру XML документа в раздел SignatureValue.

Между нами, чтобы подписать любой документ, хоть бинарный хоть текстовый достаточно посчитать хеш от документа и подписать хеш. В S/MIME кроме того добавляется сертификат открытого ключа.

Процедуру проверки подписи XML Signature описать?

Комментариев нет:

Отправить комментарий