Если открытый ключ двух файлов одинаков, достаточно ли сделать вывод, что они были подписаны одним и тем же сертификатом? - PullRequest
2 голосов
/ 28 июня 2011

Я реализую механизм автообновления для моего программного обеспечения.Msi на сервере подписано с помощью signtool.Мое приложение загружает MSI и читает открытый ключ загруженного MSI.Если открытый ключ совпадает с жестко закодированным в исходном коде, он выполнит msi и обновится сам.

Будет ли этого достаточно, чтобы гарантировать, что никакие вредоносные msi не будут выполнены по ошибке?Насколько я понимаю, файл будет иметь тот же открытый ключ ТОЛЬКО если подписан моим сертификатом.

Редактировать: С помощью Пити я смог определить, подписан ли msi моим сертификатом или нет.Однако это не решило мою проблему.Я все еще могу отредактировать подписанный MSI, используя такой инструмент, как Orca.Даже msi больше не совпадает с подписанным, с сертификатом ничего не происходит.Поэтому, когда я проверяю, подписан ли я msi, я получаю да.Хотя я понимаю, что это может быть предполагаемое поведение, но должен быть какой-то способ обнаружить, был ли MSI подделан ??

1 Ответ

5 голосов
/ 28 июня 2011

Скорее всего, если это тот же открытый ключ, да, это тот же сертификат. Но с этим знанием злоумышленник может легко имитировать ваш открытый ключ и прикрепить его к своему MSI, потому что, ну, он публичный. Вы должны использовать этот открытый ключ для проверки подписи на MSI, а не просто для проверки того, является ли он тем же открытым ключом, чтобы вы были уверены, что он был подписан вашим соответствующим закрытым ключом, который не имел бы ни один злоумышленник. Вы также должны запустить цепочку сертификатов и проверить подписи вплоть до доверенного центра сертификации.

Edit:

Что именно вы подписываете? Подпись не должна быть действительной, если то, что было подписано, изменено. Тем не менее, похоже, что код аутентификации сообщений (с ключом хэш) будет работать. Если у вас есть общий ключ хеширования, вы можете хэшировать MSI перед его загрузкой, а затем проверить хеш еще раз на стороне клиента. Или, если вы не хотите использовать хеш с ключами, вы можете использовать обычный хеш, а затем подписать значение хеша тем же самым закрытым ключом. Если вы можете «проверить» (т.е. дешифровать) хеш с помощью открытого ключа, вы знаете, что хеш пришел от вас, тогда вы можете повторно хешировать msi и проверить, совпадают ли хеши.

...