【发布时间】:2014-10-27 19:12:07
【问题描述】:
我需要使用 ECC 密钥和 ECDH 在 JavaScript 中计算共享密钥。我看到两个可能的项目可以做到这一点,但我不确定要追求哪一个:。
1) 是一个 chrome 扩展,所以我认为这意味着它不会在其他浏览器中运行。 2) 有人对 SJCL 有疑问,表示他们认为这是使用 ECMQV 而不是普通的 ECDH (Can't bridge Elliptic Curve Diffie-Hellman with javascript)。
有人可以为我的实施推荐一个好的行动方案吗?选项 3(首选选项):我有一种预感,可能会直接在此处包含共享秘密实现:https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/src/ecdsa.js。
这是在服务器上创建共享密钥的 C++ 代码:
void * ecies_key_derivation(const void *input, size_t ilen, void *output, size_t *olen)
{
*olen = SHA512_DIGEST_LENGTH;
return (void*)SHA512((const unsigned char*)input, ilen, (unsigned char*)output);
}
...
fc::sha512 shared_secret;
ECDH_compute_key( (unsigned char*)&shared_secret, sizeof(shared_secret), EC_KEY_get0_public_key(recipient.my->_key), my->_key, ecies_key_derivation );
【问题讨论】:
-
我写过 Tom 在他的演示中支持
secp256k1曲线:www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html -
我刚刚发现了这个:github.com/indutny/elliptic
-
我看到很多指针和研究,+ 代码块(实现 ECIES,而不是 ECDH,虽然 ECIES 基于 ECDH)但是你的 JavaScript 代码在哪里?你的问题在哪里?
-
您引用的链接中没有提及 ECMQV。
-
感谢您的反馈。这是一个很好的健全性检查。这个看起来与 C++ 兼容。我将尝试移植此代码并查看它是否有效:github.com/bitpay/bitcore/blob/master/lib/common/ECIES.js ... 请注意 ECIES.kdf 方法正在
S上运行 sha512 .. 我认为这是共享密钥。