Časovni napadi so prefinjen razred stranskih napadov, ki izkoriščajo razlike v času, ki je potreben, da sistem izvede kriptografske algoritme ali druge občutljive operacije. Te variacije je mogoče izmeriti in analizirati za sklepanje o občutljivih informacijah, kot so kriptografski ključi, gesla ali drugi zaupni podatki. Temeljno načelo časovnih napadov je, da lahko različni vnosi ali stanja sistema povzročijo različne čase izvajanja, tudi če so razlike majhne. Z natančnim merjenjem teh časov izvajanja lahko napadalec zbere dovolj informacij za rekonstrukcijo občutljivih podatkov.
V kontekstu kriptografskih sistemov so časovni napadi še posebej močni, ker številni kriptografski algoritmi vključujejo operacije, katerih čas izvajanja je lahko odvisen od tajnega ključa ali odprtega besedila, ki se obdeluje. Na primer, razmislite o preprosti kriptografski operaciji, kot je modularno potenciranje, ki se običajno uporablja v kriptografiji z javnim ključem (npr. RSA). Čas, potreben za izvedbo modularnega potenciranja, se lahko razlikuje glede na število bitov, nastavljenih na 1 v eksponentu. Če lahko napadalec izmeri čas, potreben za izvedbo več modularnih stopnjevanj z različnimi vhodi, lahko potencialno sklepa o bitih tajnega eksponenta.
Paul Kocher je leta 1996 demonstriral enega najzgodnejših in najbolj znanih časovnih napadov proti implementacijam RSA in Diffie-Hellman. Kocher je pokazal, da je mogoče z merjenjem časa, ki ga ti algoritmi porabijo za izvedbo operacij zasebnega ključa, izpeljati zasebni ključ. Napad je izkoristil dejstvo, da so nekatere operacije znotraj algoritmov, kot je modularno množenje, trajale različno dolgo, odvisno od vhodnih vrednosti.
Drug klasičen primer časovnega napada je napad na algoritem AES (Advanced Encryption Standard). AES je šifrirni algoritem s simetričnim ključem, ki vključuje več krogov operacij zamenjave, permutacije in mešanja. V nekaterih izvedbah je lahko čas, potreben za dostop do pomnilnika ali izvajanje določenih operacij, odvisen od vrednosti skrivnega ključa in odprtega besedila. Z natančnim merjenjem časa, potrebnega za šifriranje različnih odprtih besedil, lahko napadalec sklepa o informacijah o tajnem ključu.
Če želite podrobno razumeti, kako delujejo časovni napadi, razmislite o naslednjih korakih, ki so običajno vključeni v izvedbo časovnega napada:
1. Faza merjenja: Napadalec vedno znova pošilja različne vnose v ciljni sistem in meri čas, ki je potreben, da se sistem odzove. Te meritve morajo biti natančne in lahko zahtevajo časovnike z visoko ločljivostjo ali posebno strojno opremo, da dosežejo potrebno natančnost.
2. Zbiranje podatkov: Napadalec zbere veliko število časovnih meritev, ki ustrezajo različnim vnosom. Več kot je zbranih meritev, bolj natančno lahko napadalec sklepa o občutljivih informacijah.
3. Statistična analiza: Napadalec analizira zbrane časovne podatke s statističnimi metodami, da prepozna vzorce ali korelacije med vhodnimi vrednostmi in časi izvajanja. Ta analiza lahko razkrije informacije o notranjem stanju sistema, kot so vrednosti skrivnih ključev ali drugi občutljivi podatki.
4. Ekstrakcija ključa: Na podlagi statistične analize napadalec rekonstruira občutljive informacije. Ta korak lahko vključuje reševanje matematičnih enačb ali uporabo tehnik strojnega učenja za sklepanje skrivnih podatkov.
Za ponazoritev teh korakov s konkretnim primerom razmislite o časovnem napadu na funkcijo primerjave gesel. Številni sistemi uporabljajo funkcije, ki primerjajo uporabniško posredovana gesla s shranjenimi gesli za preverjanje pristnosti uporabnikov. Naivna izvedba takšne funkcije lahko primerja gesla znak za znakom in se vrne takoj, ko se ugotovi neujemanje. To pomeni, da se čas, potreben za primerjavo dveh gesel, lahko razlikuje glede na število ujemajočih se znakov na začetku gesel. Napadalec lahko izkoristi to časovno variacijo za sklepanje pravilnega gesla en znak naenkrat.
Denimo, da je shranjeno geslo "varno geslo". Napadalec lahko začne tako, da pošlje geslo "a" in izmeri čas, potreben za primerjavo. Če je primerjava hitra, napadalec ve, da prvi znak ni 'a'. Napadalec nato poskusi z "b", "c" in tako naprej, dokler ne najde znaka, katerega primerjava traja nekoliko dlje, kar kaže na ujemanje. Napadalec nato preide na drugi znak in ponovi postopek ter na koncu rekonstruira celotno geslo.
Za ublažitev časovnih napadov je mogoče uporabiti več protiukrepov:
1. Algoritmi s konstantnim časom: Izvedite kriptografske algoritme in druge občutljive operacije na način, ki zagotavlja stalen čas izvajanja ne glede na vhodne vrednosti. To je lahko zahtevno, vendar je bistveno za preprečevanje časovnih napadov.
2. Naključne zamude: uvedite naključne zakasnitve pri izvajanju občutljivih operacij, da zakrijete informacije o času. Vendar pa je ta pristop lahko manj učinkovit proti napadalcem, ki lahko izračunajo povprečje naključnih zamud pri številnih meritvah.
3. Slepilne tehnike: Uporabite tehnike slepljenja za naključno razporejanje vnosov v kriptografske operacije, kar napadalcem oteži povezovanje časov izvajanja z določenimi vhodnimi vrednostmi.
4. Strojni protiukrepi: Uporabite protiukrepe, ki temeljijo na strojni opremi, kot so namenski kriptografski soprocesorji, ki so zasnovani tako, da se upirajo časovnim napadom z zagotavljanjem stalnega izvajanja ali drugih zaščitnih ukrepov.
5. Revizija in testiranje kode: Redno preverjajte in testirajte kodo za časovne ranljivosti, zlasti v kriptografskih izvedbah. Avtomatizirana orodja in tehnike lahko pomagajo prepoznati morebitna časovna uhajanja.
Časovni napadi poudarjajo pomen upoštevanja ranljivosti stranskih kanalov pri načrtovanju in izvajanju varnih sistemov. Medtem ko se kriptografski algoritmi pogosto analizirajo glede na njihovo matematično moč, je njihova praktična varnost odvisna tudi od podrobnosti izvedbe in možnosti napadov po stranskih kanalih. Razvijalci in strokovnjaki za varnost morajo biti pozorni pri odpravljanju teh ranljivosti, da zagotovijo robustnost kriptografskih sistemov.
Druga nedavna vprašanja in odgovori v zvezi Časovni napadi CPU:
- Kateri so nekateri izzivi in kompromisi, povezani z uvedbo ublažitve strojne in programske opreme pred časovnimi napadi ob ohranjanju zmogljivosti sistema?
- Kakšno vlogo ima napovedovalec veje pri napadih na časovni nadzor procesorja in kako lahko napadalci z njim manipulirajo, da uhajajo občutljive informacije?
- Kako lahko programiranje s konstantnim časom pomaga ublažiti tveganje časovnih napadov v kriptografskih algoritmih?
- Kaj je špekulativno izvajanje in kako prispeva k ranljivosti sodobnih procesorjev za časovne napade, kot je Spectre?
- Kaj je časovni napad?