定時攻擊是一類複雜的旁道攻擊,它利用系統執行加密演算法或其他敏感操作所需時間的變化。可以測量和分析這些變化以推斷敏感信息,例如密鑰、密碼或其他機密數據。定時攻擊背後的基本原理是,系統的不同輸入或狀態可能導致不同的執行時間,即使差異很小。透過仔細測量這些執行時間,攻擊者可以收集足夠的資訊來重建敏感資料。
在密碼系統的背景下,定時攻擊特別有效,因為許多密碼演算法涉及的操作的執行時間可能取決於金鑰或正在處理的明文。例如,考慮一個簡單的密碼運算,例如模冪運算,它通常用於公鑰密碼術(例如 RSA)。執行模冪運算所需的時間可能會根據指數中設定為 1 的位數而有所不同。如果攻擊者可以測量使用不同輸入執行多次模冪運算所需的時間,他們就有可能推斷出秘密指數的位元。
Paul Kocher 在 1996 年針對 RSA 和 Diffie-Hellman 實作演示了最早且最著名的定時攻擊之一。 Kocher 表明,透過測量這些演算法執行私鑰操作所需的時間,可以推斷出私鑰。該攻擊利用了這樣一個事實:演算法中的某些操作(例如模乘法)根據輸入值花費不同的時間。
定時攻擊的另一個典型例子是對 AES(高級加密標準)演算法的攻擊。 AES 是一種對稱金鑰加密演算法,涉及多輪替換、排列和混合操作。在某些實作中,存取記憶體或執行某些操作所花費的時間可以取決於秘密金鑰和明文的值。透過仔細測量加密不同明文所需的時間,攻擊者可以推斷出有關金鑰的資訊。
若要了解定時攻擊的詳細工作原理,請考慮執行定時攻擊時通常涉及的以下步驟:
1. 測量階段:攻擊者反覆向目標系統發送不同的輸入,並測量系統回應所需的時間。這些測量需要精確,並且可能需要高解析度計時器或專用硬體才能達到必要的精度。
2. 數據採集:攻擊者收集與不同輸入相對應的大量時序測量。收集的測量值越多,攻擊者就越能準確地推斷出敏感資訊。
3. 統計分析:攻擊者使用統計方法分析收集的時序數據,以識別輸入值和執行時間之間的模式或相關性。此分析可以揭示有關係統內部狀態的信息,例如密鑰或其他敏感資料的值。
4. 密鑰擷取:攻擊者根據統計分析,重構敏感資訊。此步驟可能涉及求解數學方程式或使用機器學習技術來推斷秘密資料。
為了以具體範例說明這些步驟,請考慮對密碼比較函數的定時攻擊。許多系統使用將使用者提供的密碼與儲存的密碼進行比較的功能來對使用者進行身份驗證。此類函數的簡單實作可能會逐個字元地比較密碼,並在發現不匹配時立即返回。這意味著比較兩個密碼所需的時間可能會有所不同,具體取決於密碼開頭匹配字元的數量。攻擊者可以利用這種時間變化一次推斷一個字元的正確密碼。
例如,假設儲存的密碼是“securepassword”。攻擊者可以先發送密碼“a”並測量比較所需的時間。如果比較很快,攻擊者就知道第一個字元不是「a」。然後,攻擊者嘗試“b”、“c”等,直到找到一個需要稍長比較時間的字符,表示匹配。然後攻擊者轉向第二個字元並重複該過程,最終重建整個密碼。
為了減輕定時攻擊,可以採用多種對策:
1. 恆定時間演算法:以確保恆定執行時間(無論輸入值為何)的方式實現加密演算法和其他敏感操作。這可能具有挑戰性,但對於防止定時攻擊至關重要。
2. 隨機延誤:在敏感操作的執行中引入隨機延遲以模糊時序資訊。然而,這種方法對於可以平均多次測量的隨機延遲的攻擊者來說可能不太有效。
3. 致盲技術:使用致盲技術對加密操作的輸入進行隨機化,使攻擊者難以將執行時間與特定輸入值關聯起來。
4. 硬體對策:採用基於硬體的對策,例如專用加密協處理器,旨在透過提供恆定時間執行或其他保護措施來抵禦定時攻擊。
5. 程式碼審核和測試:定期審核和測試程式碼是否有計時漏洞,特別是在加密實作中。自動化工具和技術可以幫助識別潛在的時序洩漏。
定時攻擊凸顯了在安全系統的設計和實作中考慮側通道漏洞的重要性。雖然人們經常分析加密演算法的數學強度,但它們的實際安全性也取決於實現細節和旁道攻擊的可能性。開發人員和安全專業人員必須保持警惕,解決這些漏洞,以確保加密系統的穩健性。
最近的其他問題和解答 CPU時序攻擊:
- 在保持系統效能的同時實施定時攻擊的硬體和軟體緩解措施涉及哪些挑戰和權衡?
- 分支預測器在CPU定時攻擊中扮演什麼角色,攻擊者如何操縱它來洩漏敏感資訊?
- 恆定時間編程如何幫助降低密碼演算法中定時攻擊的風險?
- 什麼是推測執行?
- 什麼是定時攻擊?