Prime-Numbers

Shamir 的秘密共享方案中有限域算術和素數 p 的必要性

  • December 15, 2012

Shamir 描述門檻值秘密共享方案的原始論文(PDF, 197kb) 指出:

為了使這個說法更精確,我們使用模運算而不是實數運算。以素數為模的整數集 $ p $ 形成一個可以進行插值的域。給定一個整數值數據 $ D $ ,我們選擇一個素數 $ p $ 比兩者都大 $ D $ 和 $ n $ . 係數 $ a_1,…,a_{k-1}~ $ 在 $ q(x) $ 從 [0 中整數的均勻分佈中隨機選擇, $ p $ ) 和值 $ D_1,…,D_n $ 是模計算的 $ p $ .

在哪裡:

  • $ D $ 是要分享的秘密
  • $ n $ 是股數
  • $ k $ 是重建所需的門檻值份額數 $ D $
  • $ q(x) $ 是一個 $ k-1 $ 階多項式 $ q(0)=D $ and the coefficients $ a_1,…,a_{k-1}~ $
  • $ D_1,…,D_n $ 是個別股份(多項式上的點 $ q(x) $ )

有人可以解釋(以最簡單的方式)Shamir 的秘密共享方案使用有限域算術的原因嗎?另外,為什麼伽羅瓦域的大小必須是一個數,滿足 Shamir 提出的要求?

問這些問題的原因是:我想在 Javascript 中使用大小欄位實現 Shamir 共享 $ 2^8 = 256 $ , 哪一個:

  1. 將消除對 Javascript 的大型整數庫的需要,例如jsbn
  2. 將簡化數學。

無論要共享的密鑰大小如何,都可以將其分解為字節長度的段並在這些段上執行數學運算。由此產生的份額將是每個細分市場上必要操作的結果的串聯。

為了找到秘密,可以再次將共享分解為字節長度的段。多項式插值可以使用來自共享的相應字節長度段來完成,以獲得秘密的各個段。然後可以連接這些片段以形成完整的秘密。

這會起作用並且在密碼學上是安全的嗎?

如果確實有一個數的絕對必要性 $ p $ ,我可以使用任何小的素數和所描述的連接來在 Javascript 中執行必要的操作並且仍然保持加密安全嗎?

Shamir 的方案中沒有理由用於有限域 $ \mathbb F $ 有一個素數 $ p $ 元素;該領域可以有 $ p^m $ 適合素數的元素 $ p $ 和整數 $ m \geq 1 $ . 所以,使用 $ F_{2^8} $ , 場與 $ 2^8 $ 元素完全沒問題。然而,選擇 $ m = 1 $ 具有計算在 $ \mathbb F_p $ 可以使用微處理器等中包含的標準算術單元來完成(隨後是整數除法以進行 mod $ p $ 操作)而使用 $ \mathbb F_{p^m} $ 需要有一個已經可用的庫(或正在開發一個庫)或建構一個用於該領域算術的處理器。

鑑於您有能力在 $ \mathbb F_{2^8} $ , 如果您願意,可以使用此欄位。但是,(正如你所說)在沙米爾的計劃中,秘密只是該領域的一個元素(一個 $ 8 $ -bit byte),因此,如果要共享的 Secret 有幾個字節長,則需要將每個字節分別處理為其(一個字節)共享,並將 $ i $ -th 共享字節到 $ i $ - 第一份秘密。請記住,每個字節最多可以分為 $ 255 $ 股(點 $ q(0) $ 在 $ q(x) $ 由於明顯的原因不能使用),所以如果你需要超過 $ 255 $ 要分發的股份,您將不得不使用不同的欄位。最後,為了維護加密安全,在計算與 Secret 的每個字節對應的份額時,您應該完全按照您在評論中所說的去做:使用不同的“隨機選擇的係數”集 $ q(x) $ ,而不是一遍又一遍地重複使用相同的集合來查找所有字節的份額。

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