为什么OpenSSL工具可以成功验证一个未签名的文件?

问题描述 投票:0回答:1

我有两个内容相同的文件: 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

现在,每一个只包含 "Hi "字的新文件都可以成功验证。如果其他用户创建的文件中含有 "Hi "字怎么办?

重现的步骤。

  1. 创建一个自签的PEM认证密钥对。
openssl req -x509 -sha512 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 
  1. 创建文件
$ echo "Hi" > msg.txt
$ echo "Hi" > msg2.txt
  1. 签署msg.txt
$ openssl dgst -sha512 -sign key.pem -out /tmp/signature msg.txt
$ openssl base64 -in /tmp/signature -out signature
  1. 验证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
  1. 验证msg2.txt签名
$ openssl dgst -sha512 -verify pubkey.pem -signature /tmp/signature msg2.txt
Verified OK
ssl openssl cryptography signing pem
1个回答
3
投票

我想如果我签署一个文件,签名应该附在文件的某个地方。

你明确地把签名放到了单独的文件中。/tmp/signature 您后来在验证签名时使用了这个签名--这解释了为什么签名不是文件的一部分。

而你没有签署一个文件,但你签署了一个文件的内容--这解释了为什么签名可以应用于两个内容完全相同的独立文件。

© www.soinside.com 2019 - 2024. All rights reserved.