Hvis du noen gang har spekulert på hvordan ting holdes beskyttet på internett, spesielt med tanke på de mange skadelige aktørene som stadig prøver å trenge inn i datasystemer, er kryptografi et av de mest relevante svarene.
Som du kanskje vet, er kryptografi bare en av mange metoder for å beskytte informasjon og kommunikasjon. Det betyr likevel ikke at det er enkelt. Faktisk er det en teknologi som stadig utvikles for å sikre at standardene den bygger på, alltid er av høyeste kvalitet.
Et godt eksempel på en slik standard er AES, et akronym du sikkert har sett før, spesielt hvis du ofte bruker meldingsapper som WhatsApp, Signal eller Telegram, eller VPN-programvare. I denne artikkelen skal vi konsentrere oss om AES og gi deg en bedre forståelse av det.
Hva er AES?
AES, som står for Advanced Encryption Standard, er en velkjent krypteringsmetode som lenge har vært brukt for å sikre at data holdes trygge og beskyttet, unna nysgjerrige blikk.
Det som gjør at AES-kryptering skiller seg ut, er at den er en rask og sikker krypteringsmetode. I tillegg gjør fleksibiliteten det mulig å bruke den i et bredt spekter av produkter, fra vanlige apper som WhatsApp eller Signal, til militære sikkerhetssystemer og til og med maskinvare.
Slik fungerer kryptering
Du er sikkert kjent med hvordan kryptering fungerer. Hvis ikke, får du en rask oppfriskning: kryptering tar klartekst og omdanner den til en kryptert form, slik at den ser ut som en tilfeldig rekke tegn. AES er en symmetrisk krypteringsform, ettersom den bruker samme nøkkel for å kryptere og dekryptere data.
Denne krypteringsstandarden bruker substitusjonspermutasjonsnettverksalgoritmen (SPN-algoritmen) for å utføre flere krypteringsrunder for å beskytte data. At den bruker så mange runder, gjør AES nesten ugjennomtrengelig.
AES er ikke bare den første, men også den eneste offentlig tilgjengelige algoritmen som ble godkjent av NSA (National Security Agency) for å beskytte topphemmelig data. Opprinnelig ble denne krypteringsstandarden kalt Rijndael, etter navnene på de to utviklerne, Vincent Rijmen og Joan Daemen (begge fra Belgia).
AES med ulike nøkkellengder
AES består av tre blokkchiffer, og hver av disse har et forskjellig antall mulige nøkkelkombinasjoner, som følger:
AES-128: 128-biters nøkkellengde = 3,4 * 10³⁸
AES-192: 192-bits nøkkellengde = 6,2 * 10⁵⁷
AES-256: 256-bits nøkkellengde = 1,1 * 10⁷⁷
Selv om det finnes tre blokkchiffer, krypterer og dekrypterer de alle data i 128-bits blokker ved hjelp av ulike nøkkellengder (dvs. 128, 192 og 256, som angitt ovenfor). Det er altså trygt å si at selv om nøkkellengden kan variere, er blokkstørrelsen alltid den samme (128 bit eller 16 byte, som er det samme).
Det faktum at AES bruker ulike nøkkellengder, har reist flere spørsmål blant brukerne, som for eksempel: Hvorfor trenger vi flere nøkkellengder? Noen stiller til og med spørsmål ved behovet for å ha flere nøkkellengder, spesielt med tanke på at 256-bits nøkkelen antas å være den sikreste.
Selv om 256-bit AES-nøkkelen er den sterkeste av dem, ofte omtalt som «militærklasse», er den ikke alltid standard, og grunnen til dette er tilgjengelige ressurser, eller mangel på dem.
AES-128 vs AES-256
Jo større en nøkkel er, desto mer ressurser vil den kreve. Derfor er det mer sannsynlig at et system med lavere kapasitet bruker 128-bits AES-nøkler i stedet for den 256-bits versjonen. Hvis du for eksempel bruker 256-bit AES-kryptering på telefonen, vil det tømme batteriet raskere enn 128-bits versjonen av samme krypteringsstandard.
256-biters AES-nøkler er mye vanskeligere å brute-force enn 128-biters. Men selv med store mengder datakraft er 128-biters AES-nøkler fortsatt nesten umulige å knekke. Derfor kan det være et bedre valg å bruke denne versjonen i stedet for 256-biters nøkler hvis du er bekymret for strøm eller ventetid, særlig på bærbare enheter (som smarttelefoner).
Heldigvis har teknologiske fremskritt gjort forskjellene i både datakraft og batterilevetid mellom bruk av AES-256 og AES-128 ubetydelige. Dette gjør 256-bit AES til det mest populære valget, ettersom de fleste brukere foretrekker å ha trygghet i sinnet.
Fordeler med å bruke AES
Krypteringsmetodene som brukes av AES er raske og enkle å forstå, noe som gjør AES til et populært valg innen mange felt. AES er ikke bare raskt og sikkert, men også enkelt å implementere, noe som øker populariteten.
Videre kan den dekryptere beskyttede data like raskt som den kan kryptere dem, samtidig som den bruker mindre minne og datakraft enn andre populære krypteringsstandarder (som DES), noe som gir den en fordel.
Sist, men ikke minst, er AES fleksibel nok til at du kan kombinere den med flere andre sikkerhetsprotokoller som TKIP, WPA2, WEP, men også andre krypteringstyper som SSL.
Her er noen viktige fordeler ved å velge AES fremfor andre krypteringsstandarder:
Støtter implementering i både maskinvare og programvare
At den støtter tre nøkkellengder gir deg litt fleksibilitet når det gjelder sikkerhet og hastighet (ytelse)
Alle de tre nøkkeltypene er lange nok, noe som gjør AES til et umulig mål for brute-force
Ingen kryptografiske angrep har hittil vist seg å fungere mot AES
Du finner den overalt, ettersom amerikanske myndigheter definerte den som en standard
Enkel å implementere uansett destinasjon (maskinvareimplementering er angivelig enklere enn programvare)
Tar ikke så mye minne som andre krypteringstyper (for eksempel DES)
Enkel å kombinere med andre sikkerhetsprotokoller og krypteringstyper
Vanlige bruksområder for AES
Selv om vi allerede har nevnt at AES vanligvis brukes overalt der det er støtte for det, er det noen eksempler der du sannsynligvis vil møte det. Nemlig:
VPN-er
Måten VPN-er fungerer på dreier seg om å omdirigere trafikken din, men ikke før den er kryptert slik at andre ikke kan se den i tilfelle de overvåker tilkoblingen din. I tillegg må trafikken dekrypteres ved utgangspunktet, noe som krever en krypteringsstandard. AES-256 brukes som standard av flere VPN-leverandører, inkludert NordVPN, Surfshark og ExpressVPN.
Passordadministratorer
Passordadministratorer lar deg legge inn alle passordene dine og beskytte dem med ett enkelt passord ved hjelp av kryptering. Flere passordadministrasjonsløsninger har valgt AES som sin operative krypteringsstandard, med tanke på at den er enkel å implementere, rask og sikker.
Wi-Fi-nettverk
Uten trafikkryptering kan angripere sitte utenfor det trådløse nettverket ditt og fange opp ukrypterte pakker med en passende WiFi-adapter. Dermed kan de overvåke alt du foretar deg på nett uten problemer. Heldigvis kan AES-kryptering, vanligvis sammen med andre sikkerhetsstandarder (WPA2 er mest populær nå), forhindre at dette skjer.
Nettlesere
Du vet sikkert allerede at nettlesere en stund nå har kryptert brukernes tilkoblinger for å beskytte dem mot ulike trusler, som MITM-angrep (Man-In-The-Middle), spoofing eller trafikkovervåking.
Diskkryptering
Selv om denne funksjonen mest brukes på bærbare enheter som smarttelefoner og nettbrett, er diskkryptering ikke uvanlig hvis du vil øke personvernet og sikkerheten. AES er for tiden en av de mest populære metodene for å kryptere og dekryptere diskinnhold.
Programvare for filkomprimering
Enten vi snakker om WinRar, WinZip eller 7z, bruker alle disse arkiverings- og filkomprimerings-/dekompresjonsverktøyene på markedet AES som sin standard krypteringsstandard for å forhindre utilsiktede datalekkasjer mens du håndterer filene dine.
Meldingsapper
WhatsApp, Signal, Telegram, Snapchat, Messenger, men også andre apper vi ikke har nevnt, bruker AES-kryptering for å sørge for at du har fullt personvern, enten du sender bilder, videoer, dokumenter eller tekstmeldinger via disse appene.
Programmeringsspråkbiblioteker
Hvis du er programmerer, vet du kanskje at biblioteker i enkelte programmeringsspråk, som C++, Java og Python, bruker AES-kryptering for å beskytte dataene og prosjektene dine mot uautorisert tilgang.
OS-komponenter
For å legge til et ekstra lag med sikkerhet har noen operativsystemer lagt til AES-kryptering i enkelte av komponentene sine.
Hvordan fungerer AES?
Generelt bør du vite eller lære hvordan en bestemt teknologi fungerer for å dra nytte av egenskapene fullt ut. I dette tilfellet bør du vite litt om hvordan AES fungerer før du implementerer eller bruker det i prosjektene eller miljøet ditt.
1. Data deles inn i blokker
Som du kanskje husker fra det vi nevnte tidligere, er AES en blokkchiffer. Det betyr at den krypterer data i blokker med biter, i stedet for å kryptere dem bit for bit.
Derfor er det første trinnet i AES-kryptering å dele dataene i blokker. Hver av disse blokkene har en 4 x 4 kolonne med 128 biter eller 16 byte. Siden en byte består av 8 biter, får vi 16 x 8 = 128 biter, som er størrelsen på blokken.
La oss si at du vil kryptere «wdzwdz.com» ved hjelp av AES. Da vil krypteringsprosessen først dele dataene inn i blokker. En blokk kan imidlertid bare inneholde 16 tegn, så den første blokken vil ikke inneholde «m» på slutten av teksten. «m» vil bli sendt til neste blokk.
Etter å ha brukt AES på «wdzwdz.com», vil den første delen av teksten se ut som blokken nedenfor:
e |
c |
e |
s |
d |
t |
t |
. |
d |
I |
I |
c |
I |
v |
s |
o |
2. Nøkkelutvidelse
Nøkkelutvidelsesprosedyren er litt mer komplisert enn det vi beskrev ovenfor. Den går ut på å ta en innledende nøkkel og bruke Rijndaels nøkkelplan for å generere en serie ekstra nøkler som skal brukes for hver runde av krypteringsprosessen.
Så hvis du for eksempel bruker nøkkelen «AESencryption12» i klarteksten ovenfor (wdzwdz.com), vil du få en streng med tilsynelatende tilfeldige tall.
A |
e |
y |
o |
E |
n |
s |
n |
S |
c |
t |
1 |
r |
I |
2 |
Rijndael-nøkkelplanen bruker imidlertid veldig spesifikke prosesser for å kryptere hvert symbol i den første setningen.
Resultatet vil se ut som blokken nedenfor:
7e |
04 |
0b |
20 |
52 |
6c |
1c |
56 |
a7 |
bf |
8e |
84 |
30 |
03 |
3d |
20 |
Igjen, selv om det ser ut som tilfeldige tall og tull, er det akkurat det hele krypteringsprosedyren går ut på: å skjule data bak en kode, gjøre det utilgjengelig for brukere som ikke vet hva koden er, og gjøre det umulig å knekke den.
Videre er dette langt fra over, ettersom krypteringsprosessen må bruke nøklene vi nettopp har generert, for hver krypteringsrunde. Men mer om det senere.
3. Legge til en rundnøkkel
Dette er faktisk den første krypteringsrunden, ettersom vi legger til startnøkkelen («AES encryption12») til meldingsblokken vår («wdzwdz.com»), som i eksemplet nedenfor, som kanskje ikke gir mening ved første øyekast.
e |
c |
e |
s |
d |
t |
t |
. |
d |
I |
I |
c |
I |
v |
s |
o |
OG
A |
e |
y |
o |
E |
n |
s |
n |
S |
c |
t |
1 |
r |
I |
2 |
Selv om det kan virke umulig å legge sammen to tekstblokker, må du huske at dette bare er en grafisk fremstilling av krypteringsprosessen, slik at du skal kunne forstå det bedre. I virkeligheten bruker AES binær kode, noe som gjør vårt forsøk på å legge sammen to tekstblokker helt plausibelt og fullt mulig.
Denne operasjonen (å legge sammen de to tekstblokkene) gjøres ved hjelp av en XOR-chiffer, og resultatet ser du nedenfor:
32 |
d5 |
5c |
d9 |
f3 |
24 |
a8 |
46 |
7e |
1c |
37 |
f3 |
82 |
5e |
3f |
03 |
4. Byte-erstatning
For å forbedre beskyttelsen av dataene dine ytterligere (i dette tilfellet klarteksten vi prøver å kryptere), vil dette trinnet i prosessen erstatte hver byte i blokken med en forhåndsbestemt verdi, i henhold til en tabell kalt Rijndael S-boks. Du ser tabellen nedenfor:
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f |
00 | 63 | 7c | 77 | 7b | f2 | 6b | 6f | c5 | 30 | 01 | 67 | 2b | fe | d7 | ab |
76 | 10 | ca | 82 | c9 | 7d | fa | 59 | 47 | f0 | ad | d4 | a2 | af | 9c | a4 |
72 | c0 | 20 | b7 | fd | 93 | 26 | 36 | 3f | f7 | cc | 34 | a5 | e5 | f1 | 71 |
d8 | 31 | 15 | 04 | c7 | 23 | c3 | 18 | 96 | 05 | 9a | 07 | 12 | 80 | e2 | eb |
27 | b2 | 75 | 40 | 09 | 83 | 2c | 1a | 1b | 6e | 5a | a0 | 52 | 3b | d6 | b3 |
29 | e3 | 2f | 84 | 50 | 53 | d1 | 00 | ed | 20 | fc | b1 | 5b | 6a | cb | be |
39 | 4a | 4c | 58 | cf | d0 | ef | aa | fb | 43 | 4d | 33 | 85 | 45 | f9 | 02 |
7f | 50 | 3c | 9f | a8 | 51 | a3 | 40 | 8f | 92 | 9d | 38 | f5 | bc | b6 | da |
21 | 10 | ff | f3 | d2 | cd | 0c | 13 | ec | 5f | 97 | 44 | 17 | c4 | a7 | 7e |
3d | 64 | 5d | 19 | 73 | 90 | 60 | 81 | 4f | dc | 22 | 2a | 90 | 88 | 46 | ee |
b8 | 14 | de | 5e | 0b | db | a0 | e0 | 32 | 3a | 0a | 49 | 06 | 24 | 5c | c2 |
d3 | ac | 62 | 91 | 95 | e4 | 79 | b0 | e7 | c8 | 37 | 6d | 8d | d5 | 4e | a9 |
6c | 56 | f4 | ea | 65 | 7a | ae | 08 | ba | 78 | 25 | 2e | 1c | a6 | b4 | c6 |
e8 | dd | 74 | 1f | 4b | bd | 8b | 8a | d0 | 70 | 3e | b5 | 66 | 48 | 03 | f6 |
0e | 61 | 35 | 57 | b9 | 86 | c1 | 1d | 9e | e1 | f8 | 98 | 11 | 69 | d9 | 8e |
94 | 9b | 1e | 87 | e9 | ce | 55 | 28 | df | f0 | 8c | a1 | 89 | 0d | bf | e6 |
42 | 68 | 41 | 99 | 2d | 0f | b0 | 54 | bb | 16 |
Selv om denne tabellen også ser ut som en tilfeldig rekke tegn, kan du bruke den til å sjekke hvilken verdi de erstattede bytene vil ha. C9 blir for eksempel dd, 26 blir f7 og ff blir 16 osv. Det er ikke så vanskelig å bruke når du først har skjønt det.
Nå som vi har sett tabellen, la oss se hvordan den nye blokken vi genererte ovenfor fra den første krypteringsrunden vil endre seg etter den Rijndael S-boks-baserte byte-erstatningen:
23 |
03 |
4a |
35 |
0d |
36 |
c2 |
5a |
f3 |
9c |
9a |
0d |
13 |
58 |
75 |
7b |
Vær oppmerksom på at vi faktisk har erstattet blokkene manuelt ved hjelp av Rijndael S-boks-tabellen, slik at du kan dobbeltsjekke og prøve å gjenskape resultatene hvis du er interessert. På denne måten er det lettere for deg å følge med, særlig hvis du er interessert i å lære mer om kryptografi.
5. Radforskyvning
I dette trinnet av AES-krypteringsprosessen blir radene forskjøvet for å legge til en ekstra beskyttelsesvegg for dataene. Mens den første raden forblir uendret, blir de tre neste flyttet på forskjellige måter, som følger:
Den andre raden flyttes én byte (celle) til venstre
Den tredje raden flyttes to byte (celler) til venstre
Den fjerde og siste raden flyttes tre byte (celler) til venstre
23 |
03 |
4a |
35 |
36 |
c2 |
5a |
0d |
9a |
0d |
f3 |
9c |
7b |
13 |
58 |
75 |
6. Kolonneblanding
Selv om vi gjerne vil være så nøyaktige som mulig, innebærer dette trinnet å bruke en rekke komplekse matematiske formler på blokken. Dette gir oss en helt annen blokk til slutt.
For å være litt mer presis, multipliseres hver kolonne med en forhåndsdefinert matrise i dette trinnet. Resultatet blir en ny kodeblokk som vil bli brukt til å øke chifferets styrke og redusere sjansene for at den blir brutt.
Etter kolonneblandingsprosessen får vi en kodeblokk som ser omtrent slik ut:
43 |
4d |
33 |
85 |
c8 |
37 |
6d |
8d |
9a |
33 |
85 |
9c |
42 |
68 |
41 |
99 |
7. Legge til en ekstra rundnøkkel
Husker du at vi fortalte deg at vi trenger nøkkelen vi laget i nøkkelutvidelsestrinnet? Vel, vi har brukt den én gang for å kryptere alt én gang, og nå må vi kryptere dataene vi nettopp har fått på nytt.
Så vi tar datablokken vi fikk etter å ha gjennomført kolonneblandingstrinnet, og legger til en ny rundnøkkel i den, akkurat som i trinn 3 i guiden vår, slik:
43 |
4d |
33 |
85 |
c8 |
37 |
6d |
8d |
9a |
33 |
85 |
9c |
42 |
68 |
41 |
99 |
OG
32 |