【发布时间】:2021-07-05 10:40:08
【问题描述】:
我正在尝试使用名为 easy-ecc 的外部库生成 ECDSA 密钥对。我不明白的是这个库为公钥生成了一个单一的坐标。据我从书籍、在线 ECDSA 生成器或 NIST 测试向量中看到,公钥在曲线上总是有两个坐标(X 和 Y)。例如,如果使用P-384 curve,则私钥的长度将为48字节,公钥将有两个不同的点X和Y,每个48 bytes。所以,总共96 bytes。然而,ecc_make_key 函数的行为与预期不同。
这是创建密钥对的函数原型:
int ecc_make_key(
uint8_t p_publicKey[ECC_BYTES+1],
uint8_t p_privateKey[ECC_BYTES]
);
此函数使用按引用传递策略填充空数组。但是,为什么p_publicKey 必须是ECC_BYTES+1 而不是ECC_BYTES*2?
【问题讨论】:
-
大概公钥是以压缩格式指定的。公钥
(x,y)可以指定为未压缩格式(0x04|x|y)或压缩格式(b|x,其中b是0x02,偶数y和0x03,奇数y),参见例如here.
标签: c cryptography ecdsa ecdh