热点、深度、趋势全掌握,尽在BTC区块圈

[**使用 JavaScript 在 WASM 中使用 libsodium.js 的确定性密钥交换** \

交换密钥请求超时是什么意思_在使用交换技术_

确定性和非确定性密钥交换

如果你从事网络安全工作,你是否了解确定性密钥生成和非确定性密钥生成之间的区别?嗯,对于确定性,当我们运行代码时,我们总是得到相同的密钥生成,而对于非确定性,每次我们都会得到一组不同的密钥创建,因此无法猜测密钥是什么。这种事情发生在签名中,我们可以知道对于给定的密钥集我们会得到什么签名(确定性签名),或者不能(非确定性)。如果你有兴趣,ECDSA 是一种非确定性签名方法(因为它使用随机 nonce 值),而 EdDSA 和纯 RSA 签名通常是确定性的。

基本上,密钥交换方法的确定性都归结于我们生成密钥的方式。如果我们对这些使用已知的种子值,我们将总是得到相同的密钥。否则,如果密钥是随机生成的,我们将得到一个非确定性的结果。

在这种情况下,我们将使用 libsodium.js 来实现 ECDH 密钥交换方法,它实现了 WASM 集成。

ECDH

使用 ECDH(椭圆曲线 Diffie-Hellman)方法,Alice 生成一个 a 的秘密,并计算一个公钥点 a. G,其中 G 是椭圆曲线上的一个基点。Bob 生成一个 b 的秘密,并计算一个公钥点 b. G。他们交换他们的公共值,Alice 收到 b. G,Bob 收到 a. G。接下来,Alice 将计算 a.(b. G),Bob 将计算 b.(a. G)。这些值应该相同。使用确定性密钥交换,Bob 和 Alice 都将使用一个秘密种子值来每次生成相同的密钥,因此对于给定的种子值集,我们将总是能够生成所需的共享秘密:

交换密钥请求超时是什么意思__在使用交换技术

因此,如果我们为 Bob 和 Alice 的密钥生成使用一个定义明确的种子值,我们总是会得到相同的共享密钥。如果任何密钥是随机生成的,我们每次都会得到不同的密钥。

对于非确定性密钥交换,我们将有 :

const BobKeyypair = sodium.crypto_kx_keypair();
const BobSecret = BobKeyypair.privateKey;
const BobPublic = BobKeyypair.publicKey;
const AliceKeyypair = sodium.crypto_kx_keypair();
const AliceSecret = AliceKeyypair.privateKey;
const AlicePublic = AliceKeyypair.publicKey;
const Aliceshared = sodium.crypto_kx_client_session_keys(BobPublic, BobSecret, AlicePublic);
const Bobshared = sodium.crypto_kx_server_session_keys(AlicePublic, AliceSecret, BobPublic);

对于这个,每次我们生成新的密钥,我们都会得到一个新的共享密钥:

交换密钥请求超时是什么意思_在使用交换技术_

对于确定性,请参阅使用种子值或短语 :

const str1 = sodium.from_string(document.getElementById("Bobseed").value);
const str2 = sodium.from_string(document.getElementById("Aliceseed").value);
const Bobseed = sodium.crypto_generichash(sodium.crypto_kx_SEEDBYTES, str1);
const BobKeyypair = sodium.crypto_kx_seed_keypair(Bobseed);
const BobSecret = BobKeyypair.privateKey;
const BobPublic = BobKeyypair.publicKey;
const Aliceseed = sodium.crypto_generichash(sodium.crypto_kx_SEEDBYTES, str2);
const AliceKeyypair = sodium.crypto_kx_seed_keypair(Aliceseed);
const AliceSecret = AliceKeyypair.privateKey;
const AlicePublic = AliceKeyypair.publicKey;
 const Aliceshared = window.sodium.crypto_kx_client_session_keys(BobPublic, BobSecret, AlicePublic);
const Bobshared = window.sodium.crypto_kx_server_session_keys(AlicePublic, AliceSecret, BobPublic);

有了这个,对于相同的种子短语值将总是生成相同的 resultant key。对于“Bob”和“Alice”的短语,我们得到密钥:

_在使用交换技术_交换密钥请求超时是什么意思

这是演示:

使用 JavaScript 在 WASM 中使用 libsodium.js 的密钥交换 \libsodium.js 是一个 sodium 加密库,它被编译为 WASM (WebAssembly),并使用与…相同的 sodium 方法\asecuritysite.com

和:

使用 JavaScript 在 WASM 中使用 libsodium.js 的确定性密钥交换 \libsodium.js 是一个 sodium 加密库,它被编译为 WASM (WebAssembly),并使用与…相同的 sodium 方法\asecuritysite.com

如果你有兴趣,这里有一些其他的 Web 集成用于密码学:

使用 JavaScript 的 Web 密码库 \JavaScript 代码允许在浏览器中执行,而不是在服务器上执行。 它通常比运行的代码更快…\asecuritysite.com

使用本文
0
共享
上一篇

POPCAT单日涨幅达15%:分析其上涨至0.47美元的可能性

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

阅读下一页