免费工具

把秘密拆成几份

助记词是个矛盾:只留一份会丢,留很多份每一份都是风险。这个页面把秘密切成几份,任意 K 份能把它拼回来,少于 K 份则对它一无所知。三份交给三个信得过的人,任意两份就能还原——而任何一个人单独什么也做不了。

全部在浏览器里计算:秘密和各份都不会发往任何地方。

秘密和各份都不会发往任何地方:所有数学运算都在这个标签页里完成。

原理

Shamir 方案。秘密的每一个字节都藏进一个多项式:常数项就是这个字节,其余系数随机,次数比门槛小一。第 x 份是多项式在点 x处的值。经过任意 K 个点的所需次数的多项式恰好只有一个,所以 K 份能唯一确定原始字节。而经过 K−1 个点的这类多项式有无穷多个,所有常数项等概率——这就是为什么少于 K 份什么也说明不了。

全部在 GF(256) 域里计算——和 AES 内部用的是同一个。字节还是字节,各份都很短,写在纸上是现实的。

怎么用才合理

家庭保管最实用的方案是三份、门槛两份。一份自己留着,一份给亲属,一份放银行保险箱或交给第二个信得过的人。自己那份丢了——用剩下两份还原。被偷了一份——小偷什么也拿不到,连提示都没有。

不要做的事:把两份放在同一个地方(这和只留一份一样),以及把门槛设成和份数相等(那样丢任何一份就是丢了秘密)。

相关工具: 助记词检查, 用密码加密文件加密文字.

这些我们一样都不保存

秘密、各份、密码都不保存——就像 VPN 本身不保存访问日志一样。真要交,也没有什么可交。

原理 →

常见问题

guest@404vpn:~$ cat secret-split-faq.md
[01] $ 这比直接把助记词剪成三段好在哪?
> 因为普通助记词的一段已经是答案的一部分:十二个词有了八个,剩下的就能穷举出来。这里每一份单独看对秘密什么都说明不了:在凑够所需份数之前,连原文的长度都无法确定。这是这套方案的数学性质,不是承诺。
[02] $ 该拆成几份、要求几份?
> 家庭保管通常拆三份、门槛设为两份:丢了一份还能还原,被偷一份小偷什么也拿不到。门槛等于份数(三份取三份)很危险:丢了任何一份就等于永远丢了秘密。
[03] $ 这几份该放在哪?
> 分开放,放在不同的地方——这就是全部意义。两份放在同一个保险柜里,和只留一份没有区别。每一份都可以写在纸上:它们很短,由普通字母和数字组成。
[04] $ 要是某一份坏了,或者是别的秘密的?
> 我们会发现。拆分之前会在秘密后面附上它哈希的两个字节,拼合时会检查。如果几份不是来自同一个秘密,或者其中一份坏了,页面会说出来,而不是交给你一堆像模像样的垃圾。
[05] $ 你们能看到我的秘密吗?
> 看不到。拆分和拼合时页面一个网络请求都不发——所有数学运算都在你的标签页里进行。在开发者工具的“网络”标签里就能看到。