23.05.2007 15:06:10Вопрос по CryptoAPI Ответов: 12
Vetaliq
Перед мной стоит такая задача:
Есть подписанный файл .dll, есть файл с сертификатом подписчика .p7b
Нужно достать pulic key из сертификата подписчика чтобы проверить подпись в файле .dll
Не подскажете порядок действий и функций?
 
Ответы:
23.05.2007 17:11:21Василий
Обычно для проверки подписи используется весь сертификат подписавшего. Вы можете уточнить, какие функции использовались при подписи файлов dll? Тогда будет ясно, чем проверять.
23.05.2007 17:15:39Vetaliq
Не знаю какими функциями подписывался.
Разве не достаточно знать что при помощи данного сертификата?
24.05.2007 10:41:55Kirill Sobolev
Технология подписи Microsoft Authenticode предполагает наличие сертификата подписчика в самой подписи, а не в файле. Если у Вас сертификат именно в файле, то непонятно какой формат у подписи - просто подписанный хэш в ресурсе, или еще что-то. Поэтому посоветовать функцию которая бы это проверяла невозможно, не знаю подробностей.
24.05.2007 12:50:35Vetaliq
Сертификат подписчика есть в подписанном файле, я просто его установил, а потом экспортировал в файл.
24.05.2007 13:31:01Василий
Тем не менее, если не известно, как и чем подписывали файл, то вряд ли можно сказать, чем можно проверить подпись.
Вообще, получается странная постановка задачи - кто-то неизвестно как подписал файл (или целиком, или часть), использовалось ли при этом преобразование файла, опять же, неизвестно. И вот надо взять и проверить подпись. Предлагаю всегда возвращать успех при проверке подписи, т.к. любая подпись верна для хеша от некоторых данных (полученных по неизвестному алгоритму из исходного файла).
24.05.2007 13:39:52Kirill Sobolev
Ага :)
Кстати, Windows подпись проверяет нормально?
24.05.2007 14:22:36Vetaliq
Опишу задачу полностью: В программном продукте нашей компании нужно защитить несколько файлов от взлома. Для этого решили их подписать. Был сгенерирован сертификат при помощи которого был подписан файл myfile.dll Теперь моя задача написать код при помощи которого я смог бы проверить файл на компьютере, где не стоит наш сертификат, на наличие нашей подписи.
Поэтому вопросы: как это сделать? Какую информацию о подписи мне надо узнать? Подписывали при помощи утилиты signcode.exe
24.05.2007 15:36:31Kirill Sobolev
Вы бы сразу написали про signcode :)
Посмотрите функцию WinVerifyTrust, для проверки надо знать имя файла.
24.05.2007 15:58:10Vetaliq
Функция WinVerifyTrust скажет только что файл подписан, а мне нужно чтобы это был гарантировано наш сертфикат.
Или я не правильно ее использую...
24.05.2007 17:33:37Kirill Sobolev
В CryptoAPI таких функций нет, кроме как разбор подписи вручную. Попоробуйте использовать SignedCode из CAPICOM 2.0.
24.05.2007 18:01:47Vetaliq
А можно по подробнее про разбор подписи вручную, в первую очередь как её вытащить из файла?
25.05.2007 9:28:53Kirill Sobolev
Это Вам google поможет, про разбор Portable Executable. Внутри него обычный PKCS7 лежит.