Časové útoky jsou sofistikovanou třídou útoků postranních kanálů, které využívají odchylky v době, kterou systém potřebuje k provedení kryptografických algoritmů nebo jiných citlivých operací. Tyto variace lze měřit a analyzovat za účelem odvození citlivých informací, jako jsou kryptografické klíče, hesla nebo jiná důvěrná data. Základním principem útoků načasování je, že různé vstupy nebo stavy systému mohou vést k různým dobám provádění, i když jsou rozdíly nepatrné. Pečlivým měřením těchto časů provádění může útočník získat dostatek informací k rekonstrukci citlivých dat.
V kontextu kryptografických systémů jsou útoky načasování obzvláště silné, protože mnoho kryptografických algoritmů zahrnuje operace, jejichž doba provádění může záviset na tajném klíči nebo zpracovávaném otevřeném textu. Zvažte například jednoduchou kryptografickou operaci, jako je modulární umocňování, které se běžně používá v kryptografii s veřejným klíčem (např. RSA). Čas potřebný k provedení modulárního umocňování se může lišit v závislosti na počtu bitů nastavených na 1 v exponentu. Pokud útočník dokáže změřit čas potřebný k provedení několika modulárních umocnění s různými vstupy, může potenciálně odvodit bity tajného exponentu.
Jeden z prvních a nejznámějších útoků na časování předvedl Paul Kocher v roce 1996 proti implementacím RSA a Diffie-Hellman. Kocher ukázal, že měřením času potřebného k tomu, aby tyto algoritmy provedly operace se soukromým klíčem, bylo možné odvodit soukromý klíč. Útok využil skutečnosti, že určité operace v rámci algoritmů, jako například modulární násobení, trvaly různě dlouho v závislosti na vstupních hodnotách.
Dalším klasickým příkladem časovaného útoku je útok na algoritmus AES (Advanced Encryption Standard). AES je šifrovací algoritmus symetrických klíčů, který zahrnuje několik kol operací substituce, permutace a míchání. V některých implementacích může čas potřebný k přístupu do paměti nebo k provedení určitých operací záviset na hodnotách tajného klíče a otevřeného textu. Pečlivým měřením času potřebného k zašifrování různých otevřených textů může útočník odvodit informace o tajném klíči.
Chcete-li podrobně porozumět tomu, jak útoky načasování fungují, zvažte následující kroky, které obvykle zahrnují provádění útoku načasování:
1. Fáze měření: Útočník opakovaně posílá různé vstupy do cílového systému a měří dobu, kterou systém potřebuje na odpověď. Tato měření musí být přesná a mohou vyžadovat časovače s vysokým rozlišením nebo specializovaný hardware k dosažení potřebné přesnosti.
2. Sběr dat: Útočník shromažďuje velké množství časových měření odpovídajících různým vstupům. Čím více měření shromáždí, tím přesněji může útočník odvodit citlivé informace.
3. Statistická analýza: Útočník analyzuje shromážděná časová data pomocí statistických metod k identifikaci vzorců nebo korelací mezi vstupními hodnotami a dobami provádění. Tato analýza může odhalit informace o vnitřním stavu systému, jako jsou hodnoty tajných klíčů nebo jiná citlivá data.
4. Extrakce klíčů: Na základě statistické analýzy útočník rekonstruuje citlivé informace. Tento krok může zahrnovat řešení matematických rovnic nebo použití technik strojového učení k odvození tajných dat.
Chcete-li tyto kroky ilustrovat na konkrétním příkladu, zvažte útok načasování na funkci porovnávání hesel. Mnoho systémů používá k ověření uživatelů funkce, které porovnávají hesla poskytnutá uživatelem s hesly uloženými. Naivní implementace takové funkce by mohla porovnat hesla znak po znaku a vrátit se, jakmile je nalezena neshoda. To znamená, že doba potřebná k porovnání dvou hesel se může lišit v závislosti na počtu shodných znaků na začátku hesel. Útočník může tuto změnu časování zneužít k odvození správného hesla po jednotlivých znacích.
Předpokládejme například, že uložené heslo je „zabezpečené heslo“. Útočník může začít zasláním hesla "a" a měřením času potřebného k porovnání. Pokud je srovnání rychlé, útočník ví, že první znak není 'a'. Útočník pak zkouší „b“, „c“ a tak dále, dokud nenajde postavu, jejíž porovnání trvá o něco déle, což naznačuje shodu. Útočník poté přejde na druhý znak a proces zopakuje, případně zrekonstruuje celé heslo.
Ke zmírnění časových útoků lze použít několik protiopatření:
1. Algoritmy konstantního času: Implementujte kryptografické algoritmy a další citlivé operace způsobem, který zajišťuje konstantní dobu provádění bez ohledu na vstupní hodnoty. To může být náročné, ale je to nezbytné pro předcházení útokům načasování.
2. Náhodná zpoždění: Zaveďte náhodná zpoždění při provádění citlivých operací, aby se zakryly informace o načasování. Tento přístup však může být méně účinný proti útočníkům, kteří dokážou zprůměrovat náhodná zpoždění během mnoha měření.
3. Oslepovací techniky: Použijte oslepující techniky k randomizaci vstupů do kryptografických operací, což útočníkům ztěžuje korelaci doby provádění s konkrétními vstupními hodnotami.
4. Hardwarová protiopatření: Používejte hardwarová protiopatření, jako jsou vyhrazené kryptografické koprocesory, které jsou navrženy tak, aby odolávaly útokům načasování tím, že poskytují provádění v konstantním čase nebo jiná ochranná opatření.
5. Audit a testování kódu: Pravidelně auditujte a testujte kód pro zranitelnosti načasování, zejména v kryptografických implementacích. Automatické nástroje a techniky mohou pomoci identifikovat potenciální úniky časování.
Útoky načasování zdůrazňují důležitost zvažování zranitelností postranních kanálů při návrhu a implementaci zabezpečených systémů. Zatímco kryptografické algoritmy jsou často analyzovány z hlediska jejich matematické síly, jejich praktické zabezpečení závisí také na detailech implementace a potenciálu útoků na postranní kanály. Vývojáři a bezpečnostní profesionálové musí být ostražití při řešení těchto zranitelností, aby byla zajištěna robustnost kryptografických systémů.
Další nedávné otázky a odpovědi týkající se Útoky na časování CPU:
- Jaké jsou některé výzvy a kompromisy spojené s implementací hardwarových a softwarových zmírnění útoků načasování při zachování výkonu systému?
- Jakou roli hraje prediktor větve v útocích na časování CPU a jak s ním mohou útočníci manipulovat, aby unikli citlivé informace?
- Jak může programování v konstantním čase pomoci zmírnit riziko útoků načasování v kryptografických algoritmech?
- Co je spekulativní provádění a jak přispívá ke zranitelnosti moderních procesorů vůči útokům načasování, jako je Spectre?
- Co je to načasovací útok?