Provable-Security

對塊中的密鑰進行 Shamir 密鑰拆分並重新組合是否安全?

  • January 21, 2022

昨天我對 python 加密庫進行了PR,以支持 Shamir 秘密共享方案的大於 16 字節的密鑰大小。

目前支持16字節,如下:

$$ K = { 0, 1 }^{128} $$ $$ S_{128}(m, n, K) = s_1, … , s_n $$

為了不改變底層功能並支持更大的密鑰,我決定拆分密鑰並根據需要多次執行該函式並連接共享。下面的 32 字節密鑰範例使用有限的 16 字節 shamir 拆分函式。

$$ K = { 0, 1 }^{256} = { 0, 1 }^{128} | { 0, 1 }^{128} = K_A | K_B $$ $$ S_{128}(m, n, K_A) = s_{A1}, … , s_{An} $$ $$ S_{128}(m, n, K_B) = s_{B1}, … , s_{Bn} $$ $$ s_1 = s_{A1} | s_{B1} $$

PR 上的幾個人提出這是不安全的,因為您可以在 32 字節的情況下攻擊每一方,每方 16 字節,這意味著密鑰強度從32 bytes (2**256)2 * (2 ** 128) = 2**129.

我不相信這是真的,因為沒有任何攻擊可以讓你知道你已經成功地讓你繼續前進到另一邊。

更極端地說,即使 shamir 函式只支持1 byte (8 bit)密鑰大小,您仍然可以在塊中執行該函式並連接生成的共享來保持安全性。

讓我知道你的想法。

我不相信這是真的,因為沒有任何攻擊可以讓你知道你已經成功地讓你繼續前進到另一邊。

你不相信這是真的原因是因為它實際上是不真實的。

有了沙米爾秘密計劃, $ t-1 $ share 絕對不提供有關共享秘密的資訊。也就是說,對手唯一可用的攻擊是忽略共享的值(這不會告訴他任何東西)並直接猜測完整的 AES-256 密鑰(眾所周知,這是完全不可行的)。

PR 上的幾個人提出這是不安全的,因為您可以在 32 字節的情況下攻擊每一方,每方 16 字節

這些人錯了——Shamir 上沒有可用的“攻擊”,允許有 $ t-1 $ 共享以恢復秘密(或者,就此而言,獲取有關它的任何資訊) - 即使我們假設攻擊者俱有無限的計算能力,這仍然是正確的。

更極端地說,即使 shamir 函式只支持1 byte (8 bit)密鑰大小,您仍然可以在塊中執行該函式並連接生成的共享來保持安全性。

你可以把它比這更極端 - 如果每個秘密只有一位(因此總共有 256 個),也就是說,對手事先知道他們每個人都持有值 0 或值1,他仍然無法獲得有關密鑰的任何進一步資訊。

另一方面; 您需要採取一項預防措施 - 您需要假設您為保護每個 128 位一半而生成的隨機多項式是獨立選擇的。如果(例如)除了這個常數項之外它們是相同的,則上述推理不適用。

引用自:https://crypto.stackexchange.com/questions/98243