Hoe werkt AES-codering?

AES is een symmetrische coderingssleutel en wordt algemeen beschouwd als de "gouden standaard" voor het coderen van gegevens.

AES is NIST-gecertificeerd en wordt door de Amerikaanse overheid gebruikt voor het beschermen van 'veilige' gegevens, wat heeft geleid tot een meer algemene acceptatie van AES als het standaard symmetrische sleutelcijfer van keuze door zowat iedereen. Het is een open standaard die gratis kan worden gebruikt voor openbaar, particulier, commercieel of niet-commercieel gebruik.

Een inleiding tot AES-codering

AES is een symmetrische coderingssleutel. Dit betekent dat dezelfde sleutel wordt gebruikt om de gegevens te coderen, wordt gebruikt om ze te decoderen. Dit levert wel een probleem op: hoe verzend je de sleutel op een veilige manier?

Asymmetrische versleutelingssystemen lossen dit probleem op door gegevens te beveiligen met een openbare sleutel die voor iedereen beschikbaar is. Het kan alleen worden gedecodeerd door een beoogde ontvanger die de juiste persoonlijke sleutel heeft.

Dit maakt asymmetrische codering veel beter in het beveiligen van gegevens tijdens het transport, omdat de afzender de privésleutel van de ontvanger niet hoeft te kennen. Een goed voorbeeld is RSA-codering, die wordt gebruikt om de TLS-sleuteluitwisselingen te beveiligen die nodig zijn bij het verbinden met een beveiligde HTTPS-website.

Symmetrische cijfers zoals AES zijn daarom veel beter in het beveiligen van gegevens terwijl ze in rust zijn - zoals wanneer deze op uw harde schijf zijn opgeslagen. Voor dit doel zijn ze superieur aan asymmetrische cijfers omdat:

  • Ze vereisen veel minder rekenkracht. Dit maakt het coderen en decoderen van gegevens met symmetrische codering veel sneller dan met asymmetrische codering. Voor het perspectief worden symmetrische cijfers over het algemeen geciteerd als zijnde ongeveer “1000 keer sneller” dan asymmetrische.
  • En omdat ze sneller zijn, zijn symmetrische cijfers veel nuttiger voor het bulkcoderen van grote hoeveelheden gegevens. Asymmetrische cijfers zoals RSA worden alleen echt gebruikt voor het coderen van kleine hoeveelheden gegevens, zoals de sleutels die worden gebruikt om symmetrische sleutelcodering te beveiligen.

In de huidige verbonden wereld zijn gegevens die zich gewoon op uw harde schijf bevinden, van beperkt nut. Gelukkig kan het veilig via internet worden overgedragen in combinatie met asymmetrische codering, die werd gebruikt om de externe sleuteluitwisselingen te verwerken die nodig zijn om veilig verbinding te maken met een externe server.

OpenVPN beveiligt bijvoorbeeld de onbewerkte gegevens met een asymmetrisch cijfer - tegenwoordig meestal AES. Om de gecodeerde gegevens veilig tussen uw pc en de VPN-server over te dragen, gebruikt het een asymmetrische TLS-sleuteluitwisseling om te onderhandelen over een veilige verbinding met de server.

Is AES-codering het beste type codering?

AES wordt algemeen beschouwd als de veiligste symmetrische sleutelcodering die tot nu toe is uitgevonden. Er bestaan ​​ook andere symmetrische sleutelcijfers die als zeer veilig worden beschouwd, zoals Twofish, dat mede is uitgevonden door de beroemde cryptograaf Bruce Schneier.

Dergelijke cijfers zijn echter niet op de strijd getest zoals AES dat heeft gedaan. En hey, als de Amerikaanse regering denkt dat AES het beste cijfer is om haar 'veilige' gegevens te beschermen, wie beweert dat dan? Er zijn echter mensen die dit als een probleem zien. Zie het gedeelte over NIST hieronder.

De brede acceptatie heeft AES op andere manieren ten goede komen. De meeste CPU-fabrikanten hebben nu de AES-instructieset in hun processors geïntegreerd. De hardwareboost verbetert de AES-prestaties op veel apparaten en verbetert hun weerstand tegen aanvallen via de zijkanten.

Kan 128-bit AES-codering worden verbroken?

AES zelf is onbreekbaar wanneer het correct wordt geïmplementeerd.

In 2011 was de snelste supercomputer ter wereld de Fujitsu K. Deze kon een Rmax-pieksnelheid van 10.51 petaflops bereiken. Op basis van dit cijfer zou het Fujitsu K 1,02 x 10 ^ 18 - ongeveer een miljard miljard (één miljoen) - jaar kosten om een ​​128-bits AES-sleutel met geweld te kraken. Dit is ouder dan de leeftijd van het universum (13,75 miljard jaar).

De krachtigste supercomputer ter wereld in 2017 was de Sunway TaihuLight in China. Dit beest kan een pieksnelheid van 93.02 petaflops bereiken. Dit betekent dat de krachtigste computer ter wereld nog steeds ongeveer 885 biljard jaar nodig heeft om een ​​128-bits AES-sleutel bruut te forceren.

Het aantal benodigde bewerkingen om een ​​256-bits codering bruut te forceren is 3,31 x 10 ^ 56. Dit is ongeveer gelijk aan het aantal atomen in het universum!

In 2011 ontdekten cryptografieonderzoekers een zwakte in AES waardoor ze het algoritme vier keer sneller konden kraken dan voorheen mogelijk was. Maar zoals een van de onderzoekers destijds opmerkte:

"Om dit in perspectief te plaatsen: op een triljoen machines, die elk een miljard sleutels per seconde konden testen, zou het meer dan twee miljard jaar duren om een ​​AES-128-sleutel te herstellen."

Als reactie op deze aanval werden vier extra ronden (zie later) toegevoegd aan het AES-128-coderingsproces om de veiligheidsmarge te vergroten.

Zijkanaalaanvallen

Dus voor alle doeleinden is AES zelf onbreekbaar wanneer het correct wordt geïmplementeerd. Maar het werd niet altijd correct geïmplementeerd.

Zijkanaalaanvallen zoeken naar aanwijzingen van het computersysteem dat de AES-codering implementeert om aanvullende informatie te vinden. Dit kan nuttig zijn bij het verminderen van het aantal mogelijke combinaties dat nodig is om AES brute kracht te geven.

Deze aanvallen maken gebruik van timing-informatie (hoe lang het de computer kost om berekeningen uit te voeren), elektromagnetische lekken, audio-aanwijzingen en zelfs optische aanwijzingen die zijn opgepikt met een hoge resolutie camera om extra informatie te ontdekken over hoe het systeem de AES-codering verwerkt.

Een bekende side-channel aanval op AES heeft met succes de AES-128 coderingssleutels afgeleid door het gedeelde gebruik van de cache-tabellen van de processor zorgvuldig te monitoren.

Correct geïmplementeerde AES vermindert aanvallen via zijkanalen door mogelijke manieren te voorkomen waarop gegevens kunnen lekken (dat is waar het gebruik van de op hardware gebaseerde AES-instructieset helpt) en door randomisatietechnieken te gebruiken om de relatie tussen door het coderingsbestand beschermde gegevens en alle gelekte gegevens te elimineren die kan worden verzameld met behulp van een side-channel aanval.

Onveilige wachtwoorden

AES-codering is alleen zo veilig als de sleutel. Deze sleutels zijn onveranderlijk zelf beveiligd met behulp van wachtwoorden, en we weten allemaal hoe verschrikkelijk wij mensen zijn in het gebruik van veilige wachtwoorden. Keyloggers geïntroduceerd door virussen, social engineering-aanvallen en dergelijke, kunnen ook effectieve manieren zijn om de wachtwoorden te compromitteren die AES-sleutels beveiligen.

Gebruik van wachtwoordbeheerders vermindert dit probleem aanzienlijk, net als het gebruik van tweerichtingsfirewalls, goede antivirussoftware en meer voorlichting over beveiligingsproblemen.

Een korte geschiedenis van AES-codering

Heb je als kind het spel gespeeld waarin je een 'geheime boodschap' hebt gemaakt door de ene letter van de boodschap te vervangen door een andere? De vervanging is gemaakt volgens een door u gekozen formule.

U hebt bijvoorbeeld elke letter van het oorspronkelijke bericht vervangen door één drie letters erachter in het alfabet. Als iemand anders wist wat deze formule was, of het kon uitwerken, dan zouden zij uw "geheime boodschap" kunnen lezen.

In cryptografisch jargon was u bezig het bericht (gegevens) te "coderen" volgens een zeer eenvoudig wiskundig algoritme.

Versleuteling wordt sinds de oudheid verborgen voor gevoelige gegevens gebruikt, maar kwam pas echt tot zijn recht in de twintigste eeuw. Tijdens de Tweede Wereldoorlog beveiligden de Duitsers beroemd hun communicatie met behulp van de Enigma-machine, waarvan de code even beroemd werd gekraakt door Alan Turing in Bletchley Park.

Wat is DES-codering

De Data Encryption Standard (DES) is in het midden van de jaren zeventig gemaakt om de communicatie van de Amerikaanse overheid te beveiligen. Het werd het eerste moderne, openbare, vrij beschikbare coderingsalgoritme en creëerde als zodanig bijna de enige moderne discipline van cryptografie.

Hoewel ontwikkeld door IBM, was DES het geesteskind van National Bureau of Standards (NBS, dat later NIST werd).

Ondanks zorgen over bemoeienis door de NSA, werd DES aangenomen door de Amerikaanse regering in 1976 voor "gevoelig maar niet geclassificeerd" verkeer. Dit omvatte zaken als persoonlijke, financiële en logistieke informatie.

Aangezien er destijds niets anders was, werd het snel algemeen aanvaard door commerciële bedrijven die codering nodig hadden om hun gegevens te beveiligen. Als zodanig werd DES (dat 56-bits sleutels gebruikte) bijna twee decennia lang de standaard standaard voor het coderen van werkpaarden.

Deze bijna alomtegenwoordige acceptatie werd enorm geholpen doordat DES de FIPS-status (Federal Information Processing Standards) kreeg. Alle Amerikaanse niet-militaire overheidsinstanties en civiele overheidsaannemers moeten alleen FIPS-normen gebruiken.

Tegen het midden van de jaren negentig begon DES zijn leeftijd te tonen. Op dit moment werd algemeen aangenomen dat de NSA DES met brute kracht kon kraken, een punt dat in 1998 werd bewezen toen een machine van $ 220.000, gebouwd door de Electronic Frontier Foundation (EFF), met succes brute-gedwongen DES in slechts twee dagen met succes kon uitvoeren. Het was duidelijk tijd voor een nieuwe standaard.

Hoe AES tot stand kwam

In 1997 kondigde het National Institute of Standards and Technology van de Verenigde Staten (NIST) aan dat het een vervanging van DES wilde. In november 2001 maakte het bekend dat de winnaar: AES, voorheen bekend als Rijndael na een van zijn co-makers.

Op aanbeveling van NIST werd het nieuwe cijfer formeel goedgekeurd door de Amerikaanse federale overheid en werd het effectief in mei 2002. Net als DES kreeg AES de FIPS-status. De Amerikaanse regering beschouwt alle AES-sleutelgroottes als voldoende voor geclassificeerde informatie tot en met de "Geheim" niveau, met "Zeer geheim" informatie die AES-192 of AES-256 vereist.

AES heeft DES wereldwijd nu volledig vervangen als de standaard standaard voor werkpaardsymmetrische codering.

Hoe werkt AES-codering?

Het AES-coderingsalgoritme codeert en decodeert gegevens in blokken van 128 bits. Dit kan met behulp van 128-bits, 192-bits of 256-bits sleutels. AES met 128-bits sleutels wordt vaak AES-128 genoemd, enzovoort.

Het volgende diagram geeft een vereenvoudigd overzicht van het AES-proces ...

hoe AES-codering werkt

Platte tekst

Dit zijn de gevoelige gegevens die u wilt coderen.

Geheime sleutel

Dit is een 128-bit, 192-bit of 256-bit variabele gecreëerd door een algoritme.

Cijfer

Het werkelijke AES-cijfer voert vervolgens een reeks wiskundige transformaties uit met de platte tekst en de geheime sleutel als uitgangspunt. In volgorde zijn dit:

  1. Sleuteluitbreiding. Dit maakt gebruik van de originele geheime sleutel om een ​​reeks nieuwe "ronde sleutels" af te leiden met behulp van het sleutelschema-algoritme van Rijndael.
  2. Het mengen. Elke ronde sleutel wordt gecombineerd met de platte tekst met behulp van het additieve XOR-algoritme.

    AES-codering roundKey

  3. Vervanging van de resulterende gegevens met behulp van een substitutietabel. Deze stap lijkt in principe erg (in de praktijk veel complexer) op de vervangende cijfers die je als kind hebt gemaakt.SubBytes AES-codering

  4. Verplaats rijen. Waarbij elke byte in de 4 x 4 kolom van zestien bytes die een 128-bit blok vormt naar rechts wordt verschoven.AES Encryption shiftRows

5. Meng kolommen. Een verder algoritme wordt op elke kolom toegepast.

Sta op en herhaal. Het proces wordt een aantal keren herhaald, waarbij elke herhaling een ronde wordt genoemd. Elke ronde wordt opnieuw gecodeerd met behulp van een van de ronde sleutels die tijdens de uitbreiding van de sleutel worden gegenereerd (stap 1).

Het aantal uitgevoerde ronden is afhankelijk van de gebruikte sleutellengte. AES-128 gebruikt tien ronden, AES-192 gebruikt twaalf ronden en AES-256 gebruikt veertien ronden.

Elke toegevoegde ronde verkleint de kans op een sneltoetsaanval van het type dat werd gebruikt om AES-128 in 2011 aan te vallen. Zoals reeds opgemerkt werden als gevolg van deze aanval vier extra ronden toegevoegd aan AES-128 om de veiligheidsmarges te verbeteren.

Gecodeerde tekst

Dit is de gecodeerde uitvoer van de codering nadat deze het opgegeven aantal rondes heeft doorlopen.

Hoe AES-codering te decoderen

Het ontsleutelen van AES is eenvoudig - voer gewoon alle bovenstaande stappen om, beginnend met de inverse round-toets. Natuurlijk moet u de originele geheime sleutel hebben om het proces met elke omgekeerde ronde sleutel om te keren.

Wordt het coderen van een bestand groter??

Ja. Meestal. AES gebruikt een vaste blokgrootte van 16 bytes. Als een bestand geen veelvoud van een blokgrootte is, gebruikt AES padding om het blok te voltooien.

In theorie betekent dit niet noodzakelijkerwijs een toename van de grootte van gecodeerde gegevens (zie het stelen van de gecodeerde tekst), maar het is meestal veel eenvoudiger om eenvoudig gegevens toe te voegen om het blok te verwijderen. Dat verhoogt de hoeveelheid gegevens die worden gecodeerd.

Anekdotisch bewijs suggereert dat bestanden groter dan 1 MB gecodeerd met AES meestal ongeveer 35% groter zijn dan vóór codering.

Hoe belangrijk zijn sleutelgroottes bij AES-codering?

De grofste manier om de sterkte van een cijfer te meten, is de grootte van de sleutel. Hoe groter de sleutel, hoe meer mogelijke combinaties er zijn.

AES kan worden gebruikt met sleutelformaten van 126 bit, 192 bit of 256 bit. Het originele Rijndael-cijfer is ontworpen om extra sleutellengten te accepteren, maar deze zijn niet overgenomen in AES.

Brute geweldaanvallen

Hoe complexer het algoritme, hoe moeilijker het cijfer is om te kraken met een brute force-aanval. Deze zeer primitieve vormaanval staat ook bekend als een uitputtende sleutelzoekactie. Het houdt in feite in dat elke mogelijke combinatie van getallen wordt geprobeerd totdat de juiste sleutel is gevonden.

Zoals u zeker weet, voeren computers alle berekeningen uit met binaire getallen: nullen en enen. En zoals we hebben gezien, hangt de complexiteit van een cijfer af van de sleutelgrootte in bits - het ruwe aantal enen en nullen dat nodig is om het algoritme uit te drukken, waarbij elke nul of één wordt vertegenwoordigd door een enkele bit.

Dit staat bekend als de sleutellengte en vertegenwoordigt ook de praktische haalbaarheid van het succesvol uitvoeren van een brute force-aanval op een bepaald cijfer.

Het aantal mogelijke combinaties (en daarom de moeilijkheid van brute kracht) neemt exponentieel toe met de sleutelgrootte. Voor AES:

Zoals we al hebben besproken, zou de snelste supercomputer ter wereld langer dan de leeftijd van het universum nodig hebben om zelfs een AES-128-sleutel met geweld te kraken!

Versleutelingsronden

Zoals we ook hebben besproken, geldt dat hoe langer de sleutel wordt gebruikt door AES, hoe meer coderingsrondes deze doorloopt. Dit is in de eerste plaats om snelkoppelingen te voorkomen die de rekencomplexiteit van cijfers kunnen verminderen, en waardoor het gemakkelijker wordt om het cijfer bruut te forceren.

Zoals verzaakte cryptograaf Bruce Schneier zei over de 2011 snelkoppelingsaanval op AES-128,

“Bij cryptografie draait alles om veiligheidsmarges. Als je n ronde van een cijfer kunt breken, ontwerp je het met 2n of 3n rondes. ”

Hij heeft wel aanbevolen om meer rondes voor elke sleutelgrootte in AES te introduceren, maar NIST vindt de huidige niveaus voldoende.

Dus waarom zou u meer dan AES-128 gebruiken??

Dit alles roept de vraag op: als het langer dan de leeftijd van het universum zou duren om zelfs AES-128 te kraken, waarom zou je dan AES-192 of AES-256 gebruiken? Zoals Schneier opmerkte:

“Ik stel voor dat mensen AES-256 niet gebruiken. AES-128 biedt meer dan voldoende beveiligingsmarge voor de nabije toekomst. Maar als je al AES-256 gebruikt, is er geen reden om te veranderen. "

Schneier heeft inderdaad in het verleden beweerd dat AE-128 in feite veiliger is dan AES, omdat het een sterker sleutelschema heeft dan AES-256.

Dus waarom wordt AES-256 opgehouden als de gouden standaard voor symmetrische sleutelversleuteling?

Veiligheidsmarges

De sneltoets in 2011 toont aan dat, hoe veilig experts een cryptograaf-algoritme ook vinden, inventieve mensen altijd manieren zullen vinden waar niemand ooit aan heeft gedacht om ze te verzwakken..

Net als bij het aantal gebruikte rondes, biedt een grotere sleutelgrootte een hogere veiligheidsmarge tegen barsten.

bling

Het effect van marketing mag niet worden genegeerd bij het overwegen van de alomtegenwoordigheid van AES-256-codering. Het simpele feit dat AES-256 algemeen wordt beschouwd als het veiligste symmetrische coderingscijfer ter wereld, maakt het de nummer één keuze voor velen.

Ik bedoel, als AES-128 goed is, dan is het alleen maar logisch dat AES-256 beter moet zijn, toch?

Het feit dat de Amerikaanse overheid AES-256 gebruikt om haar meest gevoelige gegevens te beveiligen, draagt ​​alleen maar bij aan de "bling" -waarde en stelt VPN-bedrijven en dergelijke in staat te beweren dat ze "militaire kwaliteit" codering gebruiken.

Gezien het feit dat deze "bling-perceptie" (grotendeels) juist is, doet de populariteit van AES-256 weinig schade (hoewel de opmerkingen over NIST hieronder worden weergegeven).

AES en OpenVPN

Vooral VPN-gebruikers moeten voorzichtig zijn. De meeste VPN-services gebruiken AES-256 om gegevens te beveiligen die worden verzonden door het OpenVPN-protocol, maar dit is een van de verschillende mechanismen die door OpenVPN worden gebruikt om gegevens te beveiligen.

Een TLS-verbinding beveiligt de overdracht van de coderingssleutels die door AES worden gebruikt om gegevens te beveiligen bij het gebruik van OpenVPN. Dus als de OpenVPN TLS-instellingen (besturingskanaal) zwak zijn, kunnen de gegevens worden aangetast ondanks dat ze zijn gecodeerd met AES-256. Raadpleeg onze ultieme gids voor VPN-codering voor meer informatie.

AES-CBC versus AES-GCM

Tot voor kort was AES-CBC (Cipher Block Chaining) de enige AES-codering die u waarschijnlijk in de VPN-wereld zou tegenkomen. Dit verwijst naar de blokcoderingsmodus, een complex onderwerp dat hier niet echt de moeite waard is.

Hoewel CBC theoretisch enkele kwetsbaarheden kan hebben, is de consensus dat CBC veilig is. CBC wordt inderdaad aanbevolen in de OpenVPN-handleiding.

OpenVPN ondersteunt nu ook AES-GCM (Galios / Counter-modus). GCM biedt authenticatie, waardoor een HMAC SHA-hashfunctie niet meer nodig is. Het is ook iets sneller dan CBC omdat het hardwareversnelling gebruikt (door threading naar meerdere processorcores).

AES-CBC blijft de meest voorkomende modus voor algemeen gebruik, maar AES-GCM wordt steeds populairder. Gezien de voordelen van GCM, zal deze trend waarschijnlijk alleen maar doorzetten. Vanuit cryptografisch perspectief zijn zowel AES-CBC als AES-GCM echter zeer veilig.

NIST

AES is een NIST-gecertificeerde standaard. Dit is een instantie die naar eigen zeggen nauw samenwerkt met de NSA bij de ontwikkeling van haar cijfers.

Gezien wat we nu weten van de systematische inspanningen van de NSA om backdoors te verzwakken of in internationale coderingsstandaarden te integreren, is er alle reden om de integriteit van NIST-algoritmen in twijfel te trekken. NIST weerlegt dergelijke aantijgingen uiteraard sterk:

"NIST zou een cryptografische standaard niet opzettelijk verzwakken."

Het heeft ook publieke participatie uitgenodigd voor een aantal aankomende voorgestelde coderingsstandaarden, in een poging om het vertrouwen van het publiek te vergroten.

De New York Times beschuldigde de NSA echter van het omzeilen van door NIST goedgekeurde coderingsstandaarden door ofwel niet-detecteerbare achterdeuren te introduceren of het openbare ontwikkelingsproces te ondermijnen om de algoritmen te verzwakken.

Dit wantrouwen werd verder versterkt toen RSA Security (een divisie van EMC) klanten privé vertelde om te stoppen met het gebruik van een coderingsalgoritme dat naar verluidt een door de NSA geconstrueerde fout bevat. Dit algoritme was ook goedgekeurd door NIST.

Bovendien is Dual_EC_DRBG (Dual Elliptic Curve Deterministic Random Bit Generator) een coderingsstandaard ontwikkeld door NIST. Het is bekend dat het al jaren onzeker is.

In 2006 merkte de Technische Universiteit Eindhoven in Nederland op dat een aanval hiertegen eenvoudig genoeg was om te starten op 'een gewone pc'. Ingenieurs van Microsoft hebben ook een vermoedelijke achterdeur in het algoritme gemarkeerd.

Ondanks deze zorgen, waar NIST leidt, volgt de industrie. Dit is grotendeels te wijten aan het feit dat naleving van de NIST-normen een voorwaarde is voor het verkrijgen van Amerikaanse overheidscontracten (FIPS).

NIST-gecertificeerde cryptografische standaarden zoals AES zijn wereldwijd vrijwel overal aanwezig, in alle sectoren van de industrie en het bedrijfsleven die afhankelijk zijn van privacy. Dit maakt de hele situatie nogal afkoelend.

Misschien juist omdat zoveel afhankelijk is van deze normen, zijn cryptografie-experts niet bereid om het probleem onder ogen te zien.

Afbeelding tegoed: xkcd.com/538.

Brayan Jackson
Brayan Jackson Administrator
Sorry! The Author has not filled his profile.
follow me