Sha-256
除了輸入長度之外,還有其他因素會影響 SHA-256 散列算法的執行時間嗎?
據我了解,影響 SHA-256 執行時間的唯一因素(即使在大多數實現中如此輕微)是擴展和壓縮功能必須執行的填充塊的數量。改變填充塊數量的唯一方法是改變輸入的長度。因此,影響 SHA-256 執行時間的唯一因素是要散列的有效負載的長度。這是正確的,還是有其他方面影響 SHA-256 的執行時間?
編輯:為了澄清,這個問題是關於一個特定實現的抽象執行時/執行時
你的問題不是很清楚,但我假設你問的是 SHA-256 呼叫的執行時間是否取決於輸入的長度而不是長度。換句話說,如果對手知道計算 SHA-256(M1) 和 SHA-256(M2) 需要多長時間,這是否會洩露除長度之外的 M1 和 M2 的任何資訊?
通過合理的實現,答案是否定的。SHA-256(與所有常見的雜湊算法一樣:MD5、SHA-1、SHA2、SHA3、Blake 等)僅將消息用於按位運算(和、或、異或、按恆定大小移位、取反)和加法。所有這些操作在所有常見(和最可以想像的)硬體上都使用恆定時間,編譯器不太可能將它們變成非恆定時間操作。沒有乘法或除法(在許多 CPU 上不是恆定時間),沒有與消息相關的量的移位,沒有基於從消息內容(消息大小除外)派生的值的條件或表查找。
因此,與 AES(其中最自然的實現涉及基於從密鑰派生的值的表查找)不同的是,您通常不必擔心 SHA-256 或其他常見雜湊算法中與時間相關的側通道。
另一方面,功耗洩漏可能令人擔憂。