Почему инструменты OpenSSL могут успешно проверить неподписанный файл? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть два файла с одинаковым содержимым: msg.txt и msg2.txt. Msg.txt был подписан, msg2.txt - не был подписан. Но я вижу, что оба файла проходят проверку подписи.

Почему это так? Я думал, что если я подпишу файл, подпись должна быть прикреплена где-то к файлу. Но hexdump показывает, что между файлами нет никакой разницы.

msg.txt

$ hexdump -C msg.txt
00000000 48 69 0a                     |Hi.|
00000003

msg2.txt

$ hexdump -C msg2.txt 
00000000 48 69 0a                     |Hi.|
00000003

Теперь каждый новый файл, который содержит " Привет "только слово может быть успешно проверено. Что если другой пользователь создаст файл со словом «Привет»?

openssl req -x509 -sha512 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 
Создание файлов
$ echo "Hi" > msg.txt
$ echo "Hi" > msg2.txt
Знак msg.txt
$ openssl dgst -sha512 -sign key.pem -out /tmp/signature msg.txt
$ openssl base64 -in /tmp/signature -out signature
Проверка подписи msg.txt
$ openssl base64 -d -in signature -out /tmp/signature
$ openssl x509 -pubkey -noout -in cert.pem > pubkey.pem
$ openssl dgst -sha512 -verify pubkey.pem -signature /tmp/signature msg.txt
Verified OK
Проверка подписи msg2.txt
$ openssl dgst -sha512 -verify pubkey.pem -signature /tmp/signature msg2.txt
Verified OK

1 Ответ

3 голосов
/ 27 апреля 2020

Я подумал, что если я подпишу файл, подпись должна быть прикреплена где-то к файлу.

Вы явно помещаете подпись в отдельный файл /tmp/signature, который вы позже использовали, когда проверка подписи - что объясняет, почему подпись не была частью файла.

И вы подписали не файл, а подписали содержимое файла, что объясняет, почему подпись может применяться к двум отдельным файлам, которые имеют абсолютно одинаковое содержимое.

...