定义ECDSA签名数据的规范

时间:2014-09-14 03:59:47

标签: format specifications javacard ecdsa

我想知道什么规范(或标准)定义了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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

我不知道域参数的格式。它肯定不像保罗建议的那样编码为https://www.ietf.org/rfc/rfc5480.txt。我认为它是一些专有的DER格式,它使用多个ASN.1 SEQUENCE值,每个值填充两个ASN.1 INTEGER值。这些整数值(在长度之后)是有符号,无填充,大端编码,幸运的是它与Java BigInteger的编码完全兼容。

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