logo

Geavanceerde coderingsstandaard (AES)

Advanced Encryption Standard (AES) is een specificatie voor de encryptie van elektronische gegevens, opgesteld door het Amerikaanse National Institute of Standards and Technology (NIST) in 2001. AES wordt tegenwoordig veel gebruikt omdat het veel sterker is dan DES en drievoudige DES, ondanks dat het moeilijker is implementeren.

Punten om te onthouden



  • AES is een blokcijfer.
  • De sleutelgrootte kan 128/192/256 bits zijn.
  • Versleutelt gegevens in blokken van elk 128 bits.

Dat betekent dat het 128 bits als invoer nodig heeft en 128 bits gecodeerde gecodeerde tekst als uitvoer uitvoert. AES is gebaseerd op het substitutie-permutatienetwerkprincipe, wat betekent dat het wordt uitgevoerd met behulp van een reeks gekoppelde bewerkingen, waarbij de invoergegevens worden vervangen en geschud.

generiekheid in Java

Werking van het cijfer:
AES voert bewerkingen uit op gegevensbytes in plaats van in bits. Omdat de blokgrootte 128 bits is, verwerkt het cijfer 128 bits (of 16 bytes) van de invoergegevens tegelijk.

Het aantal rondes is als volgt afhankelijk van de sleutellengte:



  • 128 bit sleutel – 10 ronden
  • 192 bit sleutel – 12 ronden
  • 256 bit sleutel – 14 ronden

Creatie van ronde sleutels:
Er wordt een Key Schedule-algoritme gebruikt om alle ronde sleutels uit de sleutel te berekenen. De initiële sleutel wordt dus gebruikt om veel verschillende ronde sleutels te maken die in de overeenkomstige ronde van de codering zullen worden gebruikt.

Encryptie:
AES beschouwt elk blok als een raster van 16 bytes (4 byte x 4 byte = 128 ) in een hoofdkolomopstelling.



 [ b0 | b4 | b8 | b12 | | b1 | b5 | b9 | b13 | | b2 | b6 | b10| b14 | | b3 | b7 | b11| b15 ]>

Elke ronde bestaat uit 4 stappen:

  • SubBytes
  • ShiftRijen
  • MengKolommen
  • Ronde sleutel toevoegen

De laatste ronde heeft niet de MixColumns-ronde.

De SubBytes voert de vervanging uit en ShiftRows en MixColumns voeren de permutatie in het algoritme uit.

SubBytes:
Met deze stap wordt de vervanging geïmplementeerd.

In deze stap wordt elke byte vervangen door een andere byte. Het wordt uitgevoerd met behulp van een opzoektabel, ook wel de S-box genoemd. Deze vervanging gebeurt op een manier dat een byte nooit door zichzelf wordt vervangen en ook niet door een andere byte wordt vervangen die een aanvulling is op de huidige byte. Het resultaat van deze stap is een matrix van 16 bytes (4 x 4), zoals voorheen.

De volgende twee stappen implementeren de permutatie.

ShiftRijen:
Deze stap is precies zoals het klinkt. Elke rij wordt een bepaald aantal keren verschoven.

  • De eerste rij wordt niet verschoven
  • De tweede rij wordt één keer naar links verschoven.
  • De derde rij is twee keer naar links verschoven.
  • De vierde rij is driemaal naar links verschoven.

(Er wordt een cirkelvormige verschuiving naar links uitgevoerd.)

 [ b0 | b1 | b2 | b3 ] [ b0 | b1 | b2 | b3 ] | b4 | b5 | b6 | b7 | ->| b5 | b6 | b7 | b4 | | b8 | b9 | b10 | b11 | | b10 | b11 | b8 | b9 | [ b12 | b13 | b14 | b15] [b15 | b12 | b13 | b14 ]>

MixKolommen:
Deze stap is in feite een matrixvermenigvuldiging. Elke kolom wordt vermenigvuldigd met een specifieke matrix en daardoor wordt de positie van elke byte in de kolom gewijzigd.

converteer char naar int java

Deze stap wordt in de laatste ronde overgeslagen.

 [ c0 ] [ 2 3 1 1 ] [ b0 ] | c1 | = | 1 2 3 1 | | b1 | | c2 | | 1 1 2 3 | | b2 | [ c3 ] [ 3 1 1 2 ] [ b3 ]>

Ronde sleutels toevoegen:
Nu wordt de resulterende uitvoer van de vorige fase XOR-ed met de overeenkomstige ronde sleutel. Hier worden de 16 bytes niet als een raster beschouwd, maar als 128 bits aan gegevens.

Na al deze rondes worden 128 bits aan gecodeerde gegevens als uitvoer teruggegeven. Dit proces wordt herhaald totdat alle te versleutelen gegevens dit proces ondergaan.

Decryptie:
De fasen in de rondes kunnen eenvoudig ongedaan worden gemaakt, omdat deze fasen een tegengestelde hebben, waardoor de wijzigingen ongedaan worden gemaakt. Elke 128 blokken doorlopen 10,12 of 14 ronden, afhankelijk van de sleutelgrootte.

De fasen van elke decoderingsronde zijn als volgt:

  • Ronde sleutel toevoegen
  • Omgekeerde mixkolommen
  • ShiftRijen
  • Omgekeerde subbyte

Het decoderingsproces is het coderingsproces dat in omgekeerde volgorde wordt uitgevoerd, dus ik zal de stappen met opmerkelijke verschillen uitleggen.

Inverse mixkolommen:
Deze stap is vergelijkbaar met de MixColumns-stap bij het versleutelen, maar verschilt in de matrix die wordt gebruikt om de bewerking uit te voeren.

 [ b0 ] [ 14 11 13 9 ] [ c0 ] | b1 | = | 9 14 11 13 | | c1 | | b2 | | 13 9 14 11 | | c2 | [ b3 ] [ 11 13 9 14 ] [ c3 ]>

Omgekeerde subbytes:
Inverse S-box wordt gebruikt als opzoektabel en gebruikt waarmee de bytes worden vervangen tijdens decodering.

Toepassingen:

AES wordt veel gebruikt in veel toepassingen die veilige gegevensopslag en -overdracht vereisen. Enkele veelvoorkomende gebruiksscenario's zijn:

    Draadloze beveiliging: AES wordt gebruikt bij het beveiligen van draadloze netwerken, zoals Wi-Fi-netwerken, om de vertrouwelijkheid van gegevens te garanderen en ongeautoriseerde toegang te voorkomen. Database-encryptie: AES kan worden toegepast om gevoelige gegevens die zijn opgeslagen in databases te coderen. Dit helpt persoonlijke informatie, financiële gegevens en andere vertrouwelijke gegevens te beschermen tegen ongeoorloofde toegang in geval van een datalek. Veilige communicatie: AES wordt veel gebruikt in protocollen zoals internetcommunicatie, e-mail, instant messaging en spraak-/video-oproepen. Het zorgt ervoor dat de gegevens vertrouwelijk blijven. Gegevensopslag: AES wordt gebruikt om gevoelige gegevens die zijn opgeslagen op harde schijven, USB-drives en andere opslagmedia te coderen, waardoor deze worden beschermd tegen ongeoorloofde toegang in geval van verlies of diefstal. Virtual Private Networks (VPN's): AES wordt vaak gebruikt in VPN-protocollen om de communicatie tussen het apparaat van een gebruiker en een externe server te beveiligen. Het zorgt ervoor dat gegevens die via de VPN worden verzonden en ontvangen privé blijven en niet kunnen worden ontcijferd door afluisteraars. Veilige opslag van wachtwoorden: AES-codering wordt vaak gebruikt om wachtwoorden veilig op te slaan. In plaats van wachtwoorden in leesbare tekst op te slaan, wordt de gecodeerde versie opgeslagen. Dit voegt een extra beveiligingslaag toe en beschermt gebruikersgegevens in geval van ongeautoriseerde toegang tot de opslag. Bestands- en schijfcodering: AES wordt gebruikt om bestanden en mappen op computers, externe opslagapparaten en cloudopslag te coderen. Het beschermt gevoelige gegevens die zijn opgeslagen op apparaten of tijdens gegevensoverdracht om ongeoorloofde toegang te voorkomen.

Samenvatting :
AES-instructieset is nu geïntegreerd in de CPU (biedt een doorvoer van verschillende GB/s) om de snelheid en veiligheid te verbeteren van applicaties die AES gebruiken voor codering en decodering. Ook al is het twintig jaar geleden sinds de introductie ervan, we zijn er niet in geslaagd het AES-algoritme te doorbreken, omdat het zelfs met de huidige technologie onhaalbaar is. Tot op heden blijft de enige kwetsbaarheid in de implementatie van het algoritme.