RSA (Rivest-Shamir-Adleman) er en algoritme, der bruges af moderne computere til at kryptere og dekryptere meddelelser. Det er en asymmetrisk kryptografisk algoritme. Asymmetrisk betyder, at der er to forskellige nøgler. Dette kaldes også offentlig nøglekryptografi, fordi en af nøglerne kan gives til hvem som helst. Den anden nøgle skal holdes privat. Algoritmen er baseret på det faktum, at det er vanskeligt at finde faktorerne til et stort sammensat tal: Når faktorerne er primtal, kaldes problemet primfaktorisering. Det er også en nøglepargenerator (offentlig og privat nøgle).

RSA omfatter en offentlig nøgle og en privat nøgle. Den offentlige nøgle kan være kendt af alle - den bruges til at kryptere meddelelser. Meddelelser, der er krypteret med den offentlige nøgle, kan kun dekrypteres med den private nøgle. Den private nøgle skal holdes hemmelig. Det er meget vanskeligt at beregne den private nøgle ud fra den offentlige nøgle.

Hvordan RSA fungerer (kort)

  • Nøglegenerering: To store primtal p og q vælges tilfældigt og multipliceres for at danne n = p·q. Euler-funktionen φ(n) = (p−1)(q−1) beregnes. Et helt tal e vælges, så 1 < e < φ(n) og gcd(e, φ(n)) = 1. Den private eksponent d findes som den multiplikative invers af e modulo φ(n), dvs. e·d ≡ 1 (mod φ(n)). Den offentlige nøgle er (n, e) og den private nøgle er (n, d).
  • Kryptering: En besked m (omdannet til et tal 0 <= m < n ved passende kodning/padding) krypteres ved c ≡ m^e (mod n).
  • Dekryptering: Den krypterede tekst c dekrypteres ved m ≡ c^d (mod n). Dette gøres effektivt i praksis ved hjælp af optimeringer som kinesisk restteorem (CRT).

Anvendelser

  • Beskyttelse af data ved overførsel (f.eks. del af TLS/HTTPS) — ofte brugt til at etablere en delt nøgle til symmetrisk kryptering.
  • Digital signatur: RSA kan bruges til at signere data (verificeres med den offentlige nøgle), hvilket sikrer integritet og afsenderautenticitet.
  • Nøgleudveksling og certifikater i PKI (Public Key Infrastructure).

Sikkerhed og begrænsninger

  • Sikkerhedsgrundlag: RSA's sikkerhed afhænger primært af sværheden ved primfaktorisering af n. Hvis en angriber kan faktorisere n, kan vedkommende beregne φ(n) og dermed finde d.
  • Key size: Praktisk sikkerhed kræver store n (i dag anbefales mindst 2048 bit til de fleste anvendelser; højere krav for langsigtet sikkerhed).
  • Padding og angreb: Rå RSA uden padding er sårbar over for mange angreb. Moderne systemer bruger sikre paddingordninger som OAEP til kryptering og PSS til signaturer for at modvirke eksempelvis valgtekstudnyttelse (chosen-ciphertext) og andre svagheder.
  • Performance: RSA er beregningsmæssigt tungere end symmetrisk kryptering og anvendes derfor ofte kun til at kryptere nøgler eller korte datablokke (hybridkryptografi).
  • Praktiske angreb: Timing-angreb, sidekanalangreb, dårligt genererede primtal eller genbrug af p eller q kan kompromittere nøgler. Implementationssikkerhed er derfor kritisk.
  • Fremtidige trusler: Kvantecomputere med Shors algoritme ville kunne faktorisere store tal effektivt og dermed bryde RSA. Derfor arbejdes der på post-kvantemodstandskraftige algoritmer.

Best practices

  • Anvend moderne padding (OAEP/PSS) og standardiserede protokoller.
  • Brug tilstrækkelig nøglestørrelse (mindst 2048 bit i dag; 3072 bit eller mere for højere sikkerhedskrav).
  • Sikr korrekt og sikker tilfældig generering af primtal og hemmeligholdelse af private nøgler.
  • Opdater implementeringer regelmæssigt for at lukke sidekanalsvagheder og andre implementationfejl.
  • Overvej hybridkryptografi: brug RSA til at udveksle en symmetrisk nøgle, og brug derefter en symmetrisk algoritme til selve datatransmissionen.

Yderligere tekniske noter

  • Den private redegørelse for de matematiske egenskaber bag RSA bygger på modulær eksponentiering og Euklids algoritme til beregning af den multiplikative invers.
  • Ved hjælp af kinesisk restteorem (CRT) kan dekryptering gøres op til fire gange hurtigere ved at bruge p og q direkte i beregningerne — men dette kræver ekstra beskyttelse af p og q, da kompromittering af disse afslører nøglen.
  • Historisk: RSA blev publiceret i 1977 af Ronald Rivest, Adi Shamir og Leonard Adleman og har siden været en af de mest brugte offentlige nøglealgoritmer. Mange patenter er udløbet, og RSA er bredt implementeret i standarder.