如何使用签名数据,签名和签名者ECDSA公钥验证ECDSA签名?

时间:2013-06-06 22:21:56

标签: algorithm openssl digital-signature ecdsa

理论上,如果拥有公钥,签名和已签名的数据并且哈希算法已知,则应该可以验证一条数据的签名。

我有二进制格式的所有这些组件。有没有人知道验证此签名的最简单方法? OpenSSL的?蟒蛇?一个例子就是很棒。可以在不编写代码的情况下完成吗?

2 个答案:

答案 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