10.10.2006 17:48:36Извлечение данных из подписи Ответов: 11
Евгений
Сразу хочю извиниться за возможно "детский" вопрос.

Хотелось бы узнать если есть электронный документ подписанный с помощью закрытого ключа. То можно ли по подписи на документе узнать средствами КриптоПро JCP кто автор подписи. (CN например получить). Чтобы потом на основании какого то извлеченного идентификатора можно было поискать на УЦ открытый сертификат для процедуры валидации.

PS а то хранилище доверенных сертификатов у пользователя не резиновое :(

Большое спасибо за ответы.
 
Ответы:
11.10.2006 18:43:05Василий
Тут всё зависит от того, как и какими средствами подпись делается. Если это просто 64 байта, полученные при подписи данных, то никакой информации о ключе и сертификате подписывающего нет. С другой стороны, сертификат подписывающего целиком можно включить в передаваемое сообщение. Либо только сведения о сертификате. Если формат сообщения pkcs7, так и будет.
12.10.2006 9:45:31Евгений
Большое спасибо за ответ.

А можно ли каким то образом не включая дополнительно в документ сертификат пользователя получить какую либо информацию из самой подписи? Что для этого надо сделать при работе с КриптоПро JCP
13.10.2006 8:45:26Евгений
позволю себе немного детализировать проблему:
клиенту приходит подписанный документ, и если контрагентов очень много то клиент о них не знает, о них всех знает только УЦ. А там в общем случае могут быть тысячи сертификатов. тоесть заправшивать их все с УЦ и пытаться провеить подпись окажеться очень длительным процессом. Тоесть каким то образом можно ли что то получить из подписанного документа, чтобы потом на основании этого получить нужный сертификат от УЦ.
И если можно хотелось бы узнать как это можно сделать средствами КриптоПро JCP.

Заранее блогадарю за ответ.
13.10.2006 12:43:23Василий
Собственно говоря, это не задача JCP - он этого не умеет. Вам нужно выбрать формат передаваемых сообщений - будет ли это pkcs7 или какой-то ваш собственный формат. Тогда данные о подписывающем можно будет добавить в само сообщение и на приёмной стороне добыть оттуда. Если сертификатов реально много, и не хочется ставить их локально, идеальным вариантом будет pkcs7 с включённым в сообщение сертификатом подписавшего. Тогда для проверки подписи можно будет использовать сертификат из самого сообщения.

В принципе, можно вообще обойтись без сертификатов - включать в сообщение только открытый ключ подписывающего (блоб PUBLICKEYBLOB). Для проверки подписи этого достаточно, правда, в этой схеме нет возможности проверить действительность (в юридическом смысле) ключа подписывающего без использования какого-то собственного механизма (например, самостоятельно вести БД действительных ключей).
20.09.2007 15:31:47Стас
Файл подписан двумя подписями. Формат передаваемого сообщения pkcs7. Подскажите какими функциями можно воспользоваться чтобы вытянуть информацию о подписчике из подписи?
20.09.2007 16:17:27Kirill Sobolev
CryptMsg*
20.09.2007 16:22:26Стас
Шутку понял. Смешно :)
А по конкретнее?
20.09.2007 16:37:29Стас
MSDN рулит!!!
В CryptVerifyMessageSignature есть последний параметр, как раз то что мне нужно.
20.09.2007 16:44:56Kirill Sobolev
Смейтесь дальше :)
Когда надоест - поищите в MSDN Low-level Message functions.
CryptVerifyMessageSignature предназначена для проверки подписи, а не для извлечения ее параметров. И последний параметр там - сертификат подписчика, если он был найден.
20.09.2007 17:14:18Стас
Ради эксперимента, я удалил из системы сертификат которым подписывал. При проверке файла функция CryptVerifyMessageSignature в последнем параметре возвратила данные этого (удаленного) сертификата.
20.09.2007 17:24:44Kirill Sobolev
По умолчанию она берет сертификат из подписи.