沒有 Shamir 秘密共享的秘密共享方案
我計劃使用以下 XOR 方案將一個秘密分成 2 份(出於超出本文範圍的不同原因,我不想使用 Shamir Secret Sharing)。
這是我想到的 XOR 方案的一個例子。
秘密(128 位)= 0 1 0 1 0 0 1 0 0 0 0 1 (…) 0 0 1 1 0
共享 1 = TRUNC128(SHA512(秘密))
= 0 0 0 0 1 1 1 0 0 0 1 1 (…) 1 1 0 0 1
分享 2 = 秘密 ^ 分享 1
= 0 1 0 1 0 0 1 0 0 0 0 1 (…) 0 0 1 1 0 ^ 0 0 0 0 1 1 1 0 0 0 1 1 (…) 1 1 0 0 1 = 0 1 0 1 1 1 0 0 0 0 1 0 1 1 1 1 1
秘密 = 分享 1 ^ 分享 2
= 0 0 0 0 1 1 1 0 0 0 1 1 (…) 1 1 0 0 1 ^ 0 1 0 1 1 1 0 0 0 0 1 0 (…) 1 1 1 1 1 = 0 1 0 1 0 0 1 0 0 0 0 1 (…) 0 0 1 1 0
在建構使用它的案例時,我對 XOR 方案有一些疑問。
1)這種方案對常見攻擊媒介(蠻力……)的抵抗力如何?
2)有什麼方法可以評估打破該計劃需要什麼(或多少)?
- 該方案是否已用於“特別安全的應用程序”?如果是這樣,是哪些?
直接使用 XOR 秘密共享是無條件安全的,如果隨機生成的第一個共享 $ S_1 $ 是一個均勻分佈的向量 $ {0,1}^{128} $ . 讓秘密成為 $ X \in {0,1}^{128} $ 並且股份是 $ S_2=X+S_1, $ 和 $ S_1, $ 在哪裡 $ + $ 表示按位異或。
讓第三方知道秘密,他們需要蠻力 $ O(2^{128}) $ 最壞情況下的猜測。
現在你已經“隱藏”了這個秘密 $ X $ 由你的 $ S_1’=TRUNC_{128}(SHA_{512}(X)). $
如評論中所述,我錯了,生日悖論並不直接適用。
攻擊者暴力破解共享 $ S_2’=X+X_1 $ 在同樣的複雜性下,不會學習你的秘密,而是學習它的雜湊,所以你已經獲得了一些東西。
然而,在沒有輔助資訊的情況下,原始 XOR 方案同樣安全,除非可以通過使用它來測試對秘密的猜測,例如,作為解鎖某些系統的密碼。在該案例中,您的修改是一種改進,因為如果猜測正確,它會阻止這種測試方式。
事實上,兩個共享之間的異或是Shamir 的秘密共享。總的來說,Shamir 的秘密共享在給定的有限域中工作,具有n 個份額和t門檻值;在特定情況下n = t = 2,使用有限域 $ \text{GF}(2^{128}) $ (對於 128 位字元串的共享和值),Shamir 的秘密共享變得公正:秘密值是兩個共享的 XOR。這基本上是你的建議。
具體來說,使用 Shamir 的秘密共享減少到n = t = 2將是:生成共享 1 作為隨機位串,計算共享 2 作為共享 1 和秘密的 XOR。秘密重建只是簡單地將兩個共享異或在一起。
現在,您以下列方式離開 Shamir 的秘密共享:不是將共享 1 設為純隨機字元串,而是將其生成為秘密本身的(截斷的)散列。這使得該方案變得更弱,因為現在對秘密進行暴力攻擊是可行的:給定份額 1或份額 2,可以嘗試該秘密的潛在值,並查看每個這樣的值是否會產生份額。如果share 1是隨機生成的,這樣的蠻力攻擊是行不通的(可以證明單個share的資訊量為零,即secret不能即使使用功能強大的電腦也可以重建)。但是,通過使用確定性方法(散列函式)使份額 1,您本質上使整個過程可模擬(我不確定“可模擬”是一個詞,但這意味著可以從相同的秘密值開始,獲得完全相同的份額),這允許暴力攻擊。擁有無限強大電腦的攻擊者可以嘗試所有可能的秘密值(“只有” $ 2^{128} $ 其中)立即使用一個共享值來找出哪個秘密值是正確的。
實際上,即在具有有限計算能力的真實電腦的世界中,如果秘密具有低熵,則您的方案是可破解的(我的意思是重建其中一個共享的秘密值)。如果秘密本身是一個 128 位的純隨機字元串,那麼攻擊者平均需要嘗試 $ 2^{127} $ 在擊中正確的值之前的值,這對於目前的電腦來說太多了。但是,如果秘密是一些具有某種結構的“現實世界數據”(例如,它是一個“密碼”,即人類可以記住和輸入的一串字元),那麼嘗試所有潛在值可能會容易得多.
總結一下:如果你用簡單的普通隨機生成替換截斷的 SHA-512,那麼它將是“完美的”(與 Shamir 的秘密共享相同,因為它將是 Shamir 的秘密共享:對擁有無限強大電腦的攻擊者免疫)。使用 SHA-512,它可能容易受到暴力攻擊,即簡單地“嘗試所有潛在的秘密值”。這種蠻力攻擊的實際可行性取決於秘密有多少潛在價值;如果有N個等機率的潛在值,那麼攻擊需要嘗試平均N/2個(如果某些值比其他值更可能,那麼攻擊者將從嘗試這些值開始,分析稍微複雜一些) )。