背景:我通过Grails plugin在Jasypt中使用PBEWITHSHA256AND128BITAES-CBC-BC算法(Bouncy Castle)。配置很简单:
jasypt {
algorithm = "PBEWITHSHA256AND256BITAES-CBC-BC"
providerName = "BC"
password = "<your very secret passphrase>"
keyObtentionIterations = 1000
}我想知道如何为以上内容选择一个安全的密码。对长度、限制字符等是否有实际或实际的限制?我应该使用的特定生成器吗?我找不到关于这一点的明确文档,所有的例子都使用类似上面的东西(例如,"password","secret“等)。
发布于 2013-07-25 03:34:44
正如术语所暗示的,基于密码的加密采用密码。密码通过密钥派生函数运行,以获得实际密钥。由于KDF通常由散列函数构造,因此密码可以是任何长度并包含任何字符。
密码必须通过KDF运行,因为典型的密码包含的熵不足以被认为是安全的,不会受到暴力破解攻击。KDF用计算代价高昂的密钥派生替换了这种“密钥空间”深度的缺乏-因此需要数千次迭代。缺点是初始化密码的代价也很高。
如果需要密码而不是原始密钥,这是一个非常值得的权衡。但是,在您的情况下,使用原始密钥会更好。不幸的是,您正在使用的Jasypt库似乎只支持PBE。
为了包含至少256比特的熵(与原始的随机256比特密钥一样多),the password has to contain at least 43 random (case-sensitive) alphanumeric characters。如果您选择这么长的密码,您可能可以将迭代次数减少到1。
对我来说,即使你使用的是一个你应该能够使用的库,但你必须仔细考虑这一切,这对我来说似乎是相当奇怪的,而不需要对密码学的工作原理有深入的了解。如果用户不应该知道他们是什么,为什么它会暴露所有丑陋的细节?
发布于 2013-07-22 19:37:03
有关生成安全密码短语的信息,请查看Diceware站点。请注意,你必须手工做这项工作,而不是使用计算机。
https://stackoverflow.com/questions/17773701
复制相似问题