Дублирование цифровых подписей?

Из того, что я понимаю о цифровых подписях, когда exe-файл подписывает код, «подписавший» изменяет сам PE. Я заметил, что он добавляет содержимое сертификата в конец PE, а также (очевидно) добавляет какую-то ссылку на заголовки.

Мой вопрос: насколько это безопасно? Разве кто-то, способный реконструировать исполняемый файл, не сможет подделать его в свой собственный исполняемый файл, тем самым подделав цифровую подпись?


person asudhak    schedule 07.08.2012    source источник
comment
Нет, потому что цифровая подпись также включает в себя хэш того, что подписывается. Если вы измените содержимое, исходный хеш не будет совпадать.   -  person vcsjones    schedule 08.08.2012
comment
Подписание кода — это операция с открытым/закрытым ключом. обратный инжиниринг исполняемого файла ничего не даст вам, если у вас также нет закрытого ключа, который изначально подписал exe   -  person Marc B    schedule 08.08.2012
comment
@vcsjones: имеет смысл, но если я могу контролировать хэш, имеет ли это значение?   -  person asudhak    schedule 08.08.2012
comment
@MarcB: скажем, компания А подписала исполняемый файл a.exe. Что мешает мне удалить данные сертификата и добавить их в мой b.exe? Я не пытаюсь ничего расшифровать. Я просто копирую некоторые уже зашифрованные данные. Вот если бы хэш был рассчитан, а потом зашифрован, то это, конечно, было бы невозможно.   -  person asudhak    schedule 08.08.2012
comment
@asudhak У вас нет контроля над подписью хэша, потому что он подписан закрытым ключом, которого у вас нет.   -  person vcsjones    schedule 08.08.2012
comment
.exe не шифруется с помощью подписи. Процесс подписи вычисляет хэш содержимого исполняемого файла (за вычетом места сохранения подписи) и шифрует хеш с помощью закрытого ключа. Другой конец пересчитает хэш, расшифрует сохраненный с помощью открытого ключа и сравнит. если хеши совпадают, то это один и тот же exe. ЕДИНСТВЕННЫЙ зашифрованный бит в файле — это хэш подписи.   -  person Marc B    schedule 08.08.2012
comment
@MarcB: Да, теперь мне ясно. Если по какой-то причине хэш не был зашифрован, то я предполагаю, что можно было бы подделать подписи.   -  person asudhak    schedule 08.08.2012
comment
Может ли кто-нибудь из вас опубликовать это как ответ, чтобы вопрос можно было закрыть?   -  person asudhak    schedule 08.08.2012
comment
Если бы хэш не был зашифрован, то это не была бы подпись. Это будет просто другое значение CRC.   -  person Marc B    schedule 08.08.2012


Ответы (1)


Подписание кода — это операция с открытым и закрытым ключом. Операция подписи вычисляет хэш файла .exe (за вычетом битов, в которых хранится подпись), а затем шифрует хэш с помощью закрытого ключа подписывающей стороны.

При проверке на стороне клиента клиент повторит вычисление хэша и расшифрует сохраненную подпись с помощью открытого ключа. Если два хэша совпадают, то exe не был подделан.

Единственные биты файла зашифрованы, это подпись - все остальное хранится в открытом виде. Ничто не мешает вам разорвать исполняемый файл и вставить его (или его части) в другой .exe.

Подпись предназначена не для предотвращения кражи, а для обнаружения несанкционированного доступа.

person Marc B    schedule 07.08.2012
comment
Кстати, я заметил, что цифровые подписи в исполняемом файле Windows ничему не мешают. Похоже, он просто используется, чтобы увидеть, был ли подделан исполняемый файл. Я могу ошибаться, или мои настройки могли быть каким-то образом настроены, но Windows даже не выдает ошибку о том, что цифровая подпись недействительна. Узнать, действительна цифровая подпись или нет, можно только изучив детали подписи. Я прав с этим? - person asudhak; 08.08.2012