SharedVault是一个小应用程序,它允许您定义需要多人解锁的秘密。
sharedvault的Python项目详细描述
共享故障
SharedVault是一个小应用程序,它允许您定义需要多人解锁的秘密。在
它是如何工作的?在
SharedVault的核心是使用Shamir的秘密共享算法(有些代码直接从wikipedia页面复制)。这允许我们定义一个密钥(M,N)和N个部分,其中密钥可以从M个部分恢复。 在此基础上,我们添加了一个层,每个用户都有一个公钥/私钥来加密他们持有的共享。 这允许以下功能:
- 用户更改选择并更改其密码。在
- 用户只需记住一个密码(而不是每个共享一个)。在
- 我们可以授予用户访问权限,而不必通过不可信网络通信共享。在
安全考虑
私钥
私钥存储在主数据库中,并用用户的密码加密。弱/泄露的密码会破坏私钥,因此它可以解密的所有共享。在
秘密加密
秘密本身是用Fernet算法加密的。密钥由Shamir的秘密共享算法生成的秘密数通过Scrypt得到。 请注意,我不知道我在做什么,因此很可能存在与scrypt配置相关的缺陷,可能会危及机密的安全性。在
取消访问
每次更新一个秘密,我们都会为新的加密生成一组全新的密钥。这允许我们拒绝将来访问从机密中删除密钥的用户。在
删除
SharedVault使用您提供的数据库,因此我们无法防止删除,因为数据库本身可能会被删除。在
过去的密码/密钥
出于同样的原因,我们不能强制数据库的以前版本被永久删除。这意味着,如果旧密码或密钥泄漏,并且以前的数据库可用,则该密钥将被压缩。在
如何使用它?在
我将添加更多使用此工具的方法,但现在有一个cli可用于运行:
$ pipenv run python -m cli --db=$DB_CONN_STR --help
根据所使用的数据库类型,可能需要其他依赖项。您可以在https://docs.sqlalchemy.org/en/13/core/engines.html上阅读有关连接字符串格式、可用后端和其他依赖项的详细信息。在
- 项目
标签: