SLIP-39是SatoshiLabs制定的可互操作助记词份额规范,基于Shamir's Secret Sharing。它规定分割、元数据、错误检查及passphrase处理;份额不能与BIP 39助记词互换。
备份BIP 32钱包时,主秘密是其输入种子,而不是扩展私有根。先生成encrypted master secret(EMS),再分割份额。计算逐字节使用GF(256);规范将秘密放在f(255),门限至少为2时,将验证摘要放在f(254)。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes] [BIP 32 — Hierarchical Deterministic Wallets]
必须先满足每个所需组的成员门限,再满足组门限。例如3组中需要2组,每组3名成员中需要2名。A组两份加B组两份足够;A组三份加B组一份则不够,虽然也是四份。普通的三取二方案只使用一个组。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes]
词表包含1024个英语单词,不随界面语言翻译。128位秘密产生每份20词的份额,256位秘密产生每份33词的份额。份额还包含标识符、extendable标志、迭代指数、索引和门限。组合时检查元数据一致及成员索引唯一;同一份额的两份副本不算两名成员。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes]
最后三个词组成RS1024,保证检测到最多影响三个词的错误。它们不证明份额来源或持有人权限;规范不建议自动纠错。重建摘要帮助发现错误集合。由于存在32位检查,不能不加限定地将理想方案中低于门限零泄露的说法套用于SLIP-39。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes]
加密采用四轮Feistel,每轮使用PBKDF2-HMAC-SHA256并执行2500×2^e次迭代。规范允许可打印ASCII 32–126,没有passphrase时用空字符串。无法直接验证passphrase是否正确:不同输入会得到不同主秘密。因此有效份额不代表恢复了预期钱包,应核对已知地址。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes]
BIP 39使用不同词表、校验和及助记词到种子的转换。将其词分写在几张纸上既不是SLIP-39,也不具备其门限保护。迁移时要保留同一钱包,必须保留正确的BIP 32种子及派生上下文;仅将原始熵重新编码成其他词并不能保证这一点。应验证具体支持的流程。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes] [BIP 39 — Mnemonic code for generating deterministic keys]
extendable标志为1时,加密盐不包含标识符。因此无需知道passphrase,就能用新标识符重新分割同一EMS。Trezor说明了将兼容的单份额备份扩展为多份额的方法。但新集合不会使旧集合失效:持有足够原始组合的人仍能恢复同一秘密。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes] [Trezor — Multi-share Backup]
SLIP-39在恢复时重建一个秘密,不会创建Multisig或要求链上批准每笔交易。存放安排应同时限制共同丢失和攻击者获取足够组合的风险。在可信设备上测试恢复,保存passphrase和钱包上下文,并通过参考实现及测试向量验证兼容性。仅看份额数量不够。 [SLIP-0039 — Shamir Secret-Sharing for Mnemonic Codes] [Trezor — python-shamir-mnemonic reference implementation]
要获得更完整的理解,请将本词条与以下词条结合阅读: Shamir Secret Sharing, BIP 39, Trezor, Multisig, HD Wallet. 反向关联还来自: BIP 39, 帕沃尔·“Stick”·鲁斯纳克, Shamir Secret Sharing.