我有两个内容相同的文件: 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 "字怎么办?
openssl req -x509 -sha512 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
$ echo "Hi" > msg.txt
$ echo "Hi" > msg2.txt
$ openssl dgst -sha512 -sign key.pem -out /tmp/signature msg.txt
$ openssl base64 -in /tmp/signature -out signature
$ 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
$ openssl dgst -sha512 -verify pubkey.pem -signature /tmp/signature msg2.txt
Verified OK
我想如果我签署一个文件,签名应该附在文件的某个地方。
你明确地把签名放到了单独的文件中。/tmp/signature
您后来在验证签名时使用了这个签名--这解释了为什么签名不是文件的一部分。
而你没有签署一个文件,但你签署了一个文件的内容--这解释了为什么签名可以应用于两个内容完全相同的独立文件。