Cryptography 可以为bcrypt随机生成盐吗?

Cryptography 可以为bcrypt随机生成盐吗?,cryptography,hash,bcrypt,Cryptography,Hash,Bcrypt,我正在进行我的站点身份验证,并考虑使用bcrypt和随机创建一个salt,该salt存储在数据库的用户登录行中。我希望我的网站是快的,但任何超过15生成(大约需要1秒)太慢,所以我想随机生成一个盐之间说5-14,但这是安全的还是有更好的方法 如果有帮助的话,我正在使用。使用bcrypt的一个主要原因是需要大量CPU时间来计算哈希值,以防止暴力攻击。对于你的问题,我会使用一个固定长度的salt,但是对于随机值,这样每个密码都需要相同的时间来计算 从这一点上,你可以满足你的盐的长度和拉伸迭代次数,以

我正在进行我的站点身份验证,并考虑使用bcrypt和随机创建一个salt,该salt存储在数据库的用户登录行中。我希望我的网站是快的,但任何超过15生成(大约需要1秒)太慢,所以我想随机生成一个盐之间说5-14,但这是安全的还是有更好的方法


如果有帮助的话,我正在使用。

使用bcrypt的一个主要原因是需要大量CPU时间来计算哈希值,以防止暴力攻击。对于你的问题,我会使用一个固定长度的salt,但是对于随机值,这样每个密码都需要相同的时间来计算


从这一点上,你可以满足你的盐的长度和拉伸迭代次数,以满足你觉得足够安全的要求,尽管我个人喜欢确保在一台真正强大的服务器上生成哈希至少需要1/2秒。

使用bcrypt的一个主要原因是需要大量CPU时间来计算哈希,以防止暴力攻击。对于你的问题,我会使用一个固定长度的salt,但是对于随机值,这样每个密码都需要相同的时间来计算


从这一点上,您可以满足您的salt长度和拉伸迭代次数,以满足您认为足够安全的任何要求,尽管我个人喜欢确保在真正强大的服务器上生成哈希至少需要1/2秒。

好的,因此salt长度和工作系数似乎是相关联的。bcrypt已经相当安全了,但问题是,无论您使用何种哈希,密码强度本身至少同样重要。因此,您应该尽最大努力在服务器上处理,最低成本(强度)为12

请注意,需要加密安全但快速且经常重新种子化的RNG,否则可能会耗尽随机数

更重要的是:确保密码有足够的强度。找到密码“password”根本不需要时间,即使使用bcrypt


不,没有更好的方法,除了为密码散列找到更快的实现。当然,攻击者将使用可以找到的最快的实现。

好的,看来salt长度和功因子是相关联的。bcrypt已经相当安全了,但问题是,无论您使用何种哈希,密码强度本身至少同样重要。因此,您应该尽最大努力在服务器上处理,最低成本(强度)为12

请注意,需要加密安全但快速且经常重新种子化的RNG,否则可能会耗尽随机数

更重要的是:确保密码有足够的强度。找到密码“password”根本不需要时间,即使使用bcrypt


不,没有更好的方法,除了为密码散列找到更快的实现。攻击者当然会使用最快的实现。

谢谢Matthew。我是个新手,不太明白你所说的
等长盐是什么意思。如果py bcrypt不适合,我可以使用任何包装,但在生成盐时,他们会说:“#gensalt的log#rounds参数决定了复杂性功系数为2**log_rounds,默认值为12',这是我在使用5-14时所指的..是否还有其他东西,或者我应该以不同的方式使用它?我以为你的5-14是盐的长度,但我明白你的意思是轮(拉伸)。至于轮数,您应该选择一个看起来足够安全但速度不太慢的值。散列处理的速度越慢,攻击者对其进行暴力攻击的时间就越长,无论是通过发出许多web请求,还是如果他们有权访问数据库中的散列。很好..谢谢Matthew。我认为我不需要让每个用户的轮次都是唯一的,这是对的吗?我不需要储存子弹的数量?尽可能长的轮次来延迟破解?确切地说,每个散列应该有相同的轮次数,否则你不知道用多少轮次来比较散列和用户输入的密码(除非你也在数据库中保存#个轮次).我想我必须节省#个回合,但我认为我只需要使用标准数量(我认为14-15个是好的)。我很担心,因为我的应用程序是跨多个应用程序服务器传播的,不确定它是否使用了本地密钥或任何东西来生成哈希值,这会使一个服务器的哈希值与另一个服务器的哈希值不匹配。我会测试一下,但不认为会有问题。谢谢马修的帮助!谢谢你,马修。我是个新手,不太明白你所说的
等长盐是什么意思。如果py bcrypt不适合,我可以使用任何包装,但在生成盐时,他们会说:“#gensalt的log#rounds参数决定了复杂性功系数为2**log_rounds,默认值为12',这是我在使用5-14时所指的..是否还有其他东西,或者我应该以不同的方式使用它?我以为你的5-14是盐的长度,但我明白你的意思是轮(拉伸)。至于轮数,您应该选择一个看起来足够安全但速度不太慢的值。散列处理的速度越慢,攻击者对其进行暴力攻击的时间就越长,无论是通过发出许多web请求,还是如果他们有权访问数据库中的散列。很好..谢谢Matthew。我认为我不需要让每个用户的轮次都是唯一的,这是对的吗?我不需要储存子弹的数量?尽可能长的轮次来延迟破解?确切地说,每个散列应该有相同的轮次数,否则你不知道用多少轮次来比较散列和用户输入的密码(除非你也在数据库中保存#个轮次).我想我必须节省#个回合,但我认为我只需要使用标准数量(我认为14-15个是好的)。我很担心,因为我的应用程序是spread accros