1

背景:我通过Grails 插件将 PBEWITHSHA256AND128BITAES-CBC-BC 算法( Bouncy Castle)与Jasypt 一起使用。配置很简单:

jasypt {
    algorithm = "PBEWITHSHA256AND256BITAES-CBC-BC"
    providerName = "BC"
    password = "<your very secret passphrase>"
    keyObtentionIterations = 1000
}

我想知道如何为上述选择安全密码。长度、受限字符等是否有实际或实际限制?我应该使用的特定生成器?我找不到关于此的明确文档,所有示例都使用类似上面的内容(例如,“密码”、“秘密”等)。

4

2 回答 2

3

顾名思义,基于密码的加密需要一个密码。密码通过密钥派生函数运行以获得实际密钥。由于 KDF 通常由散列函数构成,因此密码可以是任意长度并包含任意字符。

密码必须通过 KDF 运行,因为典型的密码不包含任何接近足够的熵来被认为是安全的免受暴力攻击。KDF 用计算成本高的密钥推导代替了这种“密钥空间”深度的缺乏——因此需要数千次迭代。缺点是初始化密码也很昂贵。

如果需要密码而不是原始密钥,这是一个非常值得的权衡。但是,在您的情况下,使用原始密钥会更好。不幸的是,您使用的 Jasypt 库似乎只支持 PBE。

要包含至少 256 位熵(与原始随机 256 位密钥一样多),密码必须包含至少 43 个随机(区分大小写)字母数字字符。如果您选择了那么长的密码,您可能可以将迭代次数降低到 1。

对我来说似乎很奇怪,即使您使用的是一个您应该能够使用的库,“无需深入了解密码学的工作原理”,您也必须仔细考虑所有这些。如果用户不应该知道它们是什么,为什么它会暴露所有丑陋的细节?

于 2013-07-24T19:34:43.853 回答
0

要生成安全密码,请查看Diceware站点。请注意,您必须手动完成工作,而不是使用计算机。

于 2013-07-22T11:37:02.623 回答