分割秘密 (How to Share a Secret)
如何把你的密碼用某種方式告訴你的 7 位家人,使得只有在至少 5 個人同意時才能得到密碼?
Shamir 在 1979 年的 How to Share a Secret 討論
如何將一個秘密分割成多個碎片,使得只有達到特定數量的碎片才能重建原始秘密。
問題
如何將一個資料 轉變成 份碎片 使得
- 獲得其中任意 份(或更多)碎片就有辦法還原出原始資料 。
- 只獲得其中 份(或更少)碎片則無法還原出原始資料(也不能獲得部份資訊)。
這樣的一個方案被稱為 threshold scheme。
具體方案
Shamir 給出的方案是利用多項式插值(台灣高中會學到拉格朗日插值多項式)。他用到這個性質:
知道一個 次多項式在 個點的值,就可以唯一決定這個多項式。
- 選一個 次多項式 ,其中
- 是隨機選取的。
- 計算 。
- 其中 就是原本問題中的 份碎片(每份碎片包含他的編號 跟一個數字 )。
這個方案滿足原本的要求:
- 只要得到任意 個 的值,就可以唯一決定這個多項式,因此可以反推這個多項式在 的值 ,也就是原始資料 。
- 如果只拿到 份碎片,則無法得知 的任何資訊。
細節
文章中提到
- 要選一個質數 進行模運算( 要比 跟 大)。
- 多項式的係數 都是從 隨機選取。
這些比較像是實作細節,不影響對方案根本的理解。
其他性質
- 在 固定的情況下,可以創造新的碎片 而不影響已經產生的碎片。
參考
- Adi Shamir. 1979. How to share a secret. Commun. ACM 22, 11 (Nov. 1979), 612–613. https://doi.org/10.1145/359168.359176