0

理论上,如果拥有公钥、签名和已签名的数据以及散列算法已知,则应该可以验证一条数据的签名。

我有所有这些二进制格式的组件。有人知道验证此签名的最简单方法吗?开放SSL?Python?一个例子会很棒。不写代码能做到吗?

4

2 回答 2

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函数。

于 2013-06-07T02:24:15.757 回答
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
于 2015-12-17T02:07:19.367 回答