Tidsangrep er en sofistikert klasse sidekanalangrep som utnytter variasjonene i tiden det tar for et system å utføre kryptografiske algoritmer eller andre sensitive operasjoner. Disse variasjonene kan måles og analyseres for å utlede sensitiv informasjon, for eksempel kryptografiske nøkler, passord eller andre konfidensielle data. Det grunnleggende prinsippet bak timing av angrep er at forskjellige innganger eller tilstander til et system kan føre til forskjellige utførelsestider, selv om forskjellene er små. Ved å nøye måle disse utførelsestidene, kan en angriper samle nok informasjon til å rekonstruere de sensitive dataene.
I forbindelse med kryptografiske systemer er timingangrep spesielt potente fordi mange kryptografiske algoritmer involverer operasjoner hvis utførelsestid kan avhenge av den hemmelige nøkkelen eller klarteksten som behandles. Tenk for eksempel på en enkel kryptografisk operasjon som modulær eksponentiering, som vanligvis brukes i kryptografi med offentlig nøkkel (f.eks. RSA). Tiden det tar å utføre modulær eksponentiering kan variere basert på antall biter satt til 1 i eksponenten. Hvis en angriper kan måle tiden det tar å utføre flere modulære eksponentiseringer med forskjellige innganger, kan de potensielt utlede bitene til den hemmelige eksponenten.
Et av de tidligste og mest kjente tidsangrepene ble demonstrert av Paul Kocher i 1996 mot RSA- og Diffie-Hellman-implementeringer. Kocher viste at ved å måle tiden det tok for disse algoritmene å utføre private nøkkeloperasjoner, var det mulig å utlede den private nøkkelen. Angrepet utnyttet det faktum at visse operasjoner innenfor algoritmene, for eksempel modulære multiplikasjoner, tok ulik tid avhengig av inngangsverdiene.
Et annet klassisk eksempel på et tidsangrep er angrepet på AES (Advanced Encryption Standard) algoritmen. AES er en symmetrisk nøkkelkrypteringsalgoritme som involverer flere runder med substitusjons-, permutasjons- og blandingsoperasjoner. I noen implementeringer kan tiden det tar å få tilgang til minnet eller utføre visse operasjoner avhenge av verdiene til den hemmelige nøkkelen og klarteksten. Ved å nøye måle tiden det tar å kryptere forskjellige klartekster, kan en angriper utlede informasjon om den hemmelige nøkkelen.
For å forstå hvordan timingangrep fungerer i detalj, bør du vurdere følgende trinn som vanligvis er involvert i å utføre et timingangrep:
1. Målefase: Angriperen sender gjentatte ganger forskjellige input til målsystemet og måler tiden det tar før systemet reagerer. Disse målingene må være nøyaktige og kan kreve høyoppløselige timere eller spesialisert maskinvare for å oppnå den nødvendige nøyaktigheten.
2. Innsamling av data : Angriperen samler inn et stort antall tidsmålinger som tilsvarer ulike innganger. Jo flere målinger som samles inn, desto mer nøyaktig kan angriperen utlede den sensitive informasjonen.
3. Statistisk analyse: Angriperen analyserer de innsamlede tidsdataene ved hjelp av statistiske metoder for å identifisere mønstre eller korrelasjoner mellom inngangsverdiene og utførelsestidene. Denne analysen kan avsløre informasjon om den interne tilstanden til systemet, for eksempel verdiene til hemmelige nøkler eller andre sensitive data.
4. Nøkkelutvinning: Basert på den statistiske analysen, rekonstruerer angriperen den sensitive informasjonen. Dette trinnet kan innebære å løse matematiske ligninger eller bruke maskinlæringsteknikker for å utlede de hemmelige dataene.
For å illustrere disse trinnene med et konkret eksempel, vurder et tidsangrep på en passordsammenligningsfunksjon. Mange systemer bruker funksjoner som sammenligner brukeroppgitte passord med lagrede passord for å autentisere brukere. En naiv implementering av en slik funksjon kan sammenligne passordene tegn for tegn og returnere så snart en mismatch er funnet. Dette betyr at tiden det tar å sammenligne to passord kan variere avhengig av antall samsvarende tegn i begynnelsen av passordene. En angriper kan utnytte denne tidsvariasjonen til å utlede riktig passord ett tegn om gangen.
Anta for eksempel at det lagrede passordet er "sikkert passord". En angriper kan starte med å sende passordet "a" og måle tiden det tar for sammenligningen. Hvis sammenligningen er rask, vet angriperen at det første tegnet ikke er 'a'. Angriperen prøver deretter "b", "c", og så videre, til de finner en karakter som tar litt lengre tid å sammenligne, noe som indikerer en match. Angriperen går deretter videre til det andre tegnet og gjentar prosessen, og rekonstruerer til slutt hele passordet.
For å redusere timingangrep kan flere mottiltak brukes:
1. Konstanttidsalgoritmer: Implementer kryptografiske algoritmer og andre sensitive operasjoner på en måte som sikrer konstant utførelsestid uavhengig av inngangsverdiene. Dette kan være utfordrende, men er avgjørende for å forhindre timing av angrep.
2. Tilfeldige forsinkelser: Introduser tilfeldige forsinkelser i utførelse av sensitive operasjoner for å skjule tidsinformasjonen. Imidlertid kan denne tilnærmingen være mindre effektiv mot angripere som kan snitte ut de tilfeldige forsinkelsene over mange målinger.
3. Blindingsteknikker: Bruk blendingsteknikker for å randomisere inngangene til kryptografiske operasjoner, noe som gjør det vanskelig for angripere å korrelere utførelsestider med spesifikke inngangsverdier.
4. Maskinvare mottiltak: Bruk maskinvarebaserte mottiltak, for eksempel dedikerte kryptografiske co-prosessorer, som er utformet for å motstå timingangrep ved å tilby konstant utførelse eller andre beskyttelsestiltak.
5. Kode revisjon og testing: Regelmessig revidere og teste kode for tidssårbarheter, spesielt i kryptografiske implementeringer. Automatiserte verktøy og teknikker kan bidra til å identifisere potensielle tidslekkasjer.
Tidsangrep fremhever viktigheten av å vurdere sidekanalsårbarheter i design og implementering av sikre systemer. Mens kryptografiske algoritmer ofte analyseres for deres matematiske styrke, avhenger deres praktiske sikkerhet også av implementeringsdetaljene og potensialet for sidekanalangrep. Utviklere og sikkerhetseksperter må være årvåkne når de håndterer disse sårbarhetene for å sikre robustheten til kryptografiske systemer.
Andre nyere spørsmål og svar vedr CPU timing angrep:
- Hva er noen av utfordringene og avveiningene som er involvert i implementering av maskinvare- og programvarebegrensninger mot timingangrep og samtidig opprettholde systemytelsen?
- Hvilken rolle spiller grenprediktoren i CPU-timingangrep, og hvordan kan angripere manipulere den til å lekke sensitiv informasjon?
- Hvordan kan konstant-tidsprogrammering bidra til å redusere risikoen for timing av angrep i kryptografiske algoritmer?
- Hva er spekulativ utførelse, og hvordan bidrar det til sårbarheten til moderne prosessorer for timing av angrep som Spectre?
- Hva er et tidsangrep?