Reed Solomon 秘密共享並作為一次性對稱密鑰?
Shamir 的秘密共享只是 Reed-Solomon 的一個特例,其中只使用一個係數而不是整個多項式來儲存秘密。
然而,Sarwate 建議後者可以通過犧牲資訊論安全性來實現:
McEliece-Sarwate 論文中考慮的 Reed-Solomon 編碼方案的第二個方面是不需要填寫 $ S(x) $ 和 $ m-1 $ 隨機選擇的符號。其實秘密可以是全部 $ m $ 符號 $ s_0,\ldots,s_{m-1} $ 而不僅僅是 $ s_0 $ 成為秘密。一個優點是我們可以使用更小的有限域。如果秘密是 $ 1000 $ 位,說,和 $ m=10 $ , Shamir 的計劃將在 $ \mathbb F_{2^{1000}} $ 並且秘密的每一部分也將是 $ 1000 $ 位長。 $ 10 $ 千比特 ( $ 10 $ 一千比特份額)將需要恢復秘密。另一方面,Reed-Solomon 編碼方案可以將秘密分為 $ 10 $ $ 100 $ -位符號和操作 $ \mathbb F_{2^{100}} $ . 每一股也將是 $ 100 $ 比特長,和以前一樣,只需要十個這樣的短份額來恢復秘密。欄位大小的這種減少確實以安全性為代價。要是 $ 9 $ 股份可供陰謀集團使用,他們猜測所需股份的十分之一的可能值,他們可以提出一個“短名單”,只有 $ 2^{100} $ 的值 $ 1000 $ 位秘密可能有。在類似的困境中,沙米爾的計劃將有一個列表 $ 2^{1000} $ 秘密的可能值,從而提供完美的安全性。降低安全性和易於實施以及儲存每個秘密共享之間的權衡是需要針對每個應用程序進行評估的事情。最安全的方案具有與秘密一樣長的共享,而 Reed-Solomon 方案可用於以降低安全性為代價來減小共享大小。 資源
有其他人同意 Sarwate 的觀點嗎?事實證明是真的嗎?
假設你有一個 $ 10,000 $ - 你分裂成的位秘密 $ 100 $ $ 100 $ 位股。擁有 $ 99 $ 分享你真的什麼都學不到嗎 $ 10,000 $ -即使它的一部分是已知的或可以猜到的?複雜度小於 $ 2^{100} $ .
這不是暗示這可以用來加密嗎?最後一個共享可以從數據源中扣留並有效地作為其加密密鑰。
假設 10 000 位消息是均勻分佈的,我們用 $ t $ -的- $ n $ 方案。
- 使用 Shamir 的秘密共享,每個共享是 10 000 位,如果你只有 $ t - 1 $ 股份公司 $ t^{\mathit{th}} $ 份額有 $ 2^{10~000} $ 具有均勻分佈的可能值,因此給定秘密的條件分佈 $ t - 1 $ 共享可以(並且確實)具有 10 000 位熵。
- 使用像 Reed-Solomon 這樣的傳統擦除編碼方案,其中每個共享是 100 位,如果你只有 $ t - 1 $ 股份公司 $ t^{\mathit{th}} $ 份額只有 $ 2^{100} $ 確定秘密可能是什麼的可能性,因此給定秘密的條件分佈 $ t - 1 $ 共享的熵不能超過 100 位——換句話說,您可以將秘密縮小到可能子空間的一小部分。(如果它的熵少於100 位,那麼它就不是一個非常有效的糾刪碼。)
您可能會問的問題是:糾刪碼使用消息空間的哪個子空間?這是一個簡單的 2-of-3 方案,有時稱為 RAID-5:將秘密分成 5000 位的兩半 $ s_1 $ 和 $ s_2 $ , 並使用 $ s_1 $ , $ s_2 $ , 和 $ s_1 \oplus s_2 $ 作為股份。一次分享揭示了很多關於原始資訊的資訊!因此,對於加密不是很有用。
里德-所羅門呢?我們解釋一個 $ t\ell $ 位消息 $ m = (m_0, m_1, \dots, m_{t-1}) $ 作為一個學位 - $ (t - 1) $ 多項式 $ m(x) = m_0 + m_1 x + m_2 x^2 + \cdots + m_{t-1} x^{t-1} $ 超過 $ \operatorname{GF}(2^\ell) $ ,並在 $ n $ 不同的點,說 $ {0, 1, \alpha, \alpha^2, \dots, \alpha^{n-2}} $ 在哪裡 $ \alpha $ 是一個生成器 $ \operatorname{GF}(2^\ell) $ . 請注意,在這個完全合理的 Reed-Solomon 程式碼選擇中,前兩個份額是 $ m_0 $ 和 $ m_0 + m_1 + m_2 + \cdots + m_{t-1} $ . 對於加密仍然不是很有用。
“但你只是病態地選擇了評估點!” 好吧,但是假設你用過 $ {\alpha, \alpha^2, \dots, \alpha^n} $ 對於固定 $ \alpha $ . 密文有一個簡單的已知明文區分符 $ (c_1, c_2, \dots, c_{t-1}) $ 和鑰匙 $ c_t $ 在哪裡 $ c_i = m(\alpha^i) $ :簡單地在評估點評估多項式並與推定的密文進行比較。
如果 $ \alpha $ 也是關鍵的一部分嗎?好吧 $ \alpha $ 最多是其中之一 $ t - 1 $ 學位的根源- $ (t - 1) $ 多項式 $ m(\alpha^i) - c_i $ 對於每個 $ i $ ,我們可以通過標準尋根來計算已知明文攻擊。
如果我們也隨機化第一個消息塊怎麼辦?好吧,除了我們必須看看是否 $ m(\alpha^i) - c_i $ (這裡 $ m $ 被認為具有零常數項)是相同的隨機第一個塊 $ i $ . 我們可以隨機化除一個消息塊之外的所有消息塊,但隨後我們又回到了 Shamir 的秘密共享。
還有另一種方法:我們可以應用全有或全無轉換 (AONT),然後使用其中一個共享作為密鑰。使用有效的糾刪碼,這顯然與 AONT 本身一樣安全。 (直到 McEliece-Sarwate 筆記之後很久才開發出 AONT。)
將其用作密碼仍然存在一個實際問題:如果密鑰*由明文確定,*接收者如何獲得密鑰?也許你真的想要一個公鑰密碼系統,但我不清楚如何從中得到一個——儘管你可以從其他糾錯碼中得到一個,這也是由於 McEliece,你在其中封裝了一個密鑰在隱藏 Goppa 碼下的隨機錯誤綜合症,並通過對錯誤進行散列得出密鑰。
因此,這個想法主要用於儲存已經像大密鑰一樣隨機化的消息,其中一部分的知識無濟於事。當然,如果我們想確保由不完整的共享集覆蓋的消息子空間至少(例如)256 位以實現現代安全性,我們不妨將秘密本身設為 256 位並使用密鑰派生函式從中派生更大的密鑰。對於儲存更長的結構化秘密,McEliece-Sarwate 比僅加密它們、使用 Reed-Solomon拆分密文和使用 Shamir拆分密鑰稍微高效一些。
也許 McEliece-Sarwate 觀察有更廣泛的用途,但對我來說並不明顯!
關於秘密共享的標準警告也適用:每當您重建秘密時,必須有人將整個秘密放在一個地方才能使用它,並且可以將其隔離。因此,如果您曾經使用過它,那麼只有一方可以單方面獲得秘密授予的任何權力。許多秘密共享可能很誘人的應用程序可以通過更高級別的多方計算來更好地服務,例如門檻值簽名,其中沒有任何一方擁有某些中央秘密的單方面權力。