Closed timfaner closed 4 years ago
ec-schnorr 使用 secp256k1 曲线。 OpenSSL 使用的是 ANS1 标准中规定的 Object 结构;曲线的 NID 是 714 。 NID 的定义在 obj_mac.h 中
#define SN_secp256k1 "secp256k1"
#define NID_secp256k1 714
#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L
secp256k1 曲线的参数在 ec_curve.c 中给出:
static const struct {
EC_CURVE_DATA h;
unsigned char data[0 + 32 * 6];
} _EC_SECG_PRIME_256K1 = {
{
NID_X9_62_prime_field, 0, 32, 1
},
{
/* no seed */
/* p */
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F,
/* a */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* b */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
/* x */
0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95,
0xCE, 0x87, 0x0B, 0x07, 0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9,
0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98,
/* y */
0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc,
0x0e, 0x11, 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19,
0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10, 0xd4, 0xb8,
/* order */
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41
}
};
明白。有一些问题:
我注意到EC-Schnorr在实现上不像ECDSA一样标准化程度较高,这里有相关讨论。遵循不同标准实现起来可能导致不同结果,在后期实际开发时候我们尽量选择与比特币相同的实现,以加强互操作性。这个可能需要注意一下
比较多区块链项目使用EdDSA作为签名使用,EdDSA是schnorr类签名,基于ed25519、sha512,我们后期或许可以实现EdDSA而非RSA?你觉得如何
明白你的意思。
关于第一点,EC-Schnorr 由于专利保护导致的标准化问题一直是令人诟病的,这个我在前期调研的时候也有注意到。调研文档里 EC-Schnorr 部分介绍参考的是 BSI TR-03111 的实现方法。
但不同标准之间的区别主要体现在参与签名的参数不同,以及签名者公布的消息不同。这可能会影响到算法的某些具体实现方法,但只要采用的曲线相同就可以保证公私钥和地址无需改变,就应该不会出现大的兼容性问题。可以参考之前 Bitcoin Cash 从 ECDSA 升级到 Schnorr 的情况。目前比特币关于 Schnorr 签名的 BIP 提案 还没有正式通过,但我认为可以作为我们的重要参考,以期保证你提到的互操作性。
对第二点表示赞同。RSA 应该一直是不在重点开发计划里的吧。
ec-schnorr 使用openssl中的ec,迁移到botan难度如何