跳转到主要内容

scrypt的Twisted封装器

项目描述

txscrypt 是一个为 Twisted 设计的 scrypt 封装器。 scrypt 是一种密钥派生函数。如果您正在编写密码存储库,那么您希望使用它来安全地存储用户密码。(如果您不是,请使用一个。)

https://dl.dropbox.com/u/38476311/Logos/txscrypt.png

我如何存储密码?

很简单。

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 目前始终为 txscryptPARAMS 是一个 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 (6.3 kB 查看散列)

上传时间

支持