scrypt的Twisted封装器
项目描述
txscrypt 是一个为 Twisted 设计的 scrypt 封装器。 scrypt 是一种密钥派生函数。如果您正在编写密码存储库,那么您希望使用它来安全地存储用户密码。(如果您不是,请使用一个。)
我如何存储密码?
很简单。
from txscrypt import computeKey
d = computeKey(password)
d.addCallback(storeSomewhere)
computeKey 是一个函数。您给它明文密码,以字节为单位。如果您的用户以Unicode形式提供密码,请先将其编码。您会得到一个deferred,它将在某个时刻触发,返回一个魔法般的字节字符串。存储它。
好吧。我如何验证密码?
from txscrypt import checkPassword
d = checkPassword(stored, provided)
在这个片段中,stored 是您从 computeKey 获得的东西。 provided 是用户提供的密码。给它同样的处理,就像您在传递给 computeKey 之前对密码的处理一样。例如,如果它是Unicode,请将其编码。
您会得到一个deferred。在未来某个时刻,它将触发,返回 True(如果密码匹配)或 False(如果密码不匹配)。
为什么这个魔法字符串是base64编码的?
您不应该关心里面的内容。
它并非完全base64编码,但它确实包含一些base64编码的部分。如果不是这样,它将包含许多NUL字节和其他复杂的东西(即非可打印的ASCII字符),这会使许多存储系统感到不适。
如果您必须知道,它看起来像这样
COMMENT:PARAMS:ENCODED_KEY:ENCODED_SALT
其中 COMMENT 目前始终为 txscrypt,PARAMS 是一个 JSON 对象,包含用于调用 scrypt 哈希函数的参数(N, r, p, buflen),ENCODED_KEY 是 base64 编码的密钥,ENCODED_SALT 是 base64 编码的盐。
早期版本的 txscrypt 使用 scrypt 生成的原始字节。一些第三方工具在第一个 NUL 字节之后截取了这些字符串。不幸的是,这是在“scrypt”这个词之后,这是该字符串的前几个字节。
那么盐怎么办呢?
txscrypt 会为你处理这个问题。
(它使用操作系统的加密随机数生成器计算足够长度的盐。目前,这个长度是 256 位。)
那么关于时间攻击怎么办?
txscrypt 会为你处理这个问题。
(它依赖于盐有足够的长度。可能有与同一台机器上多次执行 scrypt 相关的旁路通道;但据作者所知,这从未被证明为攻击。)
但是,如果耗尽线程池怎么办?
txscrypt 会为你处理这个问题。
(它为运行 scrypt 创建一个新的线程池。这意味着 scrypt 不会与 DNS 解析、或传递给 deferToThread 的事情竞争。)
但是,如果关闭线程池怎么办?
txscrypt 会为你处理这个问题。
(它告诉反应器在其自己的关闭程序开始时停止线程池。这意味着您必须让反应器运行才能进行任何计算。)
我应该什么时候创建自己的包装器对象?
如果您想更改
盐长度
线程池
默认的 scrypt 哈希参数(N, r, p, buflen)中的任何一个
所以,基本上,永远不要。如果迭代次数不安全,请在 txscrypt 上提交一个错误,以便可以进行修改。
变更日志
3.0.0
与先前版本不兼容的更改!
内部格式现在存储参数,因此更改它们(例如升级迭代次数)将导致平滑的前向过渡。
2.0.1
README 更新和测试套件更新。
2.0.0
与先前版本不兼容的更改!
现在使用新公开的 hash 函数,使密钥派生完全确定。
已移除 maxTime 参数。
1.1.1
从文档和 __all__ 中删除对 verifyPassword 的陈旧引用
感谢 Matt Haggard 提供的错误报告!
1.1.0
仅在首次使用时启动线程池
当反应器开始关闭时停止线程池
1.0.0
与先前版本不兼容的更改!
删除已弃用的 verifyPassword API
为盐位使用更少的熵
使用术语“盐”,与 scrypt 论文保持一致
Base64 输出,防止其他软件在 NUL 字节上窒息
内部重写,更容易测试
项目详情
txscrypt-3.0.0.tar.gz 的散列
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c820552c55ce047319f6df6293dc1f01a6dd032e5ead4cede5a0a9214d1aaa0b |
|
MD5 | c818abb83660b30e15e2a0e32bcc044d |
|
BLAKE2b-256 | 26df3a89d69679767a28a54b0cb98199b5fdedd41fa99baa8421f8ea5a47cab6 |