使用此Python加密算法永远不会忘记您的密码

2020-06-12 10:16:50

我们中的许多人使用密码管理器来安全地存储我们的许多唯一密码。密码管理器的关键部分是主密码。此密码保护所有其他密码,在这种情况下,它是有风险的。任何拥有它的人都可以假扮成你…。任何地方!很自然地,您会让您的主密码很难被猜到,记住它,然后做您应该做的所有其他事情。

但是如果发生了什么事而你却忘了呢?也许你去一个可爱的,没有科技的遥远小岛度假了一个月。每天在水里嬉戏和吃菠萝之后,你就不太记得你的密码了。也许是因为长腿跑得快吧?还是像锋利的勺子吃得快?当你想到它的时候,它绝对是聪明的。

当然,你从来没有告诉过任何人你的密码。为什么,这确实是密码管理的第一条规则。你还能做些什么不同的事吗?

进入Shamir';的秘密共享,这是一种算法,允许用户将秘密分成只能与其他部分结合使用的部分。

让我们通过一个古代和现代的故事来看看沙米尔在行动中的秘密分享。

这个故事确实假设了一些密码学知识。您可以通过这篇关于密码学和公钥基础设施的介绍来温习一下。

在一个古老的王国里,国王有一个秘密。一个可怕的秘密:

def int_from_bytes(S):s:s中的b的返回密码=0;*acc=acc*256;*acc+=b返回访问密码=int_from_bytes(";可怕的秘密";。编码(";utf-8";)

太可怕了,国王不能把它托付给他的子孙。他有五个人,但他知道前面的路会有危险。国王知道他的孩子们在他死后需要这个秘密来保护王国,但他无法忍受在他们还在哀悼他的时候,这个秘密被知道了20年。

所以他用强大的魔法把秘密分成了五块碎片。他知道可能有一个甚至两个孩子不会尊重他的意愿,但他不相信其中三个会:

国王精通有限域和随机性的魔术。作为一个明智的国王,他使用巨蟒来拆分秘密。

他做的第一件事是选择了一个大质数-第13个梅森质数(2**521-1)-并下令在宫殿上方用10英尺高的黄金锻造的字母书写:

国王知道,如果P是素数,以P为模的数字就形成了一个数学域:只要除数不是零,它们就可以被加、乘、减、除。

为了让三个后代重建这个秘密,国王不得不再产生两个部分来混合在一起:

国王接下来需要在任意点计算这个多项式。求一个多项式是计算多项式[0]+多项式[1]*x+多项式[2]*x**2.。

虽然有计算多项式的第三方模块,但它们不适用于有限域。国王需要自己写评估代码:

def EVALUATE(系数,x):系数中的c的def Evaluate(系数,x)=0,x,power=1,c*power,*power,*,*power,*=x,x,Return Acc。

接下来,国王在五个不同的点计算多项式,给每个后代一块:

对于范围(5)内的i,碎片={}:碎片[i]=(x,y)=Mod(int_from_bytes(urandom(16),P);;y=Evaluate(多项式,x);碎片[i]=(x,y))。

可悲的是,正如国王所担心的那样,并不是所有的子孙都是诚实的。其中两个人,在他死后不久,试图从他们拥有的零件中找出可怕的秘密。他们尽了最大努力,但没有成功。然而,其余的人知道了,就把他们从王国永远放逐出去。

20年后,按照国王的命令,最年长的兄弟姐妹和最小的两个走到了一起,想弄清楚他们父亲的可怕秘密。他们把碎片拼在一起:

他们花了40天40夜努力寻找国王的秘密。摆在他们面前的任务并非易事。和国王一样,他们也知道蟒蛇,但是没有人比他更聪明。

检索代码基于一个称为拉格朗日插值的概念。它根据多项式在其他n个位置的值来计算0处的多项式,其中n是多项式的次数。它的工作原理是,你可以显式地找到一个公式,对于i不同于0的多项式,在t[0]处为1,在t[i]处为0。由于计算多项式是线性函数,因此需要计算每个多项式,并使用多项式具有的值对计算结果进行插值:

FROM Functools IMPORT RECLUTE FROM OPERATOR IMPORT mul def RETRIEVE_Original(Secret):x_s=[s[0]for s in Secret]For acc=Mod(0,P)For i in Range(len(Secrets)):List_Other=List(X_S)*List_cur=Other。POP(I)**因子=Mod(1,P)*(el-cur):*(el-cur)**=el*(el-cur):*(el-cur)*=el*(el-cur)。INVERSE()返回访问权限+=factor*密码[i][1]返回访问权限

毫不奇怪,这花了他们40天40夜--这个代码相当复杂!但他们在幸存的碎片上运行,屏息等待:

数学魔力的美妙之处在于它每次都能可靠地发挥作用!孩子们现在长大了,能够理解他们父亲的选择,他们用这个可怕的秘密来保卫王国。这个王国繁荣昌盛,发展壮大。

在现代,我们中的许多人还背负着一个可怕的秘密:密码管理器的主密码。虽然很少人有一个人可以完全信任一个人,告诉他们最深、最黑暗的秘密,但许多人可以找到一个五人小组,其中三个人不太可能一起破坏他们的信任。

幸运的是,在现在这个时代,我们不需要像国王那样自己拆散我们的秘密。通过现代开源技术,我们可以使用现有的软件。

假设你有五个你信任的人--不是绝对信任,而是相当信任:你最好的朋友、你的配偶、你的母亲、一位亲密的同事和你的律师。

$ECHO';长腿运行速度很快|SSSS-Split-t3-n5使用具有动态安全级别的(3,5)方案生成共享。输入密码,最多128个ASCII字符:使用168位安全级别。1-797842b76d80771f04972feb31c66f3927e7183609 2-947925f2fbc23dc9bca950ef613da7a4e42dc1c296 3-14647bdfc4e6596e0dbb0aa6ab839b195c9d15906d 4-97c77a805cd3d3a30bff78d。

啊,一个强有力的、强有力的、万能的密码:长腿走得快。它永远不能托付给任何一个灵魂,但是你可以把这五个碎片送给你的五个守护者。

现在,假设你要和家人一起去度假。一个月来,你在温暖的沙滩上嬉戏。当你嬉戏的时候,你一个电子设备都不能碰。很快,您强大的主密码就会被遗忘。

你亲爱的配偶和亲爱的母亲和你一起度假。他们将碎片保存在密码管理器中,并且忘记了密码。

你联系你最好的朋友F,她会给你1-797842b76d80771f04972feb31c66f3927e7183609。代班的同事很高兴你回来,给你4-97c77a805cd3d3a30bff7841f3158ea841cd41a611。你的律师收取你每小时150美元的费用,进入他们的密码管理器,然后挖出5-17da24ad63f7b704baed220839abb215f97d95f4f8。

$SSSS-Combine-t 3输入以换行符分隔的3个份额:share[1/3]:1-797842b76d80771f04972feb31c66f3927e7183609 share[2/3]:4-97c77a805cd3d3a30bff7841f3158ea841cd41a611 share[3/3]:5-17da24ad63f7b704ba.。

因此,有了开源技术,您也可以像国王一样生活!

密码管理是当今在线生活中的一项基本技能。当然,创建一个复杂的密码,但不要止步于此。使用方便的Shamir秘密共享算法与他人安全共享。