Timingangreb er en sofistikeret klasse af sidekanalangreb, der udnytter variationerne i den tid, det tager for et system at udføre kryptografiske algoritmer eller andre følsomme operationer. Disse variationer kan måles og analyseres for at udlede følsom information, såsom kryptografiske nøgler, adgangskoder eller andre fortrolige data. Det grundlæggende princip bag timing af angreb er, at forskellige input eller tilstande af et system kan føre til forskellige eksekveringstider, selvom forskellene er små. Ved omhyggeligt at måle disse eksekveringstider kan en angriber indsamle nok information til at rekonstruere de følsomme data.
I forbindelse med kryptografiske systemer er timingangreb særligt potente, fordi mange kryptografiske algoritmer involverer operationer, hvis udførelsestid kan afhænge af den hemmelige nøgle eller den almindelige tekst, der behandles. Overvej f.eks. en simpel kryptografisk operation såsom modulær eksponentiering, som er almindeligt anvendt i offentlig nøglekryptering (f.eks. RSA). Den tid, det tager at udføre modulær eksponentiering, kan variere baseret på antallet af bit sat til 1 i eksponenten. Hvis en angriber kan måle den tid, det tager at udføre flere modulære eksponentieringer med forskellige input, kan de potentielt udlede bits af den hemmelige eksponent.
Et af de tidligste og mest kendte timing-angreb blev demonstreret af Paul Kocher i 1996 mod RSA- og Diffie-Hellman-implementeringer. Kocher viste, at ved at måle den tid, det tog for disse algoritmer at udføre private nøgleoperationer, var det muligt at udlede den private nøgle. Angrebet udnyttede det faktum, at visse operationer inden for algoritmerne, såsom modulære multiplikationer, tog forskellige mængder tid afhængigt af inputværdierne.
Et andet klassisk eksempel på et timingangreb er angrebet på AES (Advanced Encryption Standard) algoritmen. AES er en symmetrisk nøglekrypteringsalgoritme, der involverer flere runder af substitution, permutation og blandingsoperationer. I nogle implementeringer kan den tid, det tager at få adgang til hukommelsen eller udføre visse handlinger, afhænge af værdierne af den hemmelige nøgle og klarteksten. Ved omhyggeligt at måle den tid, det tager at kryptere forskellige klartekster, kan en angriber udlede oplysninger om den hemmelige nøgle.
For at forstå, hvordan timingangreb fungerer i detaljer, skal du overveje følgende trin, der typisk er involveret i at udføre et timingangreb:
1. Målefase: Angriberen sender gentagne gange forskellige input til målsystemet og måler den tid, det tager for systemet at reagere. Disse målinger skal være præcise og kan kræve højopløsningstimere eller specialiseret hardware for at opnå den nødvendige nøjagtighed.
2. Dataindsamling: Angriberen indsamler et stort antal timingmålinger svarende til forskellige input. Jo flere målinger der indsamles, jo mere præcist kan angriberen udlede de følsomme oplysninger.
3. Statistisk analyse: Angriberen analyserer de indsamlede timingdata ved hjælp af statistiske metoder for at identificere mønstre eller korrelationer mellem inputværdierne og udførelsestiderne. Denne analyse kan afsløre oplysninger om systemets interne tilstand, såsom værdierne af hemmelige nøgler eller andre følsomme data.
4. Nøgleudtrækning: Baseret på den statistiske analyse rekonstruerer angriberen de følsomme oplysninger. Dette trin kan involvere at løse matematiske ligninger eller bruge maskinlæringsteknikker til at udlede de hemmelige data.
For at illustrere disse trin med et konkret eksempel, overvej et timingangreb på en adgangskodesammenligningsfunktion. Mange systemer bruger funktioner, der sammenligner brugerleverede adgangskoder med gemte adgangskoder for at godkende brugere. En naiv implementering af en sådan funktion kan sammenligne adgangskoden tegn for tegn og vende tilbage, så snart en uoverensstemmelse er fundet. Det betyder, at den tid, det tager at sammenligne to adgangskoder, kan variere afhængigt af antallet af matchende tegn i begyndelsen af adgangskoden. En angriber kan udnytte denne tidsvariation til at udlede den korrekte adgangskode ét tegn ad gangen.
Antag for eksempel, at den lagrede adgangskode er "securepassword". En angriber kan starte med at sende adgangskoden "a" og måle den tid, det tager at sammenligne. Hvis sammenligningen er hurtig, ved angriberen, at det første tegn ikke er 'a'. Angriberen prøver derefter "b", "c" og så videre, indtil de finder en karakter, der tager lidt længere tid at sammenligne, hvilket indikerer en match. Angriberen går derefter videre til det andet tegn og gentager processen og rekonstruerer til sidst hele adgangskoden.
For at afbøde timingangreb kan der anvendes flere modforanstaltninger:
1. Konstant-tid algoritmer: Implementer kryptografiske algoritmer og andre følsomme operationer på en måde, der sikrer konstant eksekveringstid uanset inputværdierne. Dette kan være udfordrende, men er vigtigt for at forhindre timing af angreb.
2. Tilfældige forsinkelser: Indfør tilfældige forsinkelser i udførelsen af følsomme operationer for at skjule tidsinformationen. Denne tilgang kan dog være mindre effektiv over for angribere, som kan gennemsnittet ud af de tilfældige forsinkelser over mange målinger.
3. Blændingsteknikker: Brug blændende teknikker til at randomisere input til kryptografiske operationer, hvilket gør det vanskeligt for angribere at korrelere eksekveringstider med specifikke inputværdier.
4. Hardware modforanstaltninger: Anvend hardwarebaserede modforanstaltninger, såsom dedikerede kryptografiske co-processorer, der er designet til at modstå timingangreb ved at levere konstant udførelse eller andre beskyttelsesforanstaltninger.
5. Kode audit og test: Regelmæssig revision og test af kode for timing sårbarheder, især i kryptografiske implementeringer. Automatiserede værktøjer og teknikker kan hjælpe med at identificere potentielle timinglækager.
Timing angreb fremhæver vigtigheden af at overveje side-kanal sårbarheder i design og implementering af sikre systemer. Mens kryptografiske algoritmer ofte analyseres for deres matematiske styrke, afhænger deres praktiske sikkerhed også af implementeringsdetaljerne og potentialet for sidekanalangreb. Udviklere og sikkerhedsprofessionelle skal være årvågne med at løse disse sårbarheder for at sikre robustheden af kryptografiske systemer.
Andre seneste spørgsmål og svar vedr CPU timing angreb:
- Hvad er nogle af de udfordringer og afvejninger, der er involveret i implementering af hardware- og softwarebegrænsninger mod timingangreb, mens systemets ydeevne bevares?
- Hvilken rolle spiller grenprædiktoren i CPU-timingangreb, og hvordan kan angribere manipulere den til at lække følsomme oplysninger?
- Hvordan kan konstant-tidsprogrammering hjælpe med at mindske risikoen for timing af angreb i kryptografiske algoritmer?
- Hvad er spekulativ eksekvering, og hvordan bidrager det til moderne processorers sårbarhed over for timing af angreb som Spectre?
- Hvad er et tidsangreb?