Cryptografie: symmetrische en asymmetrische sleutelalgoritmen uitgelegd

Cryptografie is ontstaan ​​uit de behoefte om een ​​datatransmissie privé te maken, dus op basis van cryptografie is de methode die op een bericht wordt toegepast om het te versleutelen en te ontsleutelen zodanig dat alleen de leesbare tekst zichtbaar is voor de afzender en de ontvanger van het bericht, dat het volkomen onleesbaar is voor iedereen die het tijdens de uitzending onderschept, en dat het op zijn beurt veilig genoeg is om elke aanval te weerstaan die de informatie die wordt verzonden in gevaar kan brengen. Er zijn twee soorten versleuteling afhankelijk van het type van uw sleutels. Cryptografie waarvan de algoritmen slechts één sleutel gebruiken, of symmetrische cryptografie , en de cryptografie van algoritmen met twee sleutels, asymmetrische cryptografie ​ Hier zullen we kunnen zien hoe elk werkt en wat hun eigenschappen en verschillen zijn.

Symmetrische cryptografie of cryptografie met één sleutel

Symmetrische cryptografie is de oudste cryptografische techniek die er is, maar biedt nog steeds een hoog beveiligingsniveau. Het is gebaseerd op het gebruik van een enkele geheime sleutel die verantwoordelijk is voor het versleutelen en ontsleutelen van de informatie, of het nu gaat om informatie die wordt verzonden met protocollen zoals TLS, of om informatie op een verwijderbaar opslagapparaat. Symmetrische cryptografie was de eerste methode die werd gebruikt om de informatie te coderen, het is gebaseerd op het feit dat hetzelfde wachtwoord zal worden gebruikt voor zowel codering als decodering, daarom is het essentieel dat alle gebruikers die het bericht willen coderen of decoderen, dit hebben geheime sleutel, anders kunnen ze dat niet. Dankzij symmetrische cryptografie kunnen we veilig communiceren of bestanden opslaan.

Geheimschrift

Encryptie het gebruik van een symmetrische sleutel betekent dat ten minste twee gebruikers de geheime sleutel moeten hebben. Met deze sleutel worden alle berichten die via het onveilige kanaal, zoals internet, worden verzonden, gecodeerd en gedecodeerd, daarom hebben we gegevenscodering nodig om de vertrouwelijkheid te behouden. Elke gebruiker die toegang wil tot het gecodeerde bericht, moet dit decoderingswachtwoord hebben, anders is het onleesbaar.

De methode om de gegevens te versleutelen is gebaseerd op het feit dat de afzender het bericht versleutelt met zijn privésleutel, hij het via het onveilige kanaal verzendt en de ontvanger het moet ontsleutelen met hetzelfde wachtwoord of dezelfde privésleutel als de afzender. heeft gebruikt.

Er zijn verschillende punten waaraan een symmetrisch sleutelalgoritme moet voldoen om veilig in gebruik te zijn:

  • Zodra het bericht gecodeerd is, kunnen noch de coderingssleutel noch het duidelijke bericht worden verkregen op welke manier dan ook.
  • Als we de duidelijke boodschap en de versleuteling kennen, er zou meer tijd en geld moeten worden besteed aan het verkrijgen van de sleutel om toegang te krijgen tot de duidelijke boodschap, dan aan de mogelijke waarde van de informatie dat is gestolen.

Brute force aanvallen de echte vijand van symmetrische cryptografie-algoritmen Houd er rekening mee dat deze algoritmen openbaar zijn en dat hun sterkte rechtstreeks afhangt van hoe complex het algoritme intern is, en ook van de lengte van de sleutel die wordt gebruikt om deze aanvallen te voorkomen.

Het belangrijkste bij symmetrische cryptografie is het beschermen van de privésleutel of het wachtwoord. Het grootste probleem dat zich voordoet, is de distributie van deze privésleutel of wachtwoord aan alle gebruikers, zowel afzenders als ontvangers van de informatie, om de informatie in het bericht te versleutelen en te ontsleutelen. Het is essentieel dat alle gebruikers van het systeem de privésleutel of het wachtwoord zo goed mogelijk beschermen, want als het in verkeerde handen valt, zou het hele systeem in gevaar komen, een nieuwe sleutel moeten genereren en de privésleutel opnieuw moeten distribueren naar de andere. deelnemers.

Een van de verschillen die we hebben tussen symmetrische en asymmetrische cryptografie is dat symmetrisch alle gebruikers dezelfde coderings- / decoderingssleutel hebben. Als we meer dan één communicatiekanaal hebben, zullen we evenveel privésleutels hebben als parallelle communicatiekanalen. In de asymmetrische kanalen heeft elke gebruiker echter een paar sleutels (openbaar en privé) voor alle communicatiekanalen, ongeacht het aantal beveiligde kanalen dat moet worden onderhouden, we hoeven alleen de privésleutel te beschermen.

Het voordeel van symmetrische cryptografie-algoritmen is dat ze snel en erg snel zijn, daarnaast is er de afgelopen jaren hardwareversleuteling versneld in computerprocessors, servers, routers en andere apparaten, op deze manier kunnen we gegevens overbrengen via VPN heel snel. De snelheid hangt ook af van het te gebruiken symmetrische versleutelingsalgoritme. AES en ChaCha20 zijn bijvoorbeeld twee van de snelste en veiligste die we tegenwoordig hebben, maar de hardware van de apparatuur heeft veel invloed.

Nu gaan we in detail praten over twee symmetrische algoritmen die tegenwoordig continu worden gebruikt, hetzij in HTTPS-verbindingen met TLS 1.2 en TLS 1.3, in virtuele privénetwerken met IPsec, OpenVPN of WireGuard, en ook op andere gebieden waar gegevenscodering wordt gebruikt, zoals in VeraCrypt.

Advanced Encryption Standard (AES)

Het symmetrische AES-algoritme had de leiding over ter vervanging van DES , en wordt momenteel gebruikt in alle beveiligde kanalen en protocollen zoals TLS, FTPES, virtuele privénetwerken en nog veel meer. AES-codering kan worden gebruikt in zowel software als hardware, AES is een blokcoderingsalgoritme, de vaste blokgrootte is 128 bits ​ De lengte van de sleutel kan worden gekozen, en dat hebben we gedaan 128, 192 en 256 bits beschikbaar , zijnde de lengte van 128 bits de standaard, maar 256 bits worden ook veel gebruikt.

Een heel belangrijk aspect is dat AES verantwoordelijk is voor het genereren van een 4 × 4-matrix, en vervolgens wordt er een reeks coderingsrondes op toegepast. Voor een 128-bits sleutel worden 10 coderingsronden toegepast, voor een 192-bits sleutel worden 12 ronden toegepast, en voor een 256-bits sleutel zijn de toegepaste rondes 14. Vanaf het begin twijfelen veel cryptografen aan de veiligheid ervan, en dat is ook zo. dat er aanvallen zijn geregistreerd tijdens een aantal rondes in de buurt van de laatste ronde, met name 7 ronden voor 128-bits sleutels, 8 ronden voor 192-bits sleutels en 9 ronden voor 256-bits sleutels zijn gedecodeerd.

De versleutelingsmodus is de manier waarop de AES-versleutelde berichtblokken worden verwerkt, er zijn verschillende typen en elk werkt op een andere manier. Er is bijvoorbeeld AES-CBC, AES-CFB en AES-OFB gaan we uitleggen wat dit precies is dat voorkomt in cryptografische bibliotheken zoals OpenSSL en LibreSSL.

  • CBC (Cipher-block-chaining) - Deze coderingsmodus wordt veel gebruikt in combinatie met een hash-functie om de authenticiteit van gegevens te verifiëren, en wordt nog steeds gebruikt. Deze versleutelingsmodus bestaat uit het XORen van elk blok platte tekst met het vorige versleutelingsblok. Elk gecodeerd blok is afhankelijk van het vorige dat tot op dat moment is verwerkt. Om deze XOR-optie uit te voeren met het eerste tekstblok, wordt een initialisatievector IV gebruikt. Deze versleutelingsmodus wordt opeenvolgend uitgevoerd en kan niet parallel worden behandeld om de prestaties bij het versleutelen / ontsleutelen van gegevens te verbeteren.
  • OFB (uitgangsfeedback) : in deze modus wordt de geheime sleutel gebruikt om een ​​pseudo-willekeurig blok te maken waarop de XOR-bewerking met platte tekst wordt toegepast om de cijfertekst te creëren. In dit geval is ook een initialisatievector vereist, die uniek moet zijn voor elk versleuteld bericht. Als er geen andere IV wordt gebruikt, komt de veiligheid van het systeem in gevaar. Het kan ook niet worden gepareld.
  • CFB (cijferfeedback) : het wordt hetzelfde gedaan als in OFB, maar om de keystream te produceren, versleutelt het het laatste coderingsblok, in plaats van het laatste blok van de keystream zoals OFB doet. Versleuteling kan niet parallel worden geschakeld, maar ontsleuteling wel.
  • GCM ( Galois / Counter-modus) : Deze coderingsmodus is een van de beste in termen van veiligheid en snelheid, GCM maakt parallelle verwerking mogelijk en is compatibel met AES-NI-processors om de prestaties van gegevenscodering / decodering te versnellen. Deze coderingsmodus is AEAD, naast het coderen van de gegevens, is het ook in staat om deze te authenticeren en de integriteit van de gegevens te verifiëren, om er zeker van te zijn dat deze niet is gewijzigd. GCM kan ook willekeurige initialisatievectoren accepteren.

Zoals je hebt gezien, is AES momenteel een van de belangrijkste en meest gebruikte symmetrische versleutelingsalgoritmen ter wereld, maar de meest aanbevolen versleutelingsmodus is AES-GCM omdat het AEAD bevat.

ChaCha20

Het ChaCha20-algoritme is een symmetrisch versleutelingsalgoritme dat ondersteunt 128-bits en 256-bits en hogesnelheidssleutels, in tegenstelling tot AES dat een blokcijfer is, is ChaCha20 een stroomcijfer. Het heeft vergelijkbare kenmerken als zijn voorganger Salsa20 maar met een primitieve functie van 12 of 20 verschillende rondes. De code is gepubliceerd, gestandaardiseerd door de IETF in RFC 7539 en in software-implementaties is het veel efficiënter en sneller dan AES, dus het heeft snel een plaats veroverd binnen de meest gebruikte algoritmen van vandaag.

Om erachter te komen waarom het zo beroemd is geworden, gaan we Google in het midden plaatsen zodat alles veel sneller begrepen kan worden. HTPPS-verbindingen zijn gericht op het bieden van maximale beveiliging op de websites die we dagelijks bezoeken, het was de volgende stap van het HTTP-protocol dat geen enkele bescherming bood. Versleuteling verschilt echter van browser tot browser. Tot een paar jaar geleden, Chrome voor Android gebruikt AES-GCM als zijn symmetrische versleutelingsalgoritme, maar Google werkt al jaren aan meer actuele, veilige en snellere versleuteling.

De sprong in populariteit doet zich voor wanneer, na de lancering in de desktopversie van Chrome, de nieuwe ChaCha20 voor codering en Poly1305 voor authenticatie arriveert op Android. Een gigantische baan die zich vertaalt in een symmetrisch algoritme dat meer veiligheid biedt, en dat immuun is voor verschillende soorten aanvallen. Het meest opmerkelijke is echter dat het een prestatie behaalt die drie keer hoger is dan wat oudere protocollen zoals AES, op deze manier kunnen de mogelijkheden van de CPU worden ook beter benut en een vermindering van 16% in de breedte van de gebruikte band, waardoor het mogelijk is om nog meer te profiteren van de verbinding.

ChaCha20 wordt veel gebruikt in HTTPS-verbindingen, in SSH-verbindingen om servers te beheren, en zelfs het populaire WireGuard VPN-protocol gebruikt alleen ChaCha20 voor symmetrische gegevensversleuteling. Het is heel goed mogelijk dat we ChaCha20 binnenkort ook in IPsec-verbindingen zullen zien, in de tussentijd moet u waar mogelijk AES-GCM gebruiken.

Tot dusverre de uitleg van symmetrische cryptografie, we hebben commentaar geleverd op de twee algoritmen die tegenwoordig vaak worden gebruikt, er zijn er nog veel meer die in het verleden zeer relevant waren, vooral voor de ontwikkeling van de huidige, aangezien zij de basis van de nieuwe zijn vestigden zich op de ervaring van het oude, hun fouten en hun voordelen. Algoritmen zoals DES, 3DES, RC5 of IDEA maakten de weg vrij voor de nieuwe, zodat we vandaag echt sterke versleutelingsalgoritmen hebben die bestand zijn tegen aanvallen en al onze informatie beschermen tegen ongewenste en kwaadwillende handen.

Asymmetrische cryptografie of cryptografie met openbare sleutels

Asymmetrische sleutelcryptografie wordt ook wel een openbare sleutel genoemd gebruikt twee verschillende sleutels aan elk uiteinde van de communicatie om deze te versleutelen en te ontsleutelen ​ Elke gebruiker van de communicatie heeft een openbare en een privésleutel. De privésleutel zal door de gebruiker zelf moeten worden beschermd en bewaard zal geheim zijn en mag absoluut door niemand bekend zijn, noch mag het naar iemand worden gestuurd. De openbare sleutel is toegankelijk voor alle gebruikers van het systeem die willen communiceren.

De kracht van het systeem waarmee dit type asymmetrische algoritme veilig is, is dat het is gebaseerd op wiskundige functies die zijn in zekere zin gemakkelijk op te lossen , maar van wie resolutie in de tegenovergestelde richting is buitengewoon gecompliceerd , tenzij de sleutel bekend is. ​ Publieke en private sleutels worden gelijktijdig gegenereerd en zijn aan elkaar gekoppeld. De relatie tussen de twee moet erg complex zijn, zodat het voor ons erg moeilijk is om een ​​sleutel van de ander te verkrijgen, in dit geval, om de privésleutel te verkrijgen, aangezien de publieke sleutel bekend is bij iedereen die op het systeem is aangesloten.

De toetsenparen hebben verschillende en zeer belangrijke functies, waaronder we benadrukken:

  • Versleutel de informatie.
  • Zorg voor de integriteit van de verzonden gegevens.
  • Garandeer de authenticiteit van de uitgever.

Asymmetrische sleutelversleuteling

Als een persoon met een sleutelpaar een bericht versleutelt met de openbare sleutel van de ontvanger, kan dat bericht alleen worden ontsleuteld met de bijbehorende privésleutel. Als we een bericht versleutelen met de privésleutel, kunnen we het niet decoderen met de privésleutel zelf, we moeten de openbare gebruiken (in dit geval wordt het niet als codering beschouwd, maar wordt de authenticiteit van de afzender gecontroleerd, met dit zullen we verifiëren dat de afzender is die echt zegt te zijn).

De wiskundige structuur van hoe asymmetrische codering werkt, is deze:

  • Bericht + openbare sleutel = gecodeerd bericht
  • Versleuteld bericht + privésleutel = Ontsleuteld bericht
  • Bericht + privésleutel = ondertekend bericht
  • Ondertekend bericht + openbare sleutel = Authenticatie

Zoals we eerder hebben opgemerkt toen we het hadden over symmetrische sleutelcryptografie, biedt symmetrische codering vertrouwelijkheid (alleen de ontvanger kan het bericht lezen). Asymmetrische cryptografie biedt andere eigenschappen: authenticiteit, integriteit en onweerlegbaarheid. Om een ​​algoritme als veilig te beschouwen, moet het aan het volgende voldoen:

  • Als de cijfertekst bekend is, is het moet erg moeilijk of bijna onmogelijk zijn om de leesbare tekst en de privésleutel te extraheren op welke manier dan ook.
  • Als de leesbare tekst en de codering bekend zijn, is het zou duurder moeten zijn om de privésleutel te verkrijgen dan de leesbare tekst .
  • Als de gegevens zijn versleuteld met de openbare sleutel, er mag alleen een privésleutel zijn die deze kan ontsleutelen , en vice versa.

Het voordeel van asymmetrische versleuteling boven symmetrische versleuteling is dat de publieke sleutel bekend kan zijn bij alle gebruikers van het systeem, dit gebeurt echter niet met de private sleutel, en als gevolg van symmetrische versleuteling moeten beide gebruikers dezelfde sleutel kennen. (en het wachtwoord moet naar elk van de verschillende gebruikers worden gestuurd via het vastgestelde communicatiekanaal).

Werking van het symmetrische en asymmetrische systeem

Het belangrijkste nadeel van dit type versleuteling is zijn traagheid , vertraagt ​​het gebruik van dit soort sleutels het coderingsproces van de communicatie. De oplossing hiervoor is om zowel asymmetrische als symmetrische codering te gebruiken (zoals protocollen zoals IPSec of OpenVPN doen voor virtuele privénetwerken, HTTPS voor beveiligde webverbindingen of in SFTP / FTPES-verbindingen).

Deze combinatie van cijfers gebeurt als volgt. We maken de symmetrische algoritmesleutel, coderen deze met de openbare sleutel van de ontvanger, sturen de gecodeerde gegevens via het onveilige communicatiekanaal en vervolgens decodeert de ontvanger de gegevens met zijn privésleutel. Met de symmetrische algoritmesleutel in de dubbele punt, kan dit het moment zijn waarop communicatie met behulp van symmetrische codering kan beginnen, wat de communicatie veel sneller maakt dan wanneer we alleen asymmetrische cryptografie zouden gebruiken in alle communicatie.

Het duidelijke voorbeeld van waar dit type gecombineerde methode wordt gebruikt, zijn VPN's, zoals OpenVPN of IPsec, waarbij de sessiesleutel die bekend is bij gebruikers zo nu en dan opnieuw wordt gegenereerd om de communicatiebeveiliging verder te verhogen, zonder dat dit een significante vertraging in de gegevensoverdracht met zich meebrengt. .

Uitdaging-reactie

Om de veiligheid te vergroten, deze methode verifieert dat de afzender werkelijk is wie hij beweert te zijn , hiervoor wordt een sms naar de afzender gestuurd en hij zal deze versleutelen met zijn privésleutel (wat hij echt doet is het ondertekenen), de afzender stuurt ons de versleutelde tekst (ondertekend) en wij zullen de sleutel decoderen (we zullen verifieer de handtekening) door gebruik te maken van het feit dat we de openbare sleutel van de uitgever hebben, en tot slot zullen we vergelijken dat het verkregen bericht hetzelfde is dat we eerder hebben verzonden.

Als een gebruiker zich voordoet als de echte uitgever, zou hij de privésleutel niet hebben, dus de "uitdaging" zou niet zijn gelukt en de gegevens zouden niet worden gecommuniceerd.

Digitale handtekening

De digitale handtekening staat de ontvanger van een bericht toe dat de oorsprong authentiek is kunnen we ook controleren of het bericht is gewijzigd. Het vervalsen van een digitale handtekening is bijna onmogelijk, tenzij ze de privésleutel van de ondertekenaar kennen (en we hebben al eerder gezegd dat de privésleutel moet worden opgeslagen en dat niemand deze mag weten). Dit zijn de twee fasen voor de realisatie van de digitale handtekening:

  • Handtekeningproces: de afzender versleutelt de gegevens met de privésleutel en stuurt deze naar de ontvanger.
  • Controleer de handtekening: de ontvanger decodeert de gegevens met behulp van de openbare sleutel van de afzender en controleert of de informatie overeenkomt met de originele gegevens (als deze overeenkomt, is deze niet gewijzigd).

In digitale handtekeningen worden hash-functies zoals SHA2-256 en SHA2-512 gebruikt omdat, zoals we eerder hebben uitgelegd, asymmetrische codering traag is. De afzender van de communicatie past de HASH-functie toe op het originele bericht om de vingerafdruk te verkrijgen. De vingerafdruk wordt vervolgens versleuteld met de privésleutel en voor ontsleuteling via het onveilige kanaal naar de ontvanger gestuurd. De ontvanger zal ook uw gegevens hashen en de resultaten vergelijken (degene die ze hebben gekregen en degene die ze hebben ontvangen). Als het resultaat van het vergelijken van deze gegevens negatief is, dat wil zeggen dat er verschillen zijn tussen wat is verkregen en wat is ontvangen, is de informatie gewijzigd en zijn de vingerafdrukgegevens gewijzigd. Als het resultaat hetzelfde is, verloopt de communicatie zonder problemen.

Met dit alles hebben we vervuld:

  • Authenticiteit, de uitgever is wie ze zeggen te zijn ​ De handtekening bij herkomst en bestemming is hetzelfde.
  • Integriteit, het bericht is niet gewijzigd ​ Wat wordt verkregen en wat wordt ontvangen, is hetzelfde.
  • Geen afwijzing, de afzender kan niet ontkennen dat hij het bericht naar de ontvanger heeft gestuurd ​ De digitale handtekening verandert niet.

Als we de communicatie vertrouwelijk willen maken, hoeven we alleen maar de afzender het originele bericht te laten versleutelen met de openbare sleutel van de ontvanger.

Asymmetrische sleutelcoderingsalgoritmen

Nu zullen we de twee belangrijkste asymmetrische algoritmen opsommen die vandaag worden gebruikt, en we zullen uitleggen hoe ze werken.

Diffie-Hellman

Het is zelf geen asymmetrisch algoritme, het is een belangrijk vestigingsprotocol wordt gebruikt om een ​​privésleutel te genereren aan beide uiteinden van een onveilig communicatiekanaal ​ Het wordt gebruikt om de privésleutel te verkrijgen waarmee de informatie later samen met een symmetrisch coderingsalgoritme wordt gecodeerd. De kracht van de Diffie-Hellman is dat zijn veiligheid ligt in de moeilijkheid om de discrete logaritme van grote getallen te berekenen (Diffie-Hellmann staat ook het gebruik van elliptische curven toe).

Het probleem met dit algoritme is dat het geen authenticatie biedt, het kan de identiteit van de gebruikers niet valideren, dus als een derde gebruiker in het midden van de communicatie komt, zouden ze ook de sleutels krijgen en daarom kunnen ze vaststellen communicatie met de afzender en de ontvanger die identiteiten nabootsen. Om dit te voorkomen zijn er verschillende oplossingen die het probleem verzachten en oplossen, zoals het gebruik van digitale certificaten.

RSA

Het asymmetrische algoritme bij uitstek, dit algoritme is gebaseerd op het paar sleutels , de openbare en de privé waarover we het al eerder hebben gehad. De veiligheid van dit algoritme ligt in het probleem van het in rekening brengen van zeer grote gehele getallen, en in het RSA-probleem, omdat het momenteel niet mogelijk is om een ​​cijfertekst volledig te decoderen met RSA, hoewel gedeeltelijke decodering wel mogelijk is. Enkele zeer belangrijke kenmerken van RSA zijn de sleutellengte, momenteel moet ten minste een lengte van 2048 bits worden gebruikt, hoewel het wordt aanbevolen om 4096 bits of hoger te gebruiken voor meer veiligheid.

Voordeel:

  • Het probleem van de distributie van symmetrische sleutels (symmetrische versleuteling) is opgelost.
  • Het kan worden gebruikt voor digitale handtekeningen.

nadelen:

  • Beveiliging hangt af van de efficiëntie van computers.
  • Het is langzamer dan symmetrische sleutelalgoritmen.
  • De privésleutel moet worden gecodeerd door een symmetrisch algoritme.

DSA

Dit algoritme is ook puur asymmetrisch, een nadeel van DSA is dat het veel meer rekentijd wil dan RSA voor hardware-gelijkheid. DSA wordt veel gebruikt als algoritme voor digitale handtekeningen, het is momenteel een standaard, maar DSA wordt niet gebruikt om gegevens te versleutelen, alleen als digitale handtekening. Dit algoritme wordt veel gebruikt in SSH-verbindingen om de digitale handtekening van clients te verifiëren, daarnaast is er een variant van DSA op basis van elliptische curven (ECDSA), en het is beschikbaar in alle huidige cryptografische bibliotheken zoals OpenSSL, GnuTLS of LibreSSL. Een ander kenmerk van DSA is de sleutellengte, de minimale sleutellengte is 512 bits, hoewel het meest gebruikelijk is om 1024 bits te gebruiken.

Nu kent u de twee soorten cryptografie en de eigenschappen van elk, hiermee weet u het waar het de moeite waard is om het ene type te gebruiken en waar het andere ​ In de loop van de tijd zullen deze methoden variëren of zullen ze worden bijgewerkt naar veiligere, aangezien met de toename van de computerprestaties, aanvallen op dit type beveiligingsmethode worden verbeterd, maar op dit moment zijn de van kracht en worden ze nog steeds gebruikt voor niet omdat ze al zijn verdreven, zijn zij degenen die we u zojuist hebben uitgelegd.