【问题标题】:bcrypt in python [closed]python中的bcrypt [关闭]
【发布时间】:2012-07-08 18:19:44
【问题描述】:

目前我正在尝试构建一个安全性非常高的登录系统。

所以我想使用 bcrypt 并且我还找到了一个 3rd 方库, py-bcrypt.

但是作者说是纯python实现。

现在我在某处读到不建议仅在 python 中使用 bcrypt,因为它太慢而且会导致安全漏洞。 bcrypt 应该在 C 中实现。

谁能证实这一点?现在我该怎么办?

我应该使用:

  • bcrypt (python)
  • SHA512(来自 hashlib)
  • 不同的东西

我正在使用 Google App Engine

编辑: http://packages.python.org/passlib/lib/passlib.hash.bcrypt.html#bcrypt-backends

需要注意的是纯python实现(#4)太 考虑到当前需要的轮数,使用速度很慢 安全。因此,默认情况下它是禁用的,除非 环境变量 PASSLIB_BUILTIN_BCRYPT="enabled" 已设置。

【问题讨论】:

  • 为什么“慢”会被认为是安全漏洞?

标签: python security hash bcrypt


【解决方案1】:

如何比较两者?以下是对 8000 个随机位和相应时间的密码进行哈希处理的代码:

哈希库:

#!/usr/bin/env python
import hashlib
import random

password = str(random.getrandbits(8000))
print hashlib.sha512(password).hexdigest()

Hashlib 包括盐:

#!/usr/bin/env python
import hashlib
import random

password = str(random.getrandbits(8000))
salt = str(random.getrandbits(256))
print hashlib.sha512(password + salt).hexdigest()

bcrypt:

#!/usr/bin/env python
import bcrypt
import random

password = str(random.getrandbits(8000))
print bcrypt.hashpw(password,bcrypt.gensalt())

时间 bcrypt:

$ time ./bcrypt_test.py 
$2a$12$Om3a3zKsCNAM/SLB3hq5w.HYukFwn4CJ73rjXYNUPgqckUx2uLEmG

real    0m0.401s
user    0m0.313s
sys 0m0.013s

时序hashlib:

$ time ./hashlib_test.py 
9e37eb4f164bbb1808833297d0244327e4faac109cd92729228f6e36d75d23044ac13a7a1907515cd6db44474b244678779e3ae4e97d8355c2069332aae52d61

real    0m0.032s
user    0m0.021s
sys 0m0.010s
$ 

【讨论】:

  • 我修改了 hashlib 脚本,使其也包含了一个 32 字节的盐,数字还是差不多
  • 好的,现在 bcrypt 的运行速度比 sha512 慢 10 倍,这更适合暴力攻击。但是 sha512 有 128 个字母,即使使用 brutforce 攻击,这不应该超过 bcrypt 吗?
  • 128 个字符的字符串实际上是字节哈希的十六进制表示。因此,密码实际上是 64 个字符长,而不是 128 个字符。bcrypt 输出的长度或多或少相同。
  • @Chopstick 对密码使用哈希函数一次是完全不安全,并且是绝对不可接受的“存储”密码的方式。如果您对 安全 简单的基于散列的密码存储方案感兴趣,您可以使用具有大量(5 位或 6 位)轮数的 PBKDF2,尽管 bcrypt 是一个更好的解决方案。 [编辑:这也应该指向 OP。我对您的回答做出了更多反应,因为它包含实际代码。]
  • @MattNordhoff 你说得对。我应该确保我的示例也涵盖了它的加密方面。感谢您指出这一点。
【解决方案2】:

试试passlib。它有一个 bcrypt 的 C 实现。

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 2023-03-06
    • 2010-12-06
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多