Side-Channel-Attack
恆定時間比較如何工作?
libsodium 有一種在恆定時間內比較兩個字節序列的方法。
如果檢測到數據差異,這裡的想法是簡單地避免提前退出嗎?
當我第一次聽說這樣的事情時,我想像一個作業系統睡眠操作來將算法的執行時間四捨五入到某個門檻值,但這聽起來非常低效。
恆定時間比較的常用方法是
$ r←0 $
對於每個位/字節/字 $ x_i $ 和 $ y_i $ 比較
所有 $ x_i $ 匹配對應的 $ y_i $ 當且僅當 $ r $ 就是現在 $ 0 $
關鍵是持續時間與所比較的數據無關,因此測量持續時間不會揭示有關數據的任何資訊。
其他方法也是可能的,比如散列所有 $ x_i $ , 和所有 $ y_i $ (可能具有相同的隨機前綴),然後比較結果(最好使用類似的恆定時間方法)。這可能對其他形式的側通道攻擊不太敏感。