08.02.2007 16:49:02 | Добавление атрибута в подписанное сообщение. | | Ответов: 11 |
|
Андрей | | |
|
Есть некоторое подписанное сообщение, каким образом добавить в него неаутентифицированный атрибут?
Предлагается использовать CryptMsgControl с ключем CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR.
Соответственно, в структуре CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR заполняются все поля. И тут возникает непонятность с тем, как сказать какой OID будет у добавляемого атрибута.
Если при первоначальном создании подобная проблема решается использованием CRYPT_ATTRIBUTE, то в случае добавления в уже подписанное, там такой возможности не могу найти. Какие варианты решения даной проблемы? |
|
Ответы:
|
08.02.2007 18:26:44 | Kirill Sobolev |
|
Точно также. Заполняете CRYPT_ATTRIBUTE, потом кодируете его CryptEncodeObjectEx(..,PKCS_ATTRIBUTE,..) и получившийся ASN передаете через поле CRYPT_DATA_BLOB BLOB. |
|
08.02.2007 19:15:34 | Андрей |
|
Спасибо! Почему-то упустил из виду возможность кодирования самой структуры атрибута. |
|
16.03.2007 14:52:00 | Андрей |
|
Здравствуйте, при добавлении подписи к уже подписанному сообщению, возникает необходимость добавить unsigned атрибут к подписи. Добавление проходить успешно, но почему-то не для того подписавшего лица - все они складываются в самую первую подпись, т.е. подписав и добавив атрибут 5 раз, получим 5 подписей, и только первую с 5 атрибутами.
При добавлении такого атрибута используется структура CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
в ней задается параметр dwSignerIndex, соответствующий текущему индексу добавляемой подписи. Как можно побороть данную проблему? |
|
19.03.2007 10:48:07 | Андрей |
|
Почему-то начинает меняться порядок подписей при добавлении unauth атрибута.
Т.е. при добавлении подписи с таким атрибутом и последующим добавлением подписей CryptMsgControl с CMSG_CTRL_ADD_SIGNER, подписи начинают идти с порядком 2, 1, потом 2, 3, 1 и т.д. |
|
19.03.2007 12:11:37 | Kirill Sobolev |
|
Собственно dwSignerIndex и определяет, к какой подписи будет добавлен атрибут.
А вообще порядок подписей в PKCS7 нефиксирован
SignerInfos ::= SET OF SignerInfo |
|
19.03.2007 12:59:06 | Андрей |
|
Тогда как определять, какой подписи добавить атрибут, если их порядок не фиксирован?
По идее, надо при создании подписи, получить какой-то идентификатор подписи? Но опять же, непонятно, под каким номером добавилась подпись. Замкнутый круг? |
|
19.03.2007 13:31:46 | Kirill Sobolev |
|
Идентификатор подписи - это реквизиты подписчика. |
|
19.03.2007 14:44:57 | Андрей |
|
Под реквизитами понимается серийный номер сертификата и выдавшее лицо? Но тогда, если подписчик подпишет файл несколько раз, то будет несколько подписей с одними идентификаторами, что не даст определить порядковый номер подписи же? |
|
19.03.2007 15:34:49 | Kirill Sobolev |
|
не даст
а какой смысл подписывать один и тот же файл несколько раз? |
|
19.03.2007 15:40:02 | Андрей |
|
Ну пользователю всякое может захотеться:(.
Т.е., получается, что стандартными средствами CryptoApi не получится понять, какой индекс у подписи и, соответственно, добавление по нужным индексам атрибутов? |
|
19.03.2007 16:14:40 | Kirill Sobolev |
|
Если один и тот же пользователь подписывает один и тот же файл несколько раз - то эти подписи равнозначны и все равно в какую добавлять атрибут.
Если знать чем одна подпись от другой отличается, то индекс определить можно, именно средствами CryptoAPI. |
|