NuCypher的Umbral代理重新加密实现
项目描述
pyUmbral是Umbral门限代理重新加密方案的参考实现。它是开源的,使用Python编写,并使用OpenSSL和Cryptography.io。
使用Umbral,Alice(数据所有者)可以通过一组半信任代理或“Ursulas”执行的重新加密过程,将任何加密为她的密文解密权限委托给Bob。当这些代理中的一部分达到阈值时,Bob能够将这些独立的重新加密组合起来,并使用他的私钥解密原始消息。
pyUmbral是nucypher背后的加密引擎,nucypher是一个代理重新加密网络,旨在为去中心化系统提供隐私。
用法
密钥生成
与任何公钥加密系统一样,用户需要一个公钥和私钥对。此外,委托访问其数据(如本例中的Alice)的用户还需要一个签名密钥对。
from umbral import SecretKey, Signer
# Generate Umbral keys for Alice.
alices_secret_key = SecretKey.random()
alices_public_key = alices_secret_key.public_key()
alices_signing_key = SecretKey.random()
alices_signer = Signer(alices_signing_key)
alices_verifying_key = alices_signing_key.public_key()
# Generate Umbral keys for Bob.
bobs_secret_key = SecretKey.random()
bobs_public_key = bobs_secret_key.public_key()
加密
现在让我们使用Alice的公钥来加密数据。调用 pre.encrypt 返回密文和胶囊。请注意,任何拥有Alice公钥的人都可以执行此操作。
由于数据是用Alice的公钥加密的,因此Alice可以用她的私钥打开胶囊并解密密文。
from umbral import encrypt, decrypt_original
# Encrypt data with Alice's public key.
plaintext = b'Proxy Re-Encryption is cool!'
capsule, ciphertext = encrypt(alices_public_key, plaintext)
# Decrypt data with Alice's private key.
cleartext = decrypt_original(alices_secret_key, capsule, ciphertext)
重新加密密钥片段
当Alice想要授予Bob访问权限以打开她的加密消息时,她会创建重新加密密钥片段,或“kfrags”,然后将这些片段发送给N个代理或Ursulas。
from umbral import generate_kfrags
# Alice generates "M of N" re-encryption key fragments (or "KFrags") for Bob.
# In this example, 10 out of 20.
kfrags = generate_kfrags(delegating_sk=alices_secret_key,
receiving_pk=bobs_public_key,
signer=alices_signer,
threshold=10,
shares=20)
重新加密
Bob请求几个Ursulas重新加密胶囊,以便他可以打开它。每个Ursula使用Alice提供的kfrag对胶囊进行重新加密,从而获得“胶囊片段”,或cfrag。
Bob从几个Ursulas那里收集生成的cfrags。Bob必须至少收集到threshold个cfrags才能激活胶囊。
from umbral import reencrypt
# Several Ursulas perform re-encryption, and Bob collects the resulting `cfrags`.
cfrags = list() # Bob's cfrag collection
for kfrag in kfrags[:10]:
cfrag = pre.reencrypt(capsule=capsule, kfrag=kfrag)
cfrags.append(cfrag) # Bob collects a cfrag
Bob解密
最后,Bob通过附加至少threshold个cfrags来激活胶囊,然后解密重新加密的密文。
from umbral import decrypt_reencrypted
bob_cleartext = pre.decrypt_reencrypted(receiving_sk=bobs_secret_key,
delegating_pk=alices_public_key,
capsule=capsule,
cfrags=cfrags,
ciphertext=ciphertext)
assert bob_cleartext == plaintext
有关更详细的用法示例,请参阅文档目录。
快速安装
要安装pyUmbral,只需使用pip
$ pip3 install umbral
或者,您可以检出存储库并从中安装。NuCypher团队使用pipenv来管理pyUmbral的依赖关系。推荐的安装步骤如下
$ sudo pip3 install pipenv
$ pipenv install
安装后,您可以通过运行pipenv shell在当前终端会话中激活项目虚拟环境。
有关pipenv的更多信息,请参阅此处官方文档:https://docs.pipenv.org/。
学术论文
Umbral方案学术论文和加密规范可在GitHub上找到。
“Umbral:一种门限代理重新加密方案”由David Nuñez撰写。https://github.com/nucypher/umbral-doc/blob/master/umbral-doc.pdf
支持与贡献
安全
如果您发现任何nucypher代码中的漏洞,请通过security@nucypher.com发送相关发现信息。我们将与研究人员合作,协调合作伙伴和用户之间的漏洞披露,以确保成功缓解漏洞。
在整个报告过程中,我们期望研究人员遵守可能根据披露严重程度而变化的禁令期。这确保我们有时间修复任何问题,确定其他问题(如果有),并通知我们的用户。
有时漏洞的性质更为敏感,需要采取额外预防措施。我们很高兴与您合作,使用更安全的媒介,例如Signal。请发送电子邮件至security@nucypher.com,我们将协调一个我们都感到舒适的通信渠道。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
umbral-0.3.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1883477bb2b8f9ff1a31882d7faafab5ce2bb19c2128fe5cd2d5062c93fdd2c4 |
|
MD5 | 99ee5f506d1c34ead46c64ba5478d06b |
|
BLAKE2b-256 | 9dcacf9966eaae3ba24eb4ad153166bc40663e3c1d86647545a2d283bff2eb12 |
umbral-0.3.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a4b3a547ef3fdaa42460c406be3b5395a2bf5fdfaa8f2025dd742c4af5f226b |
|
MD5 | 17972db8b251709801c46cf59ea41a29 |
|
BLAKE2b-256 | 19e82ee0449ebb140591c7dc79c16f3b5647b48f8d9efd0ca8bc19c7730c46ca |