ECDSA 算法中 256 位 EC 密钥的签名长度是多少?我想验证相同的签名长度。如果有人可以帮助我使用一套 EC 密钥,那就太好了。
问问题
17646 次
1 回答
11
这取决于您如何对签名进行编码。这是来自 OpenSSL 的代码段,用于测量 DER 格式的 ECDSA 签名的长度。
/** ECDSA_size
* returns the maximum length of the DER encoded signature
* \param eckey pointer to a EC_KEY object
* \return numbers of bytes required for the DER encoded signature
*/
int ECDSA_size(const EC_KEY *r)
{
int ret,i;
ASN1_INTEGER bs;
BIGNUM *order=NULL;
unsigned char buf[4];
const EC_GROUP *group;
if (r == NULL)
return 0;
group = EC_KEY_get0_group(r);
if (group == NULL)
return 0;
if ((order = BN_new()) == NULL) return 0;
if (!EC_GROUP_get_order(group,order,NULL))
{
BN_clear_free(order);
return 0;
}
i=BN_num_bits(order);
bs.length=(i+7)/8;
bs.data=buf;
bs.type=V_ASN1_INTEGER;
/* If the top bit is set the asn1 encoding is 1 larger. */
buf[0]=0xff;
i=i2d_ASN1_INTEGER(&bs,NULL);
i+=i; /* r and s */
ret=ASN1_object_size(1,i,V_ASN1_SEQUENCE);
BN_clear_free(order);
return(ret);
}
上述函数以 prime256 曲线上的 EC_KEY 作为参数的结果是
sig_len = ECDSA_size(eckey);
sig_len 在哪里72
。
您需要72
使用 256 位 EC 密钥的 DER 编码 ECDSA 签名字节。
于 2013-06-26T06:19:24.573 回答