为什么 OpenSSL 工具可以成功验证未签名的文件?
Why OpenSSL tools can successfully verify a not signed file?
我有两个内容相同的文件: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" 个单词的文件怎么办?!
重现步骤:
- 创建自签名 PEM 证书-密钥对
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
I thought if I sign a file, the signature should be attached somewhere to the file.
您明确地将签名放入单独的文件 /tmp/signature
中,您稍后在验证签名时使用该文件 - 这解释了为什么签名不是文件的一部分。
而且您没有签署文件,而是签署了文件的内容 - 这解释了为什么可以将签名应用于内容完全相同的两个单独的文件。
我有两个内容相同的文件: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" 个单词的文件怎么办?!
重现步骤:
- 创建自签名 PEM 证书-密钥对
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
I thought if I sign a file, the signature should be attached somewhere to the file.
您明确地将签名放入单独的文件 /tmp/signature
中,您稍后在验证签名时使用该文件 - 这解释了为什么签名不是文件的一部分。
而且您没有签署文件,而是签署了文件的内容 - 这解释了为什么可以将签名应用于内容完全相同的两个单独的文件。