and*_*snn 13 security encryption algorithm openssl node.js
我目前正在尝试使用NodeJS加密静态数据,我已经阅读了createCipher不推荐的Node API文档.
crypto.createCipher()的实现使用OpenSSL函数EVP_BytesToKey导出密钥,摘要算法设置为MD5,一次迭代,无盐.缺少盐允许字典攻击,因为相同的密码始终创建相同的密钥.低迭代计数和非加密安全散列算法允许非常快速地测试密码.
根据OpenSSL建议使用pbkdf2而不是EVP_BytesToKey,建议开发人员使用crypto.pbkdf2()自行派生密钥和IV,并使用crypto.createCipheriv()创建Cipher对象.
是createCipher仍然在静止数据加密一个可行的和安全的方式?该方法是否应被视为弃用?知情的攻击者是否可以对数据进行潜在解密?
应该createCipheriv始终优先使用解决方案createCipher吗?
任何其他细节或建议表示赞赏.
createCipher 仍然是一种可行且安全的静态数据加密方法吗?
尽管当然不建议使用已弃用的 API 调用,但可以使用createCipher. 为此,给定的“密码”必须足够强大以承受离线攻击以及可能的并行攻击。为此,给定的密码必须具有足够的熵(必须足够随机)以免被猜测。例如,您可以使用密码管理器创建约 80 位或更高的密码并使用这些密码。
使用always 的解决方案是否
createCipheriv应该优先createCipher?
是的,如果只是因为作者已经警告过您,并且对您的代码的任何审查都必须重新考虑是否createCipher仍然可行。如果该方法从 CryptoJS 中删除(不太可能,但它毕竟已被弃用),那么您的代码将不再运行。
尽管如此,使用 的安全性createCipheriv仍低于直接使用密码作为密钥。您仍应使用基于正确密码的密钥派生函数(例如 PBKDF2)来派生输出密钥材料 - 如更新的文档中所示。createCipher
任何其他细节或建议表示赞赏。
在大多数情况下,您希望使用更高端的加密/解密方法,例如加密消息语法(CMS,在 PKCS#7 中指定)、PGP 或类似的高端协议/容器格式。
如果您确实需要直接使用密码,您应该尝试看看是否可以选择经过身份验证的加密(例如 GCM 提供的加密)。