如何最好地混合兩個任意/隨機的 n 位字?
給定兩個任意/隨機 $ n $ -位詞,如何最好地將它們混合以獲得一個 $ n $ - 一般加密用途的位詞?
我想在能夠回答這個問題之前,人們應該對混合的好壞有足夠的衡量標準。所以我想先問:如果 $ z=f(x,y) \bmod 2**n $ 是混合的結果 $ x $ 和 $ y $ ,如何評價好壞 $ f $ 在我們的背景下?
我目前正在考慮以下幾點:讓一點 $ x $ 被翻轉成為 $ x_1 $ , 計算 $ z_{1}=f(x_{1},y) $ 進而 $ c=z\oplus z_{1} $ . $ bc=bitcount(c) $ 然後給那一點雪崩。這樣一個好 $ f $ 應提供統計上良好(高)的平均值(在所有 $ n $ 位)的 $ bc $ 以及良好的標準偏差。這是一個可以接受的措施還是在實踐中有更好的措施?
當然,我也應該非常感謝能夠立即知道我在開始時所說的正確問題的答案。預先非常感謝。
給定兩個任意/隨機 $ n $ -位詞,如何最好地將它們混合以獲得一個 $ n $ - 一般加密用途的位詞?
沒有“一般加密使用”之類的東西。每當我們在加密中組合兩個不同的值時,我們都會考慮特定的屬性,這取決於我們組合它們的原因以及在什麼上下文中。例如,如果我們將它們組合為更大密碼操作的一部分,那麼我們需要檢查更大密碼將在組合函式上呈現哪些屬性。“正確”的組合器將具有這些屬性。由於我們在不同的地方有不同的屬性,那麼不同的組合器將在不同的時間是“最好的”。
我目前正在考慮以下幾點:讓一點 $ x $ 被翻轉成為 $ x_1 $ , 計算 $ z_{1}=f(x_{1},y) $ 進而 $ c=z\oplus{z_{1}} $ . $ bc=bitcount(c) $ 然後給那一點雪崩。這樣一個好 $ f $ 應提供統計上良好(高)的平均值(在所有 $ n $ 位)的 $ bc $ 以及良好的標準偏差。這是一個可以接受的措施還是在實踐中有更好的措施?
根據我們需要的屬性,這可能是正確的,也可能是非常不合適的。
如果您正在設計加密協議並需要組合來自兩個不同來源的貢獻,則標準方法是使用加密雜湊函式來組合這兩個值。基本上,使用 $ H(x,y) $ , 在這裡你使用標準的方法來形成兩個值的元組(如果 $ x $ 或者 $ y $ 已知具有始終相同的固定長度,您可以將它們連接起來得到 $ x||y $ ,否則你使用類似的東西 $ \textrm{len}(x)||x||y $ ).
在隨機預言機模型中,這具有極好的性質。例如,如果 $ x $ 和 $ y $ 是獨立選擇的,其中一個熵很大,那麼 $ H(x,y) $ 會有很大的熵。如果 $ x $ 和 $ y $ 是獨立選擇的,其中一個是一致的 $ n $ -位空間,其中 $ n $ 足夠大,那麼 $ H(x,y) $ 將是偽隨機的(與隨機無法區分)。等等。
主要要求是 $ x,y $ 獨立選擇;如果選擇 $ y $ 被允許取決於的選擇 $ x $ ,你有問題——事實上,你在任何方案中都會有問題。確保獨立的一種方法是要求雙方都致力於他們的價值觀。例如,Alice 向 Bob 發送一個承諾 $ x $ ; Bob 向 Alice 發送一個承諾 $ y $ ; 然後當愛麗絲收到鮑勃的承諾時,她打開她的承諾以揭示 $ x $ 對 Bob,對 Bob 對稱。這確保了值的獨立性 $ x,y $ .
一些協議使用組合器 $ x \oplus y $ . 這也有一些好的特性,但更脆弱。特別是,如果 $ x,y $ 不是獨立的,故障模式比with差很多 $ H(x,y) $ . 例如,如果 Bob 可以選擇 $ y=x $ ,然後組合器 $ x\oplus y $ 給出零,而組合器 $ H(x,y) $ 如果 Alice 選擇了她的值,可能仍然會給出一個相當隨機的值 $ x $ 隨機。因此,在大多數現實世界的環境中, $ H(x,y) $ 好於 $ x \oplus y $ ,因為它更健壯。
當然,一些純粹主義者可能會抱怨使用隨機預言模型,但在實踐中,隨機預言模型是相當合理的。隨機預言模型導致的失敗可能比純粹主義者往往忽略的其他現實世界問題導致的失敗要小得多。所以對於大多數設置, $ H(x,y) $ 可能會沒事。