没有项目描述

shamir的Python项目详细描述


沙米尔


快速、安全、纯python实现shamir的秘密共享算法。

https://en.wikipedia.org/wiki/shamir%27s\u秘密共享


为什么要使用它


shamir的秘密共享对于提供“n of m”层很有用。
例如,密码恢复安全问题可以通过加密方式解决
使用此算法实现。安全问题的答案是
通过一个密钥派生函数(kdf)或散列,每个函数都用于
加密另一个秘密。那么,11个保安中有5个的答案
要找回这个秘密,提问是不可能的。

如何使用


…代码块::python
secret,shares=make_random_secret(3,5)秘密
生成共享,以便5人中的3人可以恢复机密
secret=恢复机密(共享)


shamir的秘密共享算法在整数x,y点上运行,
它存储的秘密是一个随机整数。为了有用,它必须
结合其他算法。下面是一个高级示例:

…代码块::python
encrypt、decrypt、hash和kdf是外部函数

def two_of_three_encrypt(明文、pw0、pw1、pw2):
“给定一个明文,对其进行保护,以便将来任何2个都可以访问”
secret,shares=shamir.make_random_共享(2,3)
定义加密共享(share,pw):
返回encrypt(密钥=kdf(pw),明文=repr(share))
返回(
加密(密钥=哈希(十六进制(机密)),明文=明文))+元组(
[加密(密钥=kef(pw),明文=repr(share))
对于pw,共享zip(pw0,pw1,pw2,shares)]

定义三取二解密(加密,pwa,pwb):
“恢复明文,给出用于保护的3个密码中的2个”
密文,共享=加密的[0],加密的[1:]
键a,键b=kdf(pwa),kdf(pwb)
解密的共享空间=[]
对于股份:
对于密钥输入(keya,keyb):
尝试:
解密的共享。附加(
解密(密钥=密钥,密文=共享)
例外情况:
通过
如果len(解密的共享)<;2:
raise valueerror('密码错误')
返回解密(
key=hash(十六进制(shamir.recover_secret(解密的_共享)),
密文=密文)


欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧