Entropy

僅提取熵

  • April 23, 2014

(我稍微清理了這個問題,它以前的標題是“在沒有散列的情況下提取熵”……因此一些評論/答案)

我想在不注入“偽”熵的情況下提取數據的熵。例如,假設我有一系列字節,但只有低位在變化(或者我事先不知道的某些變化) - 我怎麼能輸出那個低位?

有沒有一種已知的方法來提取數據的隨機部分,而無需為每種不同類型的數據系列進行自定義程式?

編輯:為了澄清,我只想提取隨機部分。例如,假設 F 是神奇的功能,我想要:

長度 (F(X)) = X 中最小熵的位數。

正如在別處所指出的那樣,這可能是不可能自動完成的,並且對其真實準確性有任何合理保證的信心水平。

對於隨機性提取,在某些情況下,您可以使用雜湊函式的替代方法。但是,大多數情況下,雜湊(或 hmac)是可取的,因為雜湊和 hmac 在提取隨機性方面非常好。

RFC 5869 描述了 HKDF,基於 HMAC 的提取和擴展密鑰派生函式,具有隨機性提取和擴展階段。NIST 已從 HKDF 制定了等效標準 NIST SP 800-56C,它也允許 AES-CMAC 作為 HMAC 的替代品。因此,NIST SP 800-56C 兼容的隨機性提取可以在沒有散列函式的情況下通過使用 AES-CMAC 來完成。

但是,NIST SP 800-56C 僅在有充分理由預期輸入包含足夠的熵以滿足輸出的預期熵時才可用。

另一種明顯的方法是,您可以使用具有派生功能的 AES-CTR 算法創建 NIST SP 800-90A 確定性隨機位生成器。您要提取的隨機性可能是算法的輸入熵。

估計熵

但是,對於上述兩種用途,您需要好的方法來估計輸入中有多少熵。如果您使用 NIST SP 800-56C 之類的東西並且輸入中沒有足夠的熵,那麼輸出中的熵也不會很多。出於這個原因,你可以正確估計你有多少熵是至關重要的。

常用的壓縮函式,例如上面提到的 CodesInChaos 不夠好,無法確定熵的數量。他們可以指點。只是永遠不要期望壓縮函式會產生完整的熵。

Linux 核心的 /dev/random 使用各種數學方法來估計資訊論意義上的事件中存在的熵量。這實際上是非常接近壓縮的東西。然而,它實際上並沒有壓縮任何東西,而是選擇嚴格小於它可以使用的任何壓縮方法的熵估計。很多關於 Linux /dev/random 的資訊都在這個分析中。分析是舊的,發現的問題基本上是固定的,但基本結構保持不變。

為了估計熵的數量,有必要了解你有什麼樣的輸入材料。像 ent 這樣的軟體對估計很有用,但要找到 ent 會高估熵的材料一點也不難。例如,嘗試估計 AES-CTR(128 x 0 位,1024 x 0 位)的熵。這個輸入有大約 0 位輸入,但 ent 估計它有近 1024 位。

我幾乎會說,如果你不能指出輸入的材料是什麼(不幸的是,這種情況很常見),並且你覺得 ent 或壓縮已經足夠好,那麼你很可能最終得到的系統不是很強大(因為你最可能會高估熵)。

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