gpt4 book ai didi

node.js - 使用 ECDH 和 nodejs 加密解密 secret

转载 作者:搜寻专家 更新时间:2023-10-31 23:46:47 25 4
gpt4 key购买 nike

这是 nodejs 文档示例:

const crypto = require('crypto');
const alice = crypto.createECDH('secp256k1');
const bob = crypto.createECDH('secp256k1');

// Note: This is a shortcut way to specify one of Alice's previous private
// keys. It would be unwise to use such a predictable private key in a real
// application.
alice.setPrivateKey(
crypto.createHash('sha256').update('alice', 'utf8').digest()
);

// Bob uses a newly generated cryptographically strong
// pseudorandom key pair bob.generateKeys();

const alice_secret = alice.computeSecret(bob.getPublicKey(), null, 'hex');
const bob_secret = bob.computeSecret(alice.getPublicKey(), null, 'hex');

// alice_secret and bob_secret should be the same shared secret value
console.log(alice_secret === bob_secret);

我不明白 secret 从何而来。假设我想解密来自 Bob 的消息 foo-bar(使用 Alice 公钥加密)。我有 Alice 的私钥和公钥,以及 Bob 的加密消息,我如何解密包含所有这些的消息?

最佳答案

上述步骤构成了 ECDH key 协商协议(protocol),用于在 Alice 和 Bob 之间建立共享 secret (对称 key ),他们随后可以使用该 secret 进行安全通信。

secret key alice_secret是在Alice端使用Alice的私钥和Bob的公钥计算的。
key bob_secret 是在 Bob 端使用 Bob 的私钥和 Alice 的公钥计算得出的。

两个键是相等的。现在 Alice 和 Bob 有一个共享的 secret (alice_secret=bob_secret),他们可以用它来加密/解密消息。

请注意,这里只交换公钥,中间人无法获得 Alice 或 Bob 的私钥。

理想情况下,应使用 key 派生函数将共享 secret 转换为适用于 AES 等算法的适当对称 key 。引用KDF

伪代码

-Bob 使用 bob_secret 和 AES 加密:

  var crypto = require('crypto'),
algo = 'aes-256-ctr',
var cipher = crypto.createCipher(algo,bob_secret)
var encrypted = cipher.update("foo-bar",'utf8','hex')
encrypted += cipher.final('hex');

-爱丽丝解密:

 var decipher = crypto.createDecipher(algo,alice_secret)
var decrypted = decipher.update(encrypted,'hex','utf8')
decrypted += decipher.final('utf8');

关于node.js - 使用 ECDH 和 nodejs 加密解密 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com