没有项目描述
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(解密的_共享)),
密文=密文)
快速、安全、纯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(解密的_共享)),
密文=密文)