python-3.x - 单密钥加密和多密钥解密
问题描述
我正在寻找一种使用单一密钥进行加密的机制。但对于解密它需要多个密钥 2、3、4 和 5。请注意,我希望所有(2、3、4 和 5)密钥都需要解密。我想在python中实现它。但我在网上找不到混凝土材料。我根据它找到了具有多个密钥的答案 加密/解密, 我可以为此目的使用 GnuPG。我读了 GnuPG,但我找不到答案。我找到了Shamir's Secret Sharing我相信它可以解决我的问题。但我找不到它在密码学或其他流行的 python 包中的实现。我已准备好实现 Shamir 的秘密共享的 Wikipedia 页面中给出的代码。但我有一个问题。我不确定它的实施是否安全?
解决方案
请注意,我希望所有(2、3、4 和 5)密钥都需要解密。
找到Shamir的秘密分享我相信它可以解决我的问题
Shamir's Secret Sharing 也可以解决您的问题,但它可以做的更多(恢复只有密钥子集的解密密钥)。这样做是以牺牲复杂性和性能为代价的。如果您考虑将来使用共享(子集)的任何选项,恕我直言,来自 Kelalaka 的链接可能是您可以获得的最佳案例。
如果您需要所有密钥进行解密,您可以简化代码以使用任何安全操作(XOR、哈希、无剩余加法......)从 N 个随机密钥(更快、更简单)派生加密密钥。我更喜欢使用简单的 XOR,因为它是一种可交换操作,快速且开箱即用
例子:
- 生成 N 个随机解密密钥
- XOR所有解密密钥以获得加密密钥
笔记。您的第一个链接(使用多个密钥进行加密/解密)是使用 GPG 分别为多个收件人(公钥)加密单个加密密钥,因此任何收件人都可以恢复加密密钥
推荐阅读
- google-chrome - http://reload.extensions 未找到 IP 地址
- assembly - 将汇编转换为十六进制。如何一步一步做到这一点?
- bash - Bash IF 检查确切的数字是否在列表中
- python - 2D 随机游走,python
- python - 文件流 - ValueError:嵌入的空字节
- javascript - 为什么上传的文件不会通过 post 请求发送到数据库?
- linux - 如何列出目录中以字符开头但文件名后跟 8 个小写字符的文件?
- php - 如何解决 SQLSTATE[42S22]:Laravel 5.8 中找不到列
- c# - 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?
- python - 忽略语句体?