理论上,如果拥有公钥,签名和已签名的数据并且哈希算法已知,则应该可以验证一条数据的签名。
我有二进制格式的所有这些组件。有没有人知道验证此签名的最简单方法? OpenSSL的?蟒蛇?一个例子就是很棒。可以在不编写代码的情况下完成吗?
答案 0 :(得分:1)
以下是如何在Ruby中完成的。
require 'openssl'
signature = File.read('/path/to/sig.der')
data = File.read('/path/to/data')
pub_key = File.read('/path/to/ecdsa_pub_key')
key = OpenSSL::PKey::EC.new(pub_key)
if key.dsa_verify_asn1(data, signature) == true
puts 'verified'
end
此代码要求使用椭圆曲线支持编译与Ruby链接的OpenSSL。 (Red Hat风格的Linux发行版不满足此要求)
如果您很好奇:dsa_verify_asn1使用OpenSSL API中的ECSDA_verify函数。
答案 1 :(得分:1)
您可以使用openssl对带有ECDSA签名的邮件进行签名,然后您可以使用openssl来验证签名:
签名消息(使用SHA256散列,给定消息和签名者的EC私钥):
openssl dgst -sha256 -sign ec-privatekey.pem message.txt > signature.der
然后,验证签名(再次使用SHA256哈希,给定消息,签名者的EC公钥以及上面创建的签名):
openssl dgst -sha256 -verify ec-publickey.pem -signature signature.der message.txt