5

我想知道什么规范(或标准)定义了ECDSA签名和公钥的数据格式?

我正在测试 java 卡上的 ECDSA 签名。我发现签名和公钥值中有TLV格式。

* Public key (TV format)
[Tag=04] [public key value 1] [public key value 2]
04 038A3F59E813995DAB730588CFCBB985F5A1ED90C0D62960AE0B274D 2E6B12672318E0B113DECC0406B62887B6BCB9B1583B1A50779EAB5A

* Signature (TLV format)
[Tag=30] [Length=3C~3E] [Tag=02] [Length=1C~1D] [signature value 1] [Tag=02] [Length=1C~1D] [signature value 2]

303C 021C 7EEB0B2596F74344B3D7B046EA0BD17C4461FC277658CE93509F1674      021C 4F5DBFB30D994664DA80528847A767F0194876B068E5958161797991
303E 021D 0080F20B82D407AE663F010F4990F12073631D653EA1D65DC75EBD4293    021D 00880DB667EF51AEA8E7C9BB012496C7C9ECE3BC5829B82B692B9211C3
303D 021D 00F77447EF326A4A49597D0B839F68F524891F3655DA4561F1AA10EF70    021C 152F7FF18644C5E5C9118736E1F7528F0B10C5FF641C7B7CDF012129
303D 021D 00A2EBCC5C5981341D0726F2E846CC3879C74EFD64D8698589A8CEAB60    021C 6E04FF884A451D7C0737A182BC2DE7F7D3008EE182B46A009BFFC9E8

我认为数据格式是在某些规范或标准中定义的。我只想知道文档名称。

4

3 回答 3

4

ASN.1 结构在 SECG(高效密码学标准组)的SEC 1:椭圆曲线密码术(C 部分:椭圆曲线密码术的 ASN.1)中定义。

于 2016-07-01T13:44:04.647 回答
2

它在这里:
https
: //www.ietf.org/rfc/rfc5480.txt ANDI X9.62 也可能很重要,但我认为不是免费提供例如:

ECDSA-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER }

于 2014-09-17T09:24:55.927 回答
1

公钥值是一个未压缩的点。它由 value 定义04,它是未压缩点的标识符,后跟 X 和 Y 坐标,其中 X 和 Y 被编码为无符号大端八位字节字符串,其大小与密钥大小相同(与大小相同参数中曲线的顺序)。请注意,这04也是 ASN.1 中 OCTET STRING 的标记,但这与未压缩点指示符无关。

我不知道域参数的格式。正如 Paul 所建议的,它肯定不会被编码为 https://www.ietf.org/rfc/rfc5480.txt 。我认为它是某种专有的 DER 格式,它使用多个 ASN.1 SEQUENCE 值,每个值填充两个 ASN.1 INTEGER 值。这些整数值(在长度之后)是有符号的、未填充的、大端编码,幸运的是它们与 Java 的BigInteger.

Paul Bastian 关于生成的签名是正确的,它与 X9.42 兼容。Java Card 尚不支持普通签名。

于 2014-09-18T20:48:45.270 回答