开发者生态
morning
沙米尔的秘密共享如何运作
2026-05-26
1 阅读
subract
有些秘密太重要了,不能信任一个人,也不能因为这个人消失而失去。一家公司希望在使用主密钥之前有三名管理人员在场。一个家庭想要恢复账户需要不止一个信封。一个团队想要一个在失踪成员后幸存下来的备份,而不是将整个事情交给任何人。 Adi S hamir(R S A 中的 S)于 1979 年发表了一种方法。将秘密分成几部分,以便其中一些人可以恢复它,而任何较小的数字则根本不会透露任何信息。并非“难以破解”。什么也没透露。核心思想适合一页纸。两点构成一条线 从您已经知道的事情开始:两个不同的点恰好确定一条直线。单个点则不然。无数条线穿过一个点,并且每条线在不同的地方穿过垂直轴。现在隐藏一条线穿过垂直轴的秘密。假设秘密是数字 7。通过该高度画一条随机线。坡度并不重要。只是随机性隐藏了秘密。从线上给每个人一分。没有人明白这条线本身。一个人用一个点可以通过它画出许多可能的线。每条线都暗示着不同的秘密。他们的分享与所有可能的答案兼容,因此它本身没有告诉他们任何有用的信息。将两点放在一起,线就固定了。一旦你知道了这条线,你就可以从它过零的地方读取秘密。这是一个 2-of-n 秘密共享方案。您可以根据需要创建任意多个点,但任何两个点都足以恢复直线。更多的人意味着更多的弯曲 对于更高的阈值,请使用弯曲更多的曲线。抛物线需要三个点来确定。因此,如果秘密隐藏在抛物线与垂直轴相交的位置,则任何三个部分都可以恢复秘密,而任何两个部分则不能。一般来说,k的阈值使用k-1次多项式。 2 股:直线 3 股:抛物线 4 股:三次方 实数实现使用有限域算术而不是方格纸,但想法的形状是相同的。秘密在于零值。随机系数隐藏了它。每个份额都是多项式上的一个点。有用的部分并不是说秘密很难从太少的份额中计算出来。问题在于,没有包含有关秘密的信息的共享太少。缺少一份,每一个可能的秘密仍然是可能的。为什么我们关心我们在 Ente 的 Legacy Kit 中使用了这个想法。尽管如此,我们的问题不仅仅是“我们如何分割秘密?”,而且是“我们如何在不将分割的秘密变成永久恢复密钥的情况下使恢复成为可能?” Legacy Kit 使用 Shamir 的方案作为较大流程中的一层。这些卡不带有恢复密钥。他们在本地重建一个单独的秘密,然后参与服务器介导的恢复——因此发行的卡可以被撤销,并且丢失的卡不是永久的责任。这篇文章只是“任意两个,绝不一个”部分背后的数学原理。进一步阅读 Adi Shamir 的“如何分享秘密” Bruce Schneier 的“在朋友之间分享秘密” Max Levchin 的 PayPal 故事 Ente 的源代码 返回所有帖子