简单易用的受密码保护的数据。
项目描述
Privy是一个小型且快速的实用工具,用于保护诸如API密钥、加密货币钱包或数字签名种子之类的秘密数据。
目录
使用方法
例如,如果您正在使用GnuPG。您即将签署一条消息,但首先需要您的密码。您的密码成为实例化您的私钥的输入吗?不,它首先通过一个安全的密钥派生函数进行哈希。然后这个哈希成为对称加密算法(如AES)的输入,该算法然后解密您的存储私钥。这就是Privy所做的工作。
别担心!使用Privy,这变得极其简单
>>> import privy
>>>
>>> # After creating secret, immediately encrypt it using Privy.
>>> data = b'secret'
>>>
>>> hidden = privy.hide(data, ask_for_password())
>>> hidden
'1$2$fL7xRh8WKe...'
现在您可以安全地存储或传输隐藏的秘密。当您的用户需要再次使用他们的秘密时,请要求他们输入密码以查看。
>>> privy.peek(hidden, password)
b'secret'
安装
Privy适用于Linux/macOS和Windows,并支持Python 2.7、3.3+、PyPy和PyPy3.3-5.5+
$ pip install privy
加密方案
使用Fernet协议加密机密。具体来说,它使用AES进行加密,并内置使用HMAC的认证。用于加密的私钥是通过密钥派生函数从密码派生的。使用的密钥派生函数是Argon2,这是密码哈希竞赛的获胜者。支持Argon2i和Argon2d变体。
加密格式
ascii(Argon2算法 || 安全级别 || base64(salt) || base64(Fernet令牌))
API
有2个函数:hide和peek。
hide
hide(secret, password, security=2, salt=None, server=True)
使用password加密secret。以unicode返回隐藏的机密。
参数
secret (bytes) - 要加密的机密。
password (bytes或unicode) - 用于访问机密的密码。
security (int) - 一个介于0到20之间的数字。更高的值更安全,但计算速度较慢,内存使用量较大。请参阅安全级别。
salt (bytes) - 用于密码哈希的盐。默认为os.urandom(32)。
server (bool) - 如果True,则假设需要保护旁路攻击,因此将使用Argon2i算法。否则,将使用Argon2d算法对密码进行哈希。
peek
peek(hidden, password, expires=None)
使用password解密hidden。以bytes返回机密。
参数
hidden (bytes或unicode) - 要解密的隐藏机密。
password (bytes或unicode) - 用于访问机密的密码。
expires (int) - 允许的最大秒数(自加密以来)。默认无过期时间。
如果密码错误,密码用于尝试不同的隐藏机密,或者自加密以来的秒数大于expires参数,将引发ValueError。
安全级别
所有预期时间都是基于在Intel Core i7-2670QM @ 2.2 GHz上对256 KiB机密进行解密时的测试结果。
这是命令,其中SL是希望的安全级别
$ python -m timeit -s "import privy, os; pw = 'password'; s = os.urandom(1024 * 256); h = privy.hide(s, pw, SL)" "privy.peek(h, pw)"
级别 |
Argon2设置 |
预期时间 |
备注 |
---|---|---|---|
0 |
m=8 KiB, t=1 |
7毫秒 |
最低可能的 |
1 |
m=4 MiB, t=10 |
54毫秒 |
|
2 |
m=8 MiB, t=10 |
99毫秒 |
默认 |
3 |
m=32 MiB, t=10 |
367毫秒 |
|
4 |
m=48 MiB, t=10 |
540毫秒 |
|
5 |
m=96 MiB, t=10 |
1.1秒 |
是一个不错的选择 |
6 |
m=256 MiB, t=10 |
3秒 |
|
7 |
m=512 MiB, t=10 |
6秒 |
|
8 |
m=768 MiB, t=10 |
9秒 |
|
9 |
m=1 GiB, t=10 |
12.2秒 |
|
10 |
m=2 GiB, t=20 |
48秒 |
用于用户的机器 |
11 |
m=3 GiB, t=30 |
107 |
|
12 |
m=4 GiB, t=40 |
? |
|
13 |
m=5 GiB, t=50 |
? |
|
14 |
m=6 GiB, t=60 |
? |
|
15 |
m=7 GiB, t=70 |
? |
|
16 |
m=8 GiB, t=80 |
? |
|
17 |
m=9 GiB, t=90 |
? |
|
18 |
m=10 GiB, t=100 |
? |
|
19 |
m=11 GiB, t=110 |
? |
|
20 |
m=12 GiB, t=120 |
? |
许可证
Privy根据以下条款之一进行分发
由您选择。
变更日志
强调重要变更。
6.0.0
破坏性更改:已删除对Python 3.3的支持。
5.0.0
破坏性更改:Privy现在根据MIT和Apache v2.0许可证条款双许可。
现在在根命名空间中公开了文档化的方法hide和peek。
Travis现在使用最新版本的PyPy和PyPy3运行测试。
文档的改进。
4.0.0
重大变更:为了更合理的兼容性,安全级别7现在使用512 MiB的RAM,而不是448 MiB。
对文档的重大改进。
3.0.0
添加了安全级别11-20。这些级别非常消耗资源,因此仅适用于个人使用。
2.0.1
重大变更:由于用户请求,加密格式现在使用URL安全的base64代替十六进制。
1.0.0
初始发布
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
privy-6.0.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e68679bb4006ce83206d9a7af1158cf4d56a2ed6861ee39276907be618dfb8d9 |
|
MD5 | b2464c33e3874bace71824563455908b |
|
BLAKE2b-256 | efaec3637856cdfe66518133f2cdbb820e30745cdb02b43ece41e7ccb9d7f818 |