是否可以導出 sha256 雜湊的中間狀態?
假設我有一個未知字元串,其中已知 sha256-hash。我想知道現在是否可以計算未知字元串和“abc”連接的sha256。
(在 PHP 中
hash('sha256', $unknownString .'abc');
:)我想為了做到這一點,“我所需要的”就是從我知道的雜湊回到 sha256 算法的中間狀態(在大多數實現中稱為
finalize
)並附加我想要的數據(通過,在大多數實現中稱為,update
) 然後finalize
再次呼叫。塊長度應該不是問題,因為未知字元串的長度為 256 位,而我自己的字元串也有這個長度。這是可能的還是sha256的設計方式不可能實現?
PS:我無意獲取未知字元串。我絕對不關心這個的明文內容。
SHA-256 是通過首先填充消息來計算的 $ m $ 然後打破 $ \operatorname{pad}(m) $ 進入 $ \ell $ 塊 $ m_1, m_2, \dots, m_\ell $ 每個 512 位。填充將一些位附加到消息中,因此它是 512 位長的整數倍。然後是 SHA-256 雜湊 $ m $ 是$$ f(\cdots f(f(\mathit{iv}, m_1), m_2) \cdots, m_\ell) $$在哪裡 $ f $ 是 SHA-256 壓縮函式和 $ \mathit{iv} $ 是標準的初始化向量。這意味著給定 $ \operatorname{SHA256}(m) $ 你可以計算 $ \operatorname{SHA256}(\operatorname{pad}(m) \mathbin| m’) $ 對於任何後綴 $ m’ $ . 但你不一定能計算 $ \operatorname{SHA256}(m \mathbin| m’’) $ 除非 $ m’’ $ 與上的填充一致 $ m $ .