理论上,如果拥有公钥、签名和已签名的数据以及散列算法已知,则应该可以验证一条数据的签名。
我有所有这些二进制格式的组件。有人知道验证此签名的最简单方法吗?开放SSL?Python?一个例子会很棒。不写代码能做到吗?
理论上,如果拥有公钥、签名和已签名的数据以及散列算法已知,则应该可以验证一条数据的签名。
我有所有这些二进制格式的组件。有人知道验证此签名的最简单方法吗?开放SSL?Python?一个例子会很棒。不写代码能做到吗?
这是在 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函数。
您可以使用 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