【问题标题】:Utmost secure usage of bcrypt in PHP [closed]在 PHP 中最安全地使用 bcrypt [关闭]
【发布时间】:2015-03-18 20:47:49
【问题描述】:

除了像这样散列密码:

password_hash($password, PASSWORD_BCRYPT);

bcrypt 的推荐迭代轮数是多少?我确信四轮河豚容易受到二阶差分攻击,但在大多数情况下,使用散列过程的服务器可能会很好,但成本要高得多。 14 轮可以与伪随机排列区分开来,因此也排除了这一点。

16 是可能的最高成本吗?另外盐是如何生成的(如果省略)?

【问题讨论】:

  • 没有办法推荐任何东西。这完全取决于您的威胁评估。如果美国国家安全局在追捕你,那么 500 万亿轮可能还不够。如果麦片盒解码器环有点小,那就跳过 bcrypt 并使用 base64 或其他东西“加密”。
  • 能否请您重读一下标题?

标签: php hash


【解决方案1】:

在 BCrypt 的情况下,您无需指定轮数,而是定义成本因素。成本因子将提高到 2 的幂,也就是说,成本因子每增加 1 倍,计算时间就会增加一倍。

$numberofRounds = 2 ^ $costFactor

当前默认值为 10,当前可能的最大值为 31。要确定您应该反过来的成本因素,请测量您的服务器在不同成本因素下所需的时间。然后您可以决定您的服务器可以承受的成本因素。

PHP 文档中有一个小的example script,它有助于找到合适的成本因素。

【讨论】:

  • 盐呢?如果作为参数省略,它是如何生成的?
  • @schmitsz - 最好省略此参数,然后该函数将从操作系统的随机源生成加密安全的盐。
  • 我想你误解了我的问题。我不是问什么更好,而是在没有指定参数的情况下如何进行加盐。
  • @schmitsz - 正如我所说,该函数生成一个安全的随机盐并使用它来生成哈希。也许你想知道盐是如何储存的? salt 将成为哈希值的一部分,请查看answer 以获取有关格式的详细说明。
  • 没有。我想知道函数本身是如何执行生成的。我也不同意该答案中提出的方案。 2y 是 BCrypt 的签名,而不是“哈希算法”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多