為什麼側通道安全側重於“屏蔽”而不是“干擾”?
當人們在加密討論中強調使算法執行時確定性的重要性時,我總是覺得這很奇怪,以至於避免任何編譯器優化。
對我來說,似乎從一開始就試圖完全避免側通道資訊洩露是徒勞的。即使算法總是採用相同數量的處理器週期:處理器最終是一串耦合的電線,任何通過任何地方的信號都不可避免地會以時鐘抖動、電源下降等形式耦合到輸出連接器。
真正的問題似乎不是資訊是否洩漏,而是秘密資訊是否有可能重建。誠然,最大限度地減少洩漏總是會使這變得更加困難,但這只是一個因素。孤立地,即使是非常小的信號也可以被分析。從物理上講,關鍵的量是信噪比:如果在給定的通道上發出一點點信號,但也有很多隨機雜訊,而你沒有先驗的方法來區分它們,那麼秘密的提取變得成倍地低效。
特別是對於計時攻擊,我認為不嘗試使計時完全確定,而是故意使其完全不確定是一種更好的方法。最簡單的方法是讓處理器在加密計算中隨機插入無意義的樣板指令(理想情況下,在硬體級別使用散粒雜訊源觸發)。我讀到的攻擊似乎相當微妙,即使只有部分攻擊者的時機被挫敗,也會失敗。
更複雜的方案可能會隨機化指令順序或在許多不相關的計算之間快速執行多任務。
所有這些方法都會導致一些性能損失,但如果我們再次能夠毫無保留地優化我們的程式碼,它可能會被抵消。而且我們會比試圖從一開始就消除任何側通道的方法更安全。處理器是如此復雜,以至於總會有未被發現的側通道,但外部連接最好監督。如果無一例外地與外部的所有連接都被完全堵塞,那麼內部打開哪些側通道並不重要,因為只有公共信號足夠強才能在本底雜訊中脫穎而出。
我錯過了什麼?這些只是我作為物理學家的想法並且出於某種原因不適用於密碼學嗎?
從物理上講,關鍵的量是信噪比:如果在給定的通道上出現一點點信號,但也有很多隨機雜訊,而你沒有先驗的方法來區分它們,那麼提取秘密變得指數級地低效。
實際上,它變得二次效率低下。
例如,如果您的信噪比為 1::1000(雜訊是信號的 1000 倍),則大約需要 $ 1000^2 = 1000000 $ 樣本來提取雜訊。
鑑於:
- 比信號多1000倍的噪音是相當多的
- 在某些情況下,1,000,000 個樣本是相當可行的
- 實施者必須非常小心,以確保不能以某種簡單的方式從雜訊中提取信號
這種方法通常被認為是不可行的(並且不會立即解決基於記憶體的側通道)。
相比之下,對於我們感興趣的大多數原語來說,僅僅將程式碼設計為恆定的時間/記憶體訪問並不是那麼不可行,所以這就是我們傾向於走的方向。
相比之下,您似乎還擔心 DPA 式攻擊,其中攻擊會監聽電子設備(功耗、發射的 EMF 等)。好吧,我們實際上無法設計出不改變功耗並且在切換時不產生 EMF 的門,因此在這種情況下,策略會發生變化。當我們確實擔心這一點時,典型的策略是包括隨機性,但不是隨機性(正如您似乎暗示的那樣);隨機添加隨機性將留下是否存在一些非平凡相關性的問題。相反,我們要麼:
- 使用我們正在使用的原語的一些數學屬性,它允許我們在不修改答案的情況下包含隨機性。舉個簡單的例子,要在素數模上做 modexp(指數是秘密的),我們可以依賴:
$$ A^B \bmod P = A^{B+R(P-1)} \bmod P $$ 在哪裡 $ R $ 是我們為此計算選擇的隨機值。
- 使用門檻值邏輯;其中計算的每個邏輯位都表示為一個函式(通常是 XOR) $ N $ 物理位,以及每個物理位(實際上,每組 $ N-1 $ 物理位)與邏輯位不相關;我們使用隨機性將每個邏輯位轉換為實際的一組物理位來表示它。
第一種策略通常用於公鑰密碼系統(通常具有我們需要的內部對稱性);第二種通常用於對稱系統(這種策略要貴得多,但我們沒有更便宜的替代方案)