我正在构建一个应用程序,其中一部分将允许企业存储秘密。
我正在考虑使用 CryptoJS ( https://www.npmjs.com/package/crypto-js )。这将加密客户端的所有内容,并在将其保存到我们的数据库之前使用 HTTPS 将其发送到服务器端。我们的服务器永远不会接收到纯文本机密或将其存储在我们的数据库中。
来自 CryptoJS 的文档:
var CryptoJS = require("crypto-js");
// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();
// Decrypt
var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var originalText = bytes.toString(CryptoJS.enc.Utf8);
console.log(originalText); // 'my message'
我们会提示用户提供解密密钥(在上面的示例中为“密钥 123”),我们会对其提出一些要求,例如最小字符长度,包括数字、特殊字符等。
从安全的角度来看,考虑到用例,您认为此设置有什么问题吗?
以前的一些人建议研究 HashiCorp 的 Vault,我已经完成了它并将其作为概念证明,但是对于这个用例来说价格太高了(估计每家公司每月的成本约为 150 美元托管 HashiCorp Cloud Vault 的标准计划,我们不想自行托管我们自己的 Vault 服务器)。