Algorithm-Design
我們怎麼知道密碼原語不會突然失效?
從 MD5 看起來要崩潰到實際崩潰的地步,花了十多年的時間。這是十多年的警告。有人可能會懷疑,我們很幸運能得到這麼多時間。即便如此,世界還是花了很長時間才擺脫 MD5。
我們如何確定當我們的密碼系統存在缺陷時,我們將有足夠的警告時間來更改它們?
我們如何確保 ECC 不會在一夜之間被破壞?
從資訊論的意義上說,我們永遠不知道加密算法不會突然失敗。如果我們知道這一點,我們就會停止使用它。然而,已經表明,當加密算法失敗時,根據兩步過程,它很容易失敗:
- 大多數加密算法在初始分析階段很快就失敗了,因為我們使用了一堆已知的加密破解工具來解決這個問題,以及大量的專家意見。
- 其餘算法已被證明通常會分階段失敗。攻擊通常會在最終破壞算法之前削弱算法。這通常以比特來衡量。如果蠻力攻擊需要 2^64 次操作,而有人發現了一種需要 2^58 次操作的技術,那麼我們說它被削弱了 6 位。
後者是引用“過去的表現並不能預測未來的結果”的完美案例。不能保證任何未來的算法都不會在任何未知的時間點中斷。作為對沖這一點,大多數現代加密算法都是使用 Feistel 網路等眾所周知的結構在多輪中設計的。我們一般都知道如何讓 Feistel 網路優雅地失敗,而那些沒有很好理解的機制的網路通常會被懷疑很多年。因此,有一種趨勢(不是保證)將衡量比特的弱點作為一個合理的指標。
也許一個更好的問題是“如果你目前的加密算法在一夜之間失敗了會有多糟糕?” 如果你能給出一個美元數字,你至少可以嘗試應用貝氏統計數據來製定合理的防範措施來防止這種可能性。