nic*_*way 6 javascript cryptography webcrypto-api
很难为javascript中的Web Crypto API设置熵或种子。
为什么会这样呢?这会使开发人员感到困难吗?
设置种子可让您确定地运行样本数据。Web Crypto API也恰好被烘焙到我正在使用的库中。我尝试实现的库的这一功能也几乎被放弃了,因为这个问题有多难。
小智 0
我不能 100% 确定实际问题是什么,所以我提供一个通用答案。
您可以使用 HDKF 密钥 ( https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#hkdf ) 作为高熵基本密钥来派生其他密钥。
从https://github.com/mdn/dom-examples/blob/main/web-crypto/derive-key/hkdf.js复制粘贴
async function deriveSharedSecret(privateKey, publicKey) {
const secret = await window.crypto.subtle.deriveBits(
{ name: "ECDH", public: publicKey },
privateKey,
384
);
return window.crypto.subtle.importKey(
"raw",
secret,
{ name: "HKDF" },
false,
["deriveKey"]
);
}
Run Code Online (Sandbox Code Playgroud)
您将注意到私钥和公钥对作为deriveSharedSecret 的输入。ECDH 是生成该对的一种方法。请参阅https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveBits。如果您的代码是在安全服务器环境上运行的服务,您可以生成并导出密钥(请参阅https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/exportKey)作为您的构建或设置过程,并在服务启动时将其加载到您的服务中(请参阅https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey)。这样,初始的高熵密钥将是确定性的。
您应该根据您的安全需求设计您的 WebCrypto 密钥用法(算法和流程)。
HDKF 的好处之一是它在派生子密钥时支持可选的非秘密盐。这可用于为每个会话或每个目的或两者生成盐,从而为应用程序内每个用例的高熵基本密钥添加一定程度的随机性。请参阅https://datatracker.ietf.org/doc/html/rfc5869#section-3.1
高熵基本密钥应被视为绝密。不应将其保存到版本控制中或读取不安全的存储桶。它不应该是任何客户端应用程序的一部分。它可以从安全存储加载,例如 AWS Secrets。
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |