#密钥派生 #curve25519 #ecc

无std hd-ed25519

基于ed25519-dalek的层次密钥派生

1 个不稳定版本

0.0.1 2018年11月12日

#50 in #密钥派生

BSD-3-Clause

25KB
358

基于ed25519-dalek的层次密钥派生

几乎所有基于ed25519的层次密钥派生方案都存在漏洞,这是由于ed25519中使用的“位夹紧”引起的。我们不推荐在ed25519-dalek上使用层次密钥派生,而建议使用系数为1的曲线如secp256k1,或者使用避免Ed25519系数表示的表示法,例如ristretto。话虽如此...

BIP32-Ed25519通过仅使用224位标量派生新密钥来避免夹紧。如果允许使用夹紧的Ed25519库或者对8*l以外的另一个数进行加法运算,并且允许长密钥派生路径,那么这将存在直接的完整密钥恢复攻击。通常,加法实现要么是模l,要么是模256。

在本crate中,我们使用Mike Hamburg在https://moderncrypto.org/mail-archive/curves/2017/000869.html中提到的方法,实现了对模8*l的数的加法运算。

我们将秘密标量除以系数8作为整数,然后对l取模,再将它们乘以8作为整数。我们观察到,这将不会产生高比特设置为1的标量,因此与大多数Ed25519库不兼容。
它与ed25519-dalek兼容,因为其底层实现是常量时间的,并在创建扩展密钥时设置高比特。

另一种方法在https://moderncrypto.org/mail-archive/curves/2017/000866.htmlhttps://github.com/hdevalence/curve25519-dalek/commit/2ae0bdb6df26a74ef46d4332b635c9f6290126c7中详细说明。

依赖项

~3.5MB
~70K SLoC