为AES创建强密码

时间:2013-07-21 15:04:06

标签: security encryption aes bouncycastle jasypt

背景:我通过Bouncy Castle使用PBEWITHSHA256AND128BITAES-CBC-BC算法(Jasypt)和Grails plugin。配置很简单:

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

我想知道如何为上述选择安全密码。长度,限制字符等是否存在实际或实际限制?我应该使用的特定发电机?我无法找到关于此的明确文档,所有示例都使用上述内容(例如,“密码”,“秘密”等)。

2 个答案:

答案 0 :(得分:2)

基于密码的加密采用密码,正如术语所暗示的那样。密码通过密钥派生函数运行以获得实际密钥。由于KDF通常由散列函数构造,因此密码可以是任意长度并包含任何字符。

密码必须通过KDF运行,因为典型的密码不包含任何足够接近熵的地方,因此被视为可以抵御暴力攻击。 KDF用计算上昂贵的密钥推导替代了这种“密钥空间”深度的缺失 - 因此成千上万次迭代。缺点是初始化密码也很昂贵。

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

要包含至少256位的熵(与原始随机256位密钥一样多),the password has to contain at least 43 random (case-sensitive) alphanumeric characters。如果选择长的密码,则可以将迭代次数降低到1。

对我来说,即使您正在使用一个您应该能够使用的库,而且不需要深入了解密码学的工作原理,但您必须仔细考虑所有这些。如果用户不知道它们是什么,为什么会暴露所有丑陋的细节?

答案 1 :(得分:0)

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