這是一個可接受的全有或全無轉換嗎?
我在考慮AONTs,並設計了下面的一個,我稱之為CHANT for Chained-Hash All-or-Nothing Transform;這是我第一次嘗試這種類型的東西,希望我能得到你的意見。
假設你有一個雜湊函式 $ H $ 塊大小(即生成的雜湊的大小) $ b $ ,您想“包裝”一條消息 $ m $ ; CHANT 的工作原理如下:
- 休息 $ m $ 成塊 $ b $ 位,呼叫結果塊 $ m_{1} $ , $ m_{2} $ , $ \ldots $ , $ m_{n} $ .
- 生成隨機塊 $ b $ 位,呼叫那個塊 $ m_{0} $ .
- 現在,對於每個消息塊 $ m_{i} $ (和 $ 1 \leq i \leq n $ ),計算它的包裹塊 $ w_{i} $ 作為 $ w_{i} = H^{i} (m_{0}) \oplus m_{i} $ (在哪裡 $ H^{i} $ 表示 $ i $ - 雜湊函式的第一次迭代 $ H $ ).
- 最後,計算 $ w_{0} = H(w_{1} \Vert w_{2} \Vert \cdots \Vert w_{n}) \oplus m_{0} $ ,然後包裝將是 $ w = w_{0} \Vert w_{1} \Vert w_{2} \Vert \cdots \Vert w_{n} $ (在哪裡 $ x \Vert y $ 表示串聯)。
現在為了解開一個CHANT -wrapped 消息 $ w $ ,其中一個進行如下:
- 休息 $ w $ 成塊 $ b $ 位,呼叫結果塊 $ w_{0} $ , $ w_{1} $ , $ w_{2} $ , $ \ldots $ , $ w_{n} $ .
- 計算 $ m_{0} = w_{0} \oplus H(w_{1} \Vert w_{2} \Vert \cdots \Vert w_{n}) $ .
- 現在對於每個包裹的塊 $ w_{i} $ (和 $ 1 \leq i \leq n $ ),計算它的展開 $ m_{i} $ 作為 $ m_{i} = w_{i} \oplus H^{i} (m_{0}) $ .
- 最後,丟棄 $ m_{0} $ ,然後展開將是 $ m = m_{1} \Vert m_{2} \Vert \cdots \Vert m_{n} $ .
如果 $ w_{0} $ 失去,那麼根本沒有足夠的資訊來檢索原始隨機 $ b $ 位,如果 $ w_{i} $ 和 $ i \neq 0 $ 失去,則很有可能需要檢索的雜湊值 $ w_{0} $ 將是不正確的。
CHANT基本上是一個(非常簡單的)流密碼,它在給定包裝消息的雜湊值的情況下公開(隨機)加密密鑰。
作為它的一些(在我看來)專業人士,我會提到它只需要一個散列函式和一個(偽)隨機源(但請參閱下面的問題 4),而且它很容易理解(至少對於像我這樣的外行來說)。
作為其缺點之一,我會指出需要添加一個額外的塊(即。 $ w_{0} $ ) 到輸出。
現在,我的問題是:
- 我錯過了什麼嗎?這真的是 AONT 嗎?
- 我確信有更快/更好的 AONT 方法,但這非常糟糕嗎?它在任何方面都比其他人好嗎?
- 雜湊函式應該問什麼 $ H $ ? 抗碰撞性?前像電阻?
- 有一個(偽)隨機源是一件壞事嗎?如果把上面的結構換掉會更好嗎 $ m_{0} $ (隨機生成)由 $ H(m) $ ? 會更糟嗎?(至少,它會使兩條相同消息的包裝相同)。
提前謝謝你,如果我忽略了一些瑣碎的事情,我很抱歉,這是我在這個 SX 網站上的第一篇文章。
我錯過了什麼嗎?這真的是 AONT 嗎?
迭代散列不會產生安全的流密碼。如果攻擊者可以猜到 $ m_i $ , 他們可以計算 $ w_i \oplus m_i = H^i(m_0) $ ,然後通過獲取該值的雜湊值來解密消息的其餘部分。
一種選擇是在計數器模式下使用散列函式,如塊密碼 $ w_i = H(m_0||i) $ . 那應該是安全的。
我確信有更快/更好的 AONT 方法,但這非常糟糕嗎?它在任何方面都比其他人好嗎?
If 可能會比僅使用 AES 或流密碼進行加密和散列來使密鑰依賴於其餘部分要慢得多。散列函式並不總是能快速產生大量輸出。
優點是您只依賴一個原語。如果你想要這樣,你可以使用帶有流密碼模式的散列函式,比如 Keccak(SHA-3 是基於它的)。那應該更快。
散列函式 H 應該問什麼?抗碰撞性?前像電阻?
散列函式應該(首先)抗原像和 PRF。除非攻擊者可以控製或至少預測隨機事件,否則碰撞阻力無關緊要 $ m_0 $ .
有一個(偽)隨機源是一件壞事嗎?如果上面的構造用 H(m) 替換 m0(隨機生成)會更好嗎?會更糟嗎?(至少,它會使兩條相同消息的包裝相同)。
不,這是件好事。確定性 $ m_0 = H(m) $ 例如,讓攻擊者驗證對消息的任何猜測 $ m $ 很有可能來自一個單一的 $ w_i $ . 只需轉換猜測消息,看看是否有任何塊匹配。