Encryptie

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Binnen de cryptografie staat encryptie voor het coderen (versleutelen) van gegevens op basis van een bepaald algoritme. Deze versleutelde gegevens kunnen nadien weer gedecrypteerd (ontcijferd of gedecodeerd) worden zodat men de originele informatie weer terugkrijgt. Dit proces wordt decryptie genoemd.

Eén van de bedoelingen van cryptografie is dat gegevens veilig uitgewisseld kunnen worden tussen twee personen over een onveilig communicatiekanaal, dat wil zeggen een communicatiekanaal waar ook derden toegang toe kunnen hebben, zoals het internet. De versleuteling zorgt er dan voor dat deze derden de gegevens niet kunnen lezen. Dit gebeurt meestal door het gebruik van sleutels. Wat precies een sleutel vormt verschilt per algoritme, maar meestal is een sleutel een bepaald heel groot getal van enkele tientallen decimalen. Het doel van het cryptografische algoritme is dan om er voor te zorgen dat alleen de personen met de juiste sleutel de versleutelde gegevens weer kunnen ontcijferen.

Bij de meeste cryptografische algoritmen is het zo dat het in principe wel mogelijk is om zonder de juiste sleutels versleutelde gegevens te decoderen, maar dat dit decoderen dan zo veel rekenwerk kost dat het praktisch onmogelijk is. Het decoderen van gegevens zonder de juiste sleutel kan dan op de snelste computers van nu miljarden jaren rekentijd kosten. Wat er in zo'n geval in feite gebeurt is dat de computer die een versleuteling probeert te kraken alle mogelijke sleutels gaat uitproberen, totdat er eentje gevonden wordt die werkt. Als de sleutel een groot genoeg getal is, zijn zelfs de snelste computers niet in staat om alle mogelijke sleutels in korte tijd uit te proberen. Aangezien computers door de jaren heen steeds sneller worden is het ook nodig om in de loop van de tijd grotere getallen als sleutel te gaan gebruiken.

Er zijn grofweg twee vormen van cryptografie: symmetrische en asymmetrische.

Symmetrisch[bewerken]

Nuvola single chevron right.svg Zie symmetrische cryptografie voor het hoofdartikel over dit onderwerp.

Bij symmetrische cryptografie gebruiken zender en ontvanger dezelfde sleutel. Die sleutel moet van tevoren uitgewisseld worden via een veilig kanaal (waarbij zender en ontvanger elkaars identiteit kunnen controleren en onderschepping van de sleutel door derden niet mogelijk is).

Het gebruik van dezelfde sleutel wil niet altijd zeggen dat het coderen en het decoderen identiek zijn. Bij de sleutel Rot13, die bij e-mail veel wordt gebruikt, is dat wel het geval. Wie een gecodeerd bericht opnieuw met ROT13 decodeert, ziet weer het oorspronkelijke bericht. Bij een code als A→B, B→C enz. is dat niet het geval, maar de decodeersleutel kan eenvoudig worden afgeleid uit de codeersleutel. Beide gelden als symmetrische cryptografie.

Asymmetrisch[bewerken]

Nuvola single chevron right.svg Zie asymmetrische cryptografie voor het hoofdartikel over dit onderwerp.

Moderner is de asymmetrische cryptografie, ook wel public key encryption genoemd. Hierbij hebben zender en ontvanger elk een eigen set van twee sleutels, waarvan er één publiek is en één niet. Het is in theorie mogelijk, maar niet praktisch haalbaar, om de geheime sleutel uit de publieke sleutel af te leiden.

Berichten die met een publieke sleutel worden versleuteld, kunnen alleen met de geheime sleutel worden ontcijferd. Met andere woorden: onbevoegden kunnen het bericht niet lezen.

Andersom geldt dit ook: informatie die is vercijferd met de geheime sleutel van iemand, kan alleen met de bijbehorende publieke sleutel worden ontcijferd. Dit laatste wordt gebruikt bij het digitaal ondertekenen van berichten: men heeft de zekerheid dat het bericht afkomstig is van degene die zich de afzender noemt.

De publieke sleutel mag aan iedereen bekend zijn en kan dus uitgewisseld worden over een onveilig kanaal zoals internet. Om een bericht te coderen en digitaal te ondertekenen, heeft de zender zijn eigen geheime sleutel nodig én de publieke sleutel van de ontvanger. Om het ontvangen bericht te decoderen en te verifiëren of de handtekening wel van de zender is, heeft de ontvanger zijn eigen geheime sleutel nodig én de publieke sleutel van de zender.

Het grote voordeel van asymmetrische cryptografie is dat uitwisseling van de benodigde sleutels kan plaatsvinden via een onveilig kanaal. Afluisteren van de uitgewisselde informatie - inclusief publieke sleutels - vormt geen enkel probleem. Een onderscheppingrisico bestaat wel: wanneer zender en ontvanger nalaten te controleren of de gebruikte publieke sleutel inderdaad hoort bij de (beoogde) ander is het voor een derde mogelijk om zich voor te doen als één van de twee partijen. Iedereen kan immers zeggen: "mijn naam is zus-en-zo en hier is mijn publieke sleutel, stuur me nu uw gegevens maar". Zender en ontvanger dienen dus langs een betrouwbaar kanaal elkaars identiteit vast te stellen en publieke sleutels te bevestigen.

Een nadeel van asymmetrische cryptografie is dat grote sleutellengtes nodig zijn (bijvoorbeeld 4096 bytes), waardoor coderen en decoderen veel rekenkracht vergen. Dit kan dan ook niet zonder een computer. De sleutels moeten groot zijn, omdat het anders mogelijk wordt met een snelle computer de geheime sleutel te vinden.

Vaak wordt een combinatie van asymmetrische en symmetrische cryptografie gebruikt: eerst wordt door middel van asymmetrische cryptografie een geheim tussen zender en ontvanger uitgewisseld, die de sleutel vormt voor de snellere symmetrische cryptografie van grote blokken data.

Bij de versleuteling van e-mail wordt wel asymmetrische cryptografie toegepast, door PGP, GPG of S/MIME.

Hashing[bewerken]

Cryptografische hashing is in strikte zin geen versleuteling, omdat bij hashing uit de verkregen hash code de oorspronkelijke gegevens niet meer terug kunnen worden gehaald. Wel wordt bij hashing gebruikgemaakt van dezelfde technieken als bij versleuteling en vormt hashing ook vaak een onderdeel van versleutelingsprotocollen. Het verschil tussen hashing en encryptie is dus dat hashing maar 1 kant op kan (alleen hashen) en dat er bij encryptie twee kanten op gewerkt kan worden (coderen en decoderen).

Bij hashing wordt door middel van een hash algoritme een hashcode berekend van een blok gegevens. Uit deze hashcode is dan niet meer af te leiden wat de oorspronkelijke gegevens waren, maar iemand die de gegevens heeft kan wel opnieuw daarvan de hashcode berekenen en controleren of de berekende hash code overeenkomt met een eerder verkregen hash code. Aangezien de hash code vaak veel kleiner is dan het oorspronkelijke blok gegevens is het op deze manier mogelijk om bij te houden of een bepaald document al eerder is gezien, zonder dat het hele document hoeft te worden opgeslagen. Ook kan iemand door de hashcode van een document te publiceren bewijzen dat hij beschikt over een document, zonder dat document zelf publiek te maken. Als hij dan op een later moment het document alsnog publiek beschikbaar maakt kan iedereen controleren dat de persoon op het moment dat hij de hash code publiceerde al in het bezit van dat document moet zijn geweest, omdat er geen andere manier is om dezelfde hashcode te berekenen.

Voor een veilige hashcode gelden de eigenschappen dat het gegeven de hashcode niet mogelijk is om te achterhalen van welk blok gegevens de hashcode is afgeleid, en verder moet het onmogelijk zijn om twee verschillende blokken gegevens te maken die dezelfde hashcode hebben. Hierdoor heeft een hashcode de eigenschappen van een digitale vingerafdruk.

Hashing van wachtwoorden[bewerken]

Voor de aanmelding bij een computer zijn vaak een naam en een wachtwoord nodig. Deze wachtwoorden worden vaak versleuteld opgeslagen, zodat de wachtwoorden niet bekend worden als het bestand met wachtwoorden door een onbevoegde gelezen wordt. Dit gebeurt door middel van een hashing-algoritme, dat het onmogelijk maakt de versleutelde gegevens te decoderen. Dat is ook niet nodig, aangezien het voldoende is te controleren of de gebruiker het juiste wachtwoord heeft opgegeven.

Bij het versleutelen van wachtwoorden is het echter onveilig om gebruik te maken van algemene hash-algoritmen, en dient gebruik te worden gemaakt van speciale hash-algoritmen voor wachwoorden zoals bcrypt, scrypt, of PBKDF. De reden is dat normale hash-algoritmen zijn ontworpen om zo snel mogelijk berekend te kunnen worden. Bij het hashen van wachtwoorden is dat onwenselijk, omdat het daardoor mogelijk wordt dat iemand die de hashcodes van de wachtwoorden in bezit heeft gekregen achterhaalt welke hashcode van welk wachtwoord is afgeleid.

De lengte en complexiteit van wachtwoorden die mensen in de praktijk gebruiken is beperkt, terwijl computers steeds sneller worden. Daardoor wordt het voor iemand die probeert hashcodes voor wachtwoorden te kraken steeds makkelijker om een computer allerlei mogelijkheden te laten uitproberen. Hash-algoritmen voor wachtwoorden blokkeren deze methode doordat voor deze algoritmen in te stellen is hoeveel rekentijd ze moeten kosten. De algoritmen worden dan zo ingesteld dat het uitrekenen ervan bijvoorbeeld één milliseconde kost, terwijl het berekenen van een hashcode met een gewoon hash-algoritme minder dan een microseconde kan kosten. Bij het controleren van een wachtwoord is het meestal geen probleem als dit een milliseconde in plaats van een microseconde kost, terwijl iemand die wil proberen de hashcodes te kraken meer dan duizend keer zo veel rekenwerk moet doen, en dus meer dan duizend keer langer bezig is.

Decryptiebevel[bewerken]

Er is in Nederland een internetconsultatie gaande betreffende het concept-wetsvoorstel computercriminaliteit III met onder meer een wettelijke regeling waarbij aan een verdachte een decryptiebevel kan worden gegeven, in afwijking van het beginsel van nemo tenetur.[1][2][3][4]

Bronnen, noten en/of referenties