secp256k1 的密钥推导
Key derivation for secp256k1
为了确定地从现有密钥生成新的 secp256k1 密钥,仅从旧密钥中获取 sha256 结果并将其用作熵来生成新的 secp256k1 密钥是否安全?使用这个方法,我只要有oldPrivKeyHex就可以得到派生密钥。
const ec = new EC('secp256k1');
const keyHash = shajs('sha256')
.update(oldPrivKeyHex)
.digest();
var newKey = ec.genKeyPair({ entropy: keyHash });
lib 源代码:
https://github.com/indutny/elliptic
这是可能的,但我会采取不同的方式。我会在另一个键上使用散列(或者更好的是,键派生函数或 KDF 的结果),然后直接将它用于 fromPrivate
方法或将 KeyPair
构造函数与私钥作为参数。
原因是没有准确指定随机数生成器。如果在处理随机数生成时出现任何问题,那么您可能会突然得到一个不同的密钥。
KDF 或哈希方法已经确保熵被压缩,因此不再需要随机数生成器。我当然宁愿使用 SHA-512 或 SHA-256(按此顺序),也不愿使用提供少于 256 位的哈希算法。
为了确定地从现有密钥生成新的 secp256k1 密钥,仅从旧密钥中获取 sha256 结果并将其用作熵来生成新的 secp256k1 密钥是否安全?使用这个方法,我只要有oldPrivKeyHex就可以得到派生密钥。
const ec = new EC('secp256k1');
const keyHash = shajs('sha256')
.update(oldPrivKeyHex)
.digest();
var newKey = ec.genKeyPair({ entropy: keyHash });
lib 源代码: https://github.com/indutny/elliptic
这是可能的,但我会采取不同的方式。我会在另一个键上使用散列(或者更好的是,键派生函数或 KDF 的结果),然后直接将它用于 fromPrivate
方法或将 KeyPair
构造函数与私钥作为参数。
原因是没有准确指定随机数生成器。如果在处理随机数生成时出现任何问题,那么您可能会突然得到一个不同的密钥。
KDF 或哈希方法已经确保熵被压缩,因此不再需要随机数生成器。我当然宁愿使用 SHA-512 或 SHA-256(按此顺序),也不愿使用提供少于 256 位的哈希算法。