Shamir Secret Sharing是Adi Shamir于1979年发表的构造。它将秘密编码为有限域上随机多项式的常数项;它不是剪开助记词,本身也不是签名协议。
k取n方案允许用同一集合中任意k个有效且不同的份额恢复秘密。它可容忍丢失n−k份,但也允许k名持有人合作取得秘密。例如五取三容忍两份丢失,不是三份。门限权衡的是可用性与能够恢复秘密的群体规模。 [Adi Shamir — How to Share a Secret (1979)]
对秘密S,选择f(x)=S+a1*x+…+a(k−1)*x^(k−1)。除S外,系数都是独立、均匀随机的域元素。份额是(x,f(x)),其中x各不相同且非零;x=0会直接给出S。k个点通过拉格朗日插值确定f(0)。同一点的两份副本不会增加方程。 [Adi Shamir — How to Share a Secret (1979)]
仅作教学,取S=5和f(x)=5+3*x mod 17。三份额为(1,8)、(2,11)、(3,14)。前两点得到斜率3、常数8−3=5;三种两两组合均恢复5。单独的(1,8)可与0至16的任意S相容,只需a=8−S mod 17。这个小域不是钱包设计。 [Adi Shamir — How to Share a Secret (1979)]
理想方案中,少于k个完整份额不提供关于S的信息,即使攻击者拥有无限计算能力。这要求正确选择独立系数,并遵循规定的观测模型。薄弱随机性、重复使用系数、侧信道或额外校验数据需要单独分析。共享不能增强可通过其他途径猜出的薄弱秘密。 [Adi Shamir — How to Share a Secret (1979)] [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes]
恢复需要相同的域、数值编码、索引和集合身份。素数域GF(p)使用模逆元,而非小数除法;GF(256)的运算不同于模256余数运算。SLIP-39添加了具体词表、元数据、组、加密和检查。因此两个标为Shamir的程序,其份额未必兼容。 [Adi Shamir — How to Share a Secret (1979)] [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes]
基本插值不验证份额来源或分发者是否诚实。损坏点可能返回另一个秘密,而不只是报告数量不足。检测、纠错和verifiable secret sharing是具有额外假设的构造。例如SLIP-39添加checksum和digest;不能自动认为所有Shamir Secret Sharing都具备这些功能。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes] [NIST — Multi-Party Threshold Cryptography]
普通恢复会使完整S出现在一个可能泄露它的环境中。与Multisig不同,Shamir Secret Sharing不建立多个独立的链上签名密钥。正如NIST所区分,门限签名可借助额外MPC协议在份额上计算而不组装密钥。仅分割再合并并不具备这一性质。 [NIST — Multi-Party Threshold Cryptography]
同一账户中的五个文件并未隔离丢失或入侵风险。记录参数并在可信设备上验证恢复。同一个S配上新的随机多项式会产生新集合,其份额不应与旧份额混用。然而足够的旧集合仍能恢复S;重新分割不会使已取得的份额或已泄露的秘密失效。 [Adi Shamir — How to Share a Secret (1979)] [Trezor — Multi-share Backup]
要获得更完整的理解,请将本词条与以下词条结合阅读: SLIP-39, Multisig, Seed Phrase, 私钥, Bitcoin Inheritance Plan. 反向关联还来自: SLIP-39, FROST.