【问题标题】:How to store an OpenSSL signature to a file in ASN.1 format如何将 OpenSSL 签名存储到 ASN.1 格式的文件中
【发布时间】:2019-04-12 11:24:38
【问题描述】:

我正在实现已散列输入input_hash 的“签名”步骤。这可以直接用

openssl pkeyutl -sign -in input_hash -inkey private.key -out signature 

但是我使用外部设备来计算响应。这给了我一个 64 字节的响应,我现在已经设法正确地转换为 Openssl 使用的结构。这应该是来自 openssl/bn.hECDSA_SIG 结构体

struct ECDSA_SIG {
    BIGNUM *r;
    BIGNUM *s;
}

接下来,我想使用正确的 ASN.1 格式将此结构存储为二进制 (DER) 文件。但是我无法在 openssl 库中找到合适的函数。

请注意,我使用的是 EC 密钥,因此不能使用 openssl rsautl 工具。通过查看上面 openssl 命令的输出,我看到了我想要实现的相同结构。

$ openssl asn1parse -in signature -inform DER
0:d=0  hl=2 l=  69 cons: SEQUENCE
2:d=1  hl=2 l=  33 prim: INTEGER :E8229B1CF88EC5BC6E8270161E34D986FC8A5A7D5B2ED3B7C65BA808494E7030
37:d=1  hl=2 l=  32 prim: INTEGER :3FF76A6CB0210037C2D0F9075080E1B6461CDD8F52BB2374DB2B350E81C8A5C3

现在唯一缺少的步骤是以正确格式将我的ECDSA_SIG 结构存储到文件中。否则使用以下命令在 openssl 中进行验证

openssl pkeyutl -verify -inkey public.key -sigfile signature -pkeyopt digest:sha256 -in input_hash -pubin  

显然失败了。

【问题讨论】:

    标签: openssl asn.1


    【解决方案1】:

    如果您在ECDSA_SIG 结构中有签名,那么您可以使用i2d_ECDSA_SIG 函数将其转换为DER 格式。记录在这里:

    https://www.openssl.org/docs/man1.1.1/man3/i2d_ECDSA_SIG.html

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 2022-11-04
      • 1970-01-01
      • 2020-01-25
      • 2021-07-30
      • 1970-01-01
      • 2013-10-14
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多