Подпись файла: Как мне убедиться, что Windows DLL не изменена? - PullRequest
2 голосов
/ 07 марта 2009

Я однажды задал вопрос здесь , если Windows DLL подписаны Microsoft. Я понял, что это так, и хороший друг сказал мне, что утилита SigCheck может предоставить информацию о подписи файлов; но вопрос остался:

Хотя SigCheck сообщает мне, подписан ли файл, я должен быть уверен, что Microsoft подписала этот файл, и никто другой не изменил его позже. Я имею в виду, что если кто-то подделает файл, а затем снова подпишет файл (разумеется, с именем Microsoft на подписи)?

Как я могу быть абсолютно уверен, что файл подлинный?

Ответы [ 3 ]

4 голосов
/ 07 марта 2009

"Я имею в виду, что если кто-то подделает файл, а затем снова подписывает файл (с именем Microsoft на подпись, конечно)? "

Это невозможно из-за характера цифровых подписей. Чтобы сгенерировать цифровую подпись, Microsoft хэшировала файл, а затем зашифровывала этот хэш своим закрытым ключом (известным только им). Насколько я понимаю, другие поставщики будут использовать закрытые ключи от других центров сертификации , которым Windows настроена на доверие по умолчанию.

Когда Windows проверяет файл, она расшифровывает подпись, используя соответствующий открытый ключ. Затем эта подпись сравнивается с текущей подписью. Если они совпадают, файл от Microsoft. Если они не совпадают, файл был подделан.

Таким образом, единственный способ заставить файл выглядеть так, как будто он был «подписан» Microsoft, - это украсть их закрытый ключ. Прочитайте статью о цифровой подписи в Википедии .

Подробнее о том, как на самом деле работает этот процесс, читайте «Подписание и проверка кода с помощью Authenticode» и «Введение в подписывание кода» в MSDN.

0 голосов
/ 07 марта 2009

Чтобы опираться на то, что уже опубликовали другие:

Отказ от ответственности: MS использует терминологию открытого / закрытого ключа с цифровыми подписями, которые меня сильно смущали. У меня только что было «Ага!» момент. Я постараюсь поделиться своими мыслями на случай, если это кому-нибудь поможет.

Введите ППК


Общая схема открытых и закрытых ключей работает путем генерации пары ключей, которые являются асимметричными. Вы не можете получить одно из другого (жизнеспособными средствами). Один из них называется закрытым ключом, а другой - открытым ключом.

Для связи один-ко-многим вы будете держаться за закрытый ключ и делиться открытым ключом. Ваши друзья, которые захотят поделиться с вами документами, подпишут их вашим открытым ключом. Вы расшифруете их своим закрытым ключом. Обратите внимание, что не имеет значения, какой именно ключ вы храните, а какой распространяете. Только не раздавай и то и другое.

Чем отличаются DigSigs?


Цифровые подписи немного странные. Это ситуация много-к-одному. Чтобы продолжить предыдущий пример: подумайте о ситуации, когда вы хотите поделиться документами с друзьями. Вам нужно будет подписать их, то есть зашифровать, и ваши друзья должны иметь возможность расшифровать. Таким образом, вы по-прежнему делитесь своим открытым ключом, но вместо этого подпишите свой открытый ключ и отправите его. У ваших друзей уже есть этот ключ, и они с радостью расшифруют. В этом случае ваш открытый ключ действует как закрытый ключ, а ваш закрытый ключ действует как открытый ключ.

Это то, что MS делает со своими dll.

Проверка на стороне клиента


Теперь для проверки. Сертификат, сгенерированный MS, не годится, пока центр сертификации не скажет, что он хорош. Это касается всех. Если вы хотите безопасно вести бизнес, вы должны получить сертификат от CA. Как только ваш клиент установит ваше приложение, программа проверки операционной системы извлечет ваш сертификат и проверит его, проверив что-то под названием цепочка доверия . Он проверит, кто заверил вашу подпись. Это родительский сертификат. Если система может идентифицировать родителя, они готовы, и вы приняты. Однако, если родитель не может быть проверен, вызывается родитель родителя. И цепочка продолжается, пока не будет найден узел, который можно проверить. Если ни один узел не найден, они сообщат о нем как о неподписанном, небезопасном.

Обратите внимание, что сертификаты могут быть отозваны. Итак, сертификат не означает, что ты хороший. Это еще одна причина, по которой процесс проверки становится важным.

0 голосов
/ 07 марта 2009

Из памяти процесс подписи использует криптографию с открытым ключом .

Эта диаграмма из Википедии объясняет процесс лучше всего.

В итоге

"сообщение, подписанное отправителем закрытый ключ может быть проверен любым кто имеет доступ к публике отправителя ключ, доказывая тем самым, что отправитель имел доступ к закрытому ключу (и поэтому, вероятно, будет человеком связан с открытым ключом), и часть сообщения, которая имеет не был подделан. "

т. Sigcheck выполняет проверку с использованием открытого ключа Microsoft для файлов, которые были ранее подписаны с использованием закрытого ключа Microsoft (и, конечно, только у Microsoft есть доступ к закрытому ключу).

...