Node.js Nodejs createCipher vs createCipheriv
我目前正在尝试用NodeJS加密静态数据,我在NodeAPI文档中读到,Node.js Nodejs createCipher vs createCipheriv,node.js,algorithm,security,encryption,openssl,Node.js,Algorithm,Security,Encryption,Openssl,我目前正在尝试用NodeJS加密静态数据,我在NodeAPI文档中读到,createCipher不是 createCipher()的实现使用 OpenSSL函数EVP_BytesToKey,摘要算法设置为MD5, 一次迭代,没有盐。缺少盐允许字典攻击 因为相同的密码总是创建相同的密钥。低迭代 计数和非加密安全哈希算法允许密码 要非常迅速地进行测试 根据OpenSSL的建议,使用pbkdf2而不是 EVP_BytesToKey建议开发人员派生一个密钥和 他们自己使用crypto.pbkdf2()和
createCipher
不是
createCipher()的实现使用
OpenSSL函数EVP_BytesToKey,摘要算法设置为MD5,
一次迭代,没有盐。缺少盐允许字典攻击
因为相同的密码总是创建相同的密钥。低迭代
计数和非加密安全哈希算法允许密码
要非常迅速地进行测试
根据OpenSSL的建议,使用pbkdf2而不是
EVP_BytesToKey建议开发人员派生一个密钥和
他们自己使用crypto.pbkdf2()和crypto.createCipheriv()来
创建密码对象
createCipher
仍然是加密静态数据的可行且安全的方法吗?此方法是否应视为已弃用?
信息灵通的攻击者有可能解密数据吗
使用createCipheriv
的解决方案是否总是优于createCipheriv
任何其他细节或建议,敬请谅解。iv-代表首选CreateCippheriv/createDecipheriv, 用法示例:
const crypto=require('crypto')
函数加密(文本){
var cipher=crypto.createCipheriv('aes-256-cbc',
新缓冲区('passwordpasswordpassword')、新缓冲区('vectorvector1234'))
var crypted=cipher.update(文本“utf8”、“十六进制”)
crypted+=cipher.final('hex')
返回加密
}
函数解密(文本){
var decipher=crypto.createDecipheriv('aes-256-cbc',
新缓冲区('passwordpasswordpassword')、新缓冲区('vectorvector1234'))
var dec=解密.更新(文本'hex','utf8')
dec+=最终破译('utf8')
返回十二月
}
现在折旧的createCipheriv
函数不允许使用唯一的iv
,这就是为什么首选createCipheriv
当使用任何密钥派生功能派生密钥时,它无助于保护密文免受iv
防止的字典攻击
CreateChipher仍然是加密静态数据的可行且安全的方法吗
虽然当然不建议使用不推荐使用的API调用,但是可以使用createCipher
创建安全系统。为此,给定的“密码”必须足够强大,能够抵御脱机攻击,甚至可能是并行攻击。为此,给定的密码必须有足够的熵(必须足够随机)不被猜测。例如,您可以使用密码管理器创建约80位或更高的密码并使用这些密码
使用createCipheriv
的解决方案是否总是优于createCipheriv
是的,如果只是因为作者已经警告过你,并且对你的代码的任何审查都必须重新考虑createCipher
是否仍然可行。如果曾经从CryptoJS中删除过该方法(不太可能,但它毕竟已被弃用),那么您的代码将不再运行
但是,如果您直接将密码用作密钥,则使用createCipheriv
的安全性将低于createCipheriv
。您仍然应该使用正确的基于密码的密钥派生函数(如PBKDF2)来派生输出密钥材料-如更新的文档中所示
任何其他细节或建议,不胜感激
在大多数情况下,您希望使用更高端的加密/解密方法,如加密消息语法(CMS,在PKCS#7中指定)、PGP或类似的高端协议/容器格式
如果您真的需要直接使用密码,您应该尝试看看是否可以选择GCM提供的经过身份验证的加密。为什么更可取?如果使用
createCipher
“在常见分组密码模式(例如CTR)中,IV重用”是一个巨大的安全问题,这对“机密性”是灾难性的。而且不推荐使用的createCipher
api似乎并不阻止使用这些密码模式。请参阅:--Ah看起来像是在计数器模式下使用密码的IV重用现在在该方法的文档中提到了,并且发出了警告。用户不应在crypto.createCipher()中使用计数器模式的密码(例如CTR、GCM或CCM)。当使用它们时会发出警告,以避免导致漏洞的IV重用风险。有关IV在GCM中重用的情况,请参阅Nonce Disrespecting Pharmies以了解详细信息。