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 位的哈希算法。