Welcome to Our Website

Cryptografie 101: Symmetrische Encryptie

Dit is de eerste post in een 3-delige serie op basis van cryptografie. De reeks wordt als volgt geschetst:

  1. symmetrische encryptie
  2. gegevensintegriteit & geverifieerde encryptie
  3. asymmetrische encryptie met publieke/Private sleutelparen

duiken in de wereld van de informatica kan een ontmoedigende taak zijn. Vooral alleen!, In deze blog serie, Ik zou graag een high-level overzicht over de basisprincipes van cryptografie bieden voor degenen die op zoek zijn om verder te graven in het onderwerp die niet per se weten waar te beginnen. Dit overzicht is specifiek gebaseerd op mijn belangrijkste afhaalmaaltijden van Stanford ‘ s cryptografie I cursus zoals onderwezen door Dan Boneh, beschikbaar op Coursera.

Ik besloot deze cursus te volgen omdat ik een blockchain ontwikkelaar ben die niet van een traditionele comp-sci achtergrond komt. Ik studeerde economie op de universiteit, maar draaide meer naar computerprogrammering als ik mijn carrière begon., Sinds ik begon met programmeren, ben ik op een missie geweest om “dichter bij de computer” te komen — om de abstractielagen die ik als webontwikkelaar heb genoten, terug te pellen en te begrijpen wat er onder de motorkap gebeurt. De overgang naar cryptogeld en gedistribueerde systemen van web development is een wilde en prachtige stap in die richting in vele opzichten, niet in het minst van die werd steeds meer vertrouwd met de concepten van cryptografie. Echter, Ik wilde een meer solide basis., Omdat het nogal een uitgestrekt gebied, Ik dacht dat het de moeite waard was om $70 te laten vallen om deze informatie te consumeren in een forum speciaal samengesteld uit Stanford University. U kunt deze cursus ook controleren zonder Gratis opdrachten in te dienen. De wonderen van het internet!

laten we beginnen.

in wezen is cryptografie de praktijk van veilige communicatie in de aanwezigheid van potentiële tegenstanders van derden. Het concept van veilige communicatie bestaat uit twee belangrijke punten:

  1. beveiliging tegen afluisteren: dit garandeert de vertrouwelijkheid van gegevens.,
  2. beveiliging tegen datamanipulatie: dit garandeert dataintegriteit, wat betekent dat niemand de gegevens die u hebt verzonden kan manipuleren en de ontvanger kan misleiden om de gemanipuleerde gegevens als geldig te accepteren.

vertrouwelijkheid van gegevens wordt bereikt door encryptie, die twee vormen kan aannemen: symmetrisch en asymmetrisch.

  • symmetrische versleuteling gebruikt één sleutel die gedeeld moet worden tussen alle deelnemers die communiceren.
  • asymmetrische versleuteling gebruikt persoonlijke sleutels., Elke deelnemer heeft zijn eigen publieke sleutel en privé sleutelpaar om berichten te versleutelen en te decoderen tijdens het communiceren.

(Opmerking: deze blogpost zal het hebben over cryptografie in de context van symmetrische encryptie. In een follow-up post, duiken we in asymmetrische encryptie.)

Data encryptie: twee typen versleuteling

versleuteling zorgt voor vertrouwelijkheid van gegevens en omvat twee belangrijke componenten:

  1. Een geheime sleutel: In het kader van symmetrische versleuteling kunnen we aannemen dat onze deelnemers, Alice en Bob, een gedeelde geheime sleutel hebben.,
  2. een cipher: een set algoritmen, een voor encryptie en een voor decryptie.

het is belangrijk op te merken dat de encryptie-en decryptie-algoritmen publiekelijk bekend zijn. Het enige geheim is de sleutel.

twee soorten cijfers zijn stream-en blokcodes. Een potentiële voorwaarde voor een adequaat begrip van beide cijfers is kennis van bitwise operaties (operaties uitgevoerd op bits). Meer specifiek, het concept van exclusieve-or (XOR). Ik vond deze blogpost om een zeer duidelijke uitleg van bitwise operaties te geven., Of u kunt proberen om het concept van XOR te begrijpen met behulp van de foto hieronder. In principe worden twee bits gecombineerd en als ze verschillend zijn (één 0 en één 1) resulteren ze in 1, en als ze hetzelfde zijn, (beide 0 ’s of beide 1′ s) resulteren ze in 0. Vanaf nu ga ik ervan uit dat de lezer het concept van XOR begrijpt en dat de universele notatie voor XOR is: ⊕

Stream Cipher

een stream cipher is een symmetrische sleutel cipher waar de platte tekst (in bytes vorm) beetje bij beetje XOR ‘ D wordt met de sleutel (ook in bytes vorm) om de versleutelde versleuteling te produceren., Hetzelfde proces wordt gebruikt om de versleutelde tekst te decoderen. Gezien de aard van de XOR operatie, als we XOR de versleutelde tekst met de sleutel, resulteert dit terug met de originele platte tekst.

een scherpzinnige lezer kan zich uit deze beschrijving realiseren dat de sleutel (in de bovenstaande afbeelding aangeduid als “cipher stream”) en platte tekst iets heel belangrijks gemeen moeten hebben. Dat klopt! De sleutel en de platte tekst moeten dezelfde lengte hebben., Dit is natuurlijk niet erg praktisch.

om een stream cipher praktischer te maken, wordt het idee van een pseudorandom generator geïntroduceerd. Een pseudorandom generator is een deterministische procedure die een input en output van een nog langer pseudorandom resultaat. Omdat het een deterministische procedure is, geeft het altijd dezelfde exacte uitvoer terug als het dezelfde invoer krijgt (d.w.z. “abc123” resulteert elke keer in “8474f24e0d72e1b949ffd2…”)., Het woord pseudorandom betekent dat, hoewel de uitvoer niet echt willekeurig is (omdat het bepaald wordt op basis van een bepaalde invoer), het in feite niet te onderscheiden is van een echt willekeurige tekenreeks. Met andere woorden, gegeven een steekproef van inputs en outputs, zijn er geen aanwijzingen over welke output overeenkomt met een bepaalde input en vice versa, daarom is het pseudorandom. Het is mogelijk om de gedeelde geheime sleutel te gebruiken als invoer om een nog langere pseudorandom sleutel te produceren om te fungeren als de lange sleutel om XOR ‘ D te zijn met de even lange platte tekst.,

deze specifieke implementatie van een stream cipher die we tot nu toe hebben geïllustreerd wordt het “one-time-pad”genoemd. Een uiterst belangrijk kenmerk van de one-time-pad is dat de one-time-pad-toets slechts één keer kan worden gebruikt. Zodra het wordt gebruikt een tweede keer, de veiligheid van deze berichten is gecompromitteerd.

hieronder afgebeeld is een dia uit de cursus. PRG (K) staat voor de pseudorandom-reeks die wordt gegenereerd uit onze gedeelde sleutel K. Het symbool ⊕ staat voor XOR. c staat voor versleutelde tekst. m staat voor bericht (of platte tekst).,

in feite, deze slide is te zeggen dat als de toets wordt tweemaal gebruikt, kunnen we XOR de ciphertexts samen, en dat is precies gelijk aan XOR ‘ ing de twee plaintexts samen. Omdat er genoeg redundantie in het Engels is, kan een slimme aanvaller deze informatie gebruiken om de berichten volledig te herstellen.

om een gedeelde geheime sleutel te behouden, kan het concept van een nonce worden gebruikt om ervoor te zorgen dat we nooit de one-time-pad sleutel herhalen., Een nonce is een willekeurig getal dat slechts één keer gebruikt kan worden in een cryptografische communicatie. Bij het verzenden van de versleuteling, kan de afzender ook een nonce over sturen om te worden gecombineerd met de geheime sleutel om vervolgens te gebruiken als invoer om een aparte pseudorandom sleutel voor elke encryptie te produceren.

(je hebt misschien gemerkt dat de dia hierboven Attack 1 zegt., Even terzijde, voor degenen die zich afvragen wat Attack 2 is, Attack 2 is het feit dat terwijl stream cipher gegevens vertrouwelijkheid biedt, het geen gegevensintegriteit biedt zoals gedefinieerd in de eerste sectie)

Block Cipher

Het tweede type cipher is een Block Cipher. Een blok cipher neemt een vaste lengte ingang en versleutelt iteratief de platte tekst opnieuw en opnieuw met behulp van een andere sleutel (een “ronde sleutel”) voor elke ronde en uiteindelijk geeft een versleuteling van dezelfde lengte. 3DES en AES zijn twee voorbeelden van blokcodes die een input van respectievelijk 48 bits en 128 bits nemen.,

bovenstaande dia toont de basisarchitectuur voor een blokcodering. U kunt zien dat een sleutel uitbreidingsmechanisme wordt gebruikt om een nieuwe sleutel voor elke ronde. De platte tekst, aangeduid met (m) Voor bericht, wordt steeds opnieuw versleuteld totdat uiteindelijk de corresponderende versleutelde tekst (c) van dezelfde lengte wordt geretourneerd.

omwille van de beknoptheid, zal ik AES behandelen in deze blogpost., Hoewel DES / 3DES historisch belangrijk is, wordt tegenwoordig AES meer gebruikt en geaccepteerd.

AES is gebouwd als een substitutie permutatie netwerk. AES werkt op een 128 bit blok, gelijk aan 16 bytes. Zoals hierboven linksboven afgebeeld, schrijven we de 16 bytes als een 4 bij 4 matrix. Deze matrix dient als een datastructuur goed voor het schuifelen van gegevens rond., In elke ronde is het proces als volgt:

  1. we XOR de Ronde sleutel, eerst (k0), met het huidige bericht
  2. dan gaan we door een substitutieproces waar blokken van gegevens worden vervangen door andere blokken op basis van een gegeven substitutie tabel (hierboven afgebeeld (1) ByteSub).
  3. We gaan door een permutatielaag waar bits worden gepermuteerd en rond geschud(afgebeeld boven (2) ShiftRow & (3) MixColumn).
  4. dan herhalen we dit proces voor 10 rondes.,

hierboven afgebeeld, zult u merken dat de laatste ronde slaat de Mix kolom stap, XOR ‘ s het resultaat met onze laatste ronde sleutel en output onze resulterende versleuteling. Om te decoderen, we gewoon omkeren het proces. De cursus biedt een overzicht op hoog niveau van dit coderingsproces en moedigt studenten aan om er dieper in te kijken als het voor u interessant is. Daarom zal ik de AES innerlijke werking hierbij laten. Ik zou mensen aanraden te kijken naar de Fiestel netwerk procedure van 3DES voor een leuke vergelijking en contrast van verschillende blok cijfers.,in termen van hardware, sinds de lancering van Intel Westmere, Intel heeft hun processors ontworpen met speciale instructies voor AES optimalisatie ingebouwd in hun hardware en AMD volgde dit voorbeeld kort daarna.

Block Cipher werkingsmodi

In tegenstelling tot een stream cipher, neemt een block cipher alleen een vaste lengte ingang. Uiteraard willen we gegevens verwerken die groter zijn dan 16 bytes per keer. Dus Vervolgens is het belangrijk om de werkingsmodi te begrijpen waaronder we blokcodes kunnen gebruiken om grote sets van gegevens te versleutelen., Om deze blokcode toe te passen op een grote dataset, wordt de eerste manier van werken die te binnen schiet genoemd “Electronic Code Book” (ECB). ECB verdeelt de gegevens eenvoudig in 16 byte blokken en voert AES encryptie uniform uit. Het zou zelfs parallel kunnen gebeuren. Heel snel! Maar het is eigenlijk niet erg veilig.

het is onveilig omdat als een bericht van 16 bytes zichzelf herhaalt, de versleutelde tekst ook herhaalde data zal hebben., Dit onthult informatie over onze gegevens aan een potentiële aanvaller. We kunnen deze kwetsbaarheid toepassen op het geval waarin we een afbeelding versleutelen met de ECB. Zoals u hieronder kunt zien, is het duidelijk dat ons beeld een headshot is. In het zwaar zwarte gebied zien we een silhouet via het donkere haar en shirt.

Het is belangrijk dat onze versleutelingsschema ‘ s semantisch beveiligd zijn., Semantische beveiliging is het concept dat als we een versleutelde tekst hebben die overeenkomt met een van twee verschillende platte tekst, een tegenstander niet met een betere waarschijnlijkheid dan 1/2 kan raden met welke platte tekst de versleutelde tekst overeenkomt. Het is duidelijk dat de ECB niet semantisch veilig is. Onze versleutelde afbeelding geeft ons veel informatie om de bijbehorende duidelijke afbeelding te raden.

ECB is een voorbeeld van een eenmalige sleutel (wat betekent dat, net als het eenmalige pad, Een Sleutel slechts één keer kan worden gebruikt). Een andere meer veilige one-time-key modus van de operatie is deterministische teller modus. Je bent vrij om er zelf naar te kijken., Ik zal verhuizen naar de veilige modi van de werking die veel-time toetsen mogelijk te maken!

Cipher Block Chaining (CBC) is een werkwijze die elk 16-byte blok van platte tekst samenketent door XOR ‘ ING de versleuteling van de vorige platte tekst in onze huidige platte tekst voordat het uitvoeren van de block cipher encryptie (dat wil zeggen AES). De onderstaande afbeelding verduidelijkt dit concept:

we beginnen eerst met een willekeurige IV., IV staat voor initialisatievector die kan worden gedefinieerd als: de initiële waarde die wordt gebruikt om een herhaald proces te starten. In het geval van CBC, de IV moet willekeurig (dus onvoorspelbaar) dus het moet uniek zijn voor elke transactie. Het eerste blok van de versleutelde tekst is simpelweg het niet-versleutelde random IV. om de rest van de versleutelde tekst te produceren, is eerst de random IV XOR ‘ D met het eerste blok van platte tekst (m). Het resultaat wordt dan versleuteld met ronde toets k om het eerste blok versleutelde versleuteling (c) terug te geven., Dat cijfertekst dan XOR ‘ d krijgt met het volgende blok platte tekst (m), het resultaat wordt versleuteld met ronde sleutel k en geeft het tweede blok versleutelde cijfertekst (c) terug. Het proces wordt voortgezet totdat alle blokken zijn versleuteld.

om te decoderen draaien we het proces om.

een belangrijk onderdeel voor CBC-encryptie is dat de random IV onvoorspelbaar is., Als het IV voorspelbaar wordt, dan wordt ons encryptie schema kwetsbaar voor gekozen plaintext aanvallen. Chosen Plaintext Attack (CPA) is een aanvalsmodel dat ervan uitgaat dat de aanvaller cijfers kan verkrijgen voor willekeurige plaintext, en deze gebruiken om informatie over versleutelde berichten te onthullen. Daarom is een onvoorspelbaar IV nodig om de CPA-beveiliging te garanderen.

houd me hier bij terwijl ik probeer uit te leggen hoe deze aanval zou werken: het is mogelijk om een gekozen aanval in platte tekst uit te voeren in aanwezigheid van voorspelbare IV ‘ s vanwege de aard van XOR., Als je XOR dezelfde waarde samen (0101 ⊕ 0101)het zal altijd gelijk aan 0, dus het annuleert. Dus als u vermoedt dat een waargenomen versleutelde tekst c overeenkomt met een bepaalde platte tekst m dan kunt u uw hypothese testen met een voorspelbare IV. als de platte tekst in kwestie zo versleuteld is met IV1 dat c = E(k, M IV IV1) dan kunt u een nieuwe platte tekst indienen om te worden versleuteld en zien of u een passend resultaat krijgt: C. omdat u kunt voorspellen dat de IV IV2 zal zijn, dient u m ⊕ IV1 IV IV2 in., Het CBC proces zal deze invoer XOR met de volgende IV, IV2 zodanig dat: c = E (k, M IV IV1 IV IV2 IV IV2) vandaar IV2 annuleert, en opnieuw zijn we het versleutelen van E (k, IV1 m m) wat weer zou resulteren met c en als dit gebeurt, waren we in staat om te raden wat eerder versleuteld met IV1.

echt geweldig werk als je door dat — ^

met dat, Ik wil graag nog een blok cipher modus van operatie die de eerste blogpost in deze 3 delige serie zal afsluiten herzien. Als het een grote inspanning is geweest om het zo ver te maken, is het nu misschien een goed moment voor een snelle pauze voordat u doorgaat!,

Ok, dus we hebben ECB, CBC en hun kwetsbaarheden bekeken, maar als laatste, en waarschijnlijk het belangrijkste, zal ik de Randomized Counter Mode (CTR) introduceren. Dit is de nieuwste, meest veilige manier van werken, en het is ook efficiënter dan CBC.

randomized Counter mode neemt ook een random IV. de IV dient hier echter een ander doel. Onze sleutel wordt gecombineerd (bijv., via AES) met een iteratieve Versie onze IV: hierboven blijven we 1 aan onze IV toevoegen voor elke iteratie, anders krijgen we een herhaald resultaat. We doen dit totdat we een pad hebben zo lang als onze gewone tekst bericht. Net als de one-time-pad stream cipher, we nu XOR onze plaintext bericht met onze pseudorandom pad om te resulteren in een versleuteling. Als uw hardware meerdere AES-engines heeft, is dit ultra efficiënt omdat het parallelliseerbaar is. In CBC hing elke versleutelde tekst af van het vorige blok versleutelde tekst, dus het was onmogelijk om te parallelliseren.,

we hebben niet eens per se een blok versleuteling nodig om onze IV en sleutel te combineren tot een pseudorandom pad. Blokcodes moeten omkeerbaar zijn. Als je goed kijkt naar de mechanica van de randomized counter mode, zul je merken dat decryptie niet vereist dat we F(k, IV) omkeren . Gezien de aard van XOR, alles wat we moeten doen is het regenereren van dezelfde pseudorandom pad en XOR het met onze versleuteling. Vandaar, om te decoderen, moeten we de operatie herhalen, niet omkeren.,

Abstract gesproken (tot nu toe heb ik abstracte concepten vermeden), dat betekent dat de procedure die we gebruiken om onze geheime sleutel en IV F(k, IV) te combineren een Pseudorandom functie (PRF) moet zijn in tegenstelling tot een Pseudorandom permutatie (PRP). We hebben deze concepten toegepast in deze blogpost. Zowel PRP ‘ s als PRFs zijn deterministische procedures die, gegeven een bepaalde input, resulteren in een pseudorandom output. (i. e. AES, XOR). Een PRP is echter strenger in die zin dat het omkeerbaar moet zijn., In feite worden de termen PRP en block cipher (zoals AES) vaak synoniem gebruikt. Een PRF hoeft echter niet omkeerbaar te zijn. Als u terugkeert naar vorige dia ‘ s weergegeven in dit bericht, zult u nu begrijpen de notatie PRF en PRP.

dat concludeert Mijn overzicht van symmetrische versleuteling! We hebben stroom-en blokkeercodes bekeken. Vervolgens, aangezien blokcodes alleen op ongeveer 16 bytes per keer kunnen worden uitgevoerd, hebben we de werkingsmodi behandeld die worden gebruikt om blokcodes op grote platte tekst uit te voeren. We hebben ook de concepten van PRPs vs PRFs verduidelijkt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *