免費工具

把秘密拆成幾份

助記詞是個矛盾:只留一份會丟,留很多份每一份都是風險。這個頁面把秘密切成幾份,任意 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] $ 你們能看到我的秘密嗎?
> 看不到。拆分和拼合時頁面一個網絡請求都不發——所有數學運算都在你的標籤頁裏進行。在開發者工具的“網絡”標籤裏就能看到。