Sleutels en Encryptie

In de vorige blogs uit deze reeks zijn de hash en de checksum behandeld. In deze blog gaan we verder met de volgende onderliggende technologie voor de Blockchain; encryptie. Encryptie is het versleutelen van data met als doel dat derde partijen niet mee kunnen kijken.

De hash is een goede methode om te bepalen of de data die je zojuist ontvangen hebt integer is, of dat je net het juiste authenticatie token (wachtwoord, pincode, etc) hebt ontvangen.

In veel gevallen wil je echter dat vreemden niet in je data kunnen kijken, maar dat je dat zelf wel kan. We komen dan uit bij het wiskundige neefje van hashing, namelijk versleuteling, ook wel encryptie genoemd.

Encryptie is een omkeerbare bewerking op de data, met als gevolg dat de data na deze bewerking niet leesbaar is. Bij een goed encryptie algoritme is encryptie makkelijk en snel en is de versleutelde data heel moeilijk terug te herleiden.

Daarnaast is het een goed idee, als deze bewerking berust op een algemene standaard. Dat is met name handig als de informatie gecommuniceerd moet worden. De ontvangende partij moet namelijk op de hoogte zijn van hoe de encryptie werkt en dit ook verwerkt hebben in zijn software.

We willen dus niet dit:

Maar dit:

Met de ontvangende partij is een afspraak gemaakt over hoe de encryptie machines te gebruiken. Deze afspraak wordt ook wel de sleutel genoemd.

Symmetrische encryptie

Een rekenvoorbeeld:

We gaan data versleutelen met het volgende (standaard) algoritme:

versleuteld = onversleuteld * sleutel(1) + sleutel(2)

En het tegenovergestelde:

onversleuteld = ( versleuteld - sleutel(2) ) / sleutel(1)

Met de ontvangende partij maken we de afspraak dat sleutel(1) gelijk is aan 5 en sleutel(2) gelijk is aan 2

In het hoofdstuk over hashing hadden we het woord Nederland al omgezet in een reeks getallen.

n=14 → 14 * 5 + 2 = 72

Het getal 72 is dus de versleutelde waarde van “n”. Op deze manier kunnen we het hele woord doen:

En de ontvanger kan dit woord weer terugvertalen door:

( 72 - 2 ) / 5 = 14 → 14 = n

Overigens is dit encryptie algoritme bijzonder slecht. Een wiskundige zal er niet heel lang over doen om de sleutels te achterhalen (het algoritme was immers niet geheim). De tijd die hij ervoor nodig heeft kan enigszins verlengd worden door hele grote getallen te nemen voor de sleutels.

In een opzet waarin zender en ontvanger dezelfde sleutel gebruiken noemen we de encryptie symmetrisch. Deze manier van werken heeft een nadeel, ook voor algoritmes van kwaliteit. Ik moet een afspraak maken met de ontvangende partij over de sleutels. Die kunnen niet op dezelfde manier verstuurd worden als de rest van de data, aangezien de sleutel dan misschien onderschept wordt.

De veiligste manier zou zijn om eerst naar de ontvanger te gaan en hem de sleutels in te fluisteren. Dat is nogal wat werk de eerste keer. En dat moet iedere keer opnieuw als er van sleutel gewisseld wordt.

Asymmetrische encryptie

Stel dat we een algoritme zouden kunnen vinden waarvoor je een sleutel hebt voor het versleutelen van de data en een andere sleutel moet gebruiken voor het ontsleutelen. Dan zou je de ene sleutel kunnen opsturen naar de partij die jou geheime informatie moet sturen. De sleutel die gebruikt wordt voor het versleutelen van de gegevens kan niet gebruikt worden voor het ontsleutelen. Die hoeft dus niet geheim te blijven, die kan bijvoorbeeld gewoon per mail opgestuurd worden. Daarom noemen we die ook wel de “Public Key”. De sleutel die je houdt is de “Private Key”.

In een opzet waarin zender en ontvanger verschillende sleutels gebruiken noemen we de encryptie asymmetrisch.

Machtsverheffen:
Een notatie van 43 (4 tot de derde macht) kan uitgeschreven 
worden als 4x4x4 = 64 en 35 is 3x3x3x3x3 = 243

Modulo operatie:
De modulo operatie is feitelijk delen met rest.

4/3        = 1.333333….
4 mod 3    = 1. 
   3 kan 1 maal in 4 en dan blijft er een rest van 1 over.

25/5       = 5
5 mod 5    = 0

26/4       = 6.5
26 mod 4   = 2 (4x6 is 24, 26-24=2)

Een voorbeeld hiervan en een van de oudste algoritmes op dit vlak, is het RSA (Rivest–Shamir–Adleman) algoritme.

Het nu volgende stuk leunt zwaar op een artikel van Burt Kaliski.

Bij RSA bestaan de Public en de Private Key ieder uit een set van twee getallen.

Voorbeeld; in alle berekeningen werken we alleen met gehele getallen (niets achter de komma):

  1. We beginnen met twee grote priemgetallen p en q. Voor ons voorbeeld nemen we twee kleine getallen. p=5 en q=11
  2. Via deze getallen bepalen we de getallen w, v en x (zie artikel). In ons geval
    1. x = 55
    2. w= 7
    3. v=3.
  3. Mijn public key is nu (x,v) = (55,3) en mijn private key is nu (x,w) = (55,7)

Nu ga ik “nederland” versleutelen met mijn public key en het RSA-algoritme:

versleuteld = onversleuteldv mod x

Voor de letter n die vertegenwoordigd werd door de waarde 14:

143 mod 55 = 2744 mod 55 = 49

49 is dus de versleutelde waarde van de letter n in ons voorbeeld. Om hem te ontsleutelen:

onversleuteld = versleuteldw mod x

497 mod 55 = 678223072849 mod 55 = 14

Als ik nu veilig heen en weer wil communiceren met een andere partij, dan bepalen we beiden onze eigen private key en berekenen daaruit onze public keys die we vervolgens uitwisselen.

Dan krijgen we dus dit:

Signeren en verifieren

Het leuke van dit algoritme is dat ik het ook omgekeerd kan gebruiken. Als ik 14 versleutel met mijn private key kan ik hem weer ontsleutelen met mijn public key.

Probeer maar:

147 mod 55 = 9 en 93 mod 55 = 14

Zo op het eerste gezicht heeft het versleutelen met de private key geen nut, aangezien iedereen het kan ontsleutelen met de public key die openbaar is.

Maar bedenk dat de combinatie private/public key uniek is en dat de public key berekend wordt uit de private key. Het feit dat het bericht ontsleuteld kan worden bewijst dat het door de houder van de private key gestuurd is (aangenomen dat de private key niet gestolen is).

Het versleutelen van data met de private key wordt dan ook anders genoemd. Je versleutelt iets met de public key en de ondertekent iets met je private key. Maar in feite zijn het dus dezelfde algoritmes, alleen anders toegepast.

Overigens zijn niet alle encryptie algoritmes die in gebruik zijn geschikt voor het ondertekenen. RSA is dat wel, maar Diffie-Hellman bijvoorbeeld niet.

Als we afspreken elkaar fysiek te ontmoeten voor het uitwisselen van de sleutels, dan kunnen we daarna niet alleen veilig communiceren, we weten ook nog eens zeker dat we met elkaar praten.

Gezien het aantal partijen waarmee we veilig willen communiceren en waarvan we zeker willen zijn dat we met de juiste persoon praten is het niet handig als we bij al die partijen eerst op bezoek moeten.

Daarom zijn er bedrijven die zichzelf aanbieden als vertrouwde derde partij (Trusted Third Party; TTP). Zij verifiëren op aanvraag van b.v. jouw bank dat een publieke sleutel ook daadwerkelijk van die bank is. Na verificatie ondertekenen zij de publieke sleutel inclusief wat informatie over de partij met hun private key. Het resultaat noemen we een certificaat. Certificaten worden onder andere gebruikt voor https-websites.

Jij kunt altijd de ondertekening van het certificaat bevestigen en de geldigheid van het certificaat toetsen bij de TTP. Je haalt hiervoor eerst het ondertekende certificaat op bij de bank. De ondertekening ervan ontsleutel je met de publieke sleutel van de vertrouwde derde partij (zit standaard in je Internetbrowser). Hiermee wordt aangetoond dat het certificaat ook echt ondertekend is door de derde partij en dat deze derde partij heeft geverifieerd dat de publieke sleutel ook daadwerkelijk van de bank is. Nu beschik je over de publieke sleutel en wat gegevens van de bank en kun je je transacties versleutelen met de publieke sleutel van de bank en opsturen (en alleen de bank kan het weer ontsleutelen met hun private key).

"Stay tuned"voor het volgende deel van deze blogreeks: "Het breken van de code"

Behandelde begrippen:
Asymmetrische Encryptie Versleuteling waarbij de versleuteling met een key plaatsvindt en ontsleuteling met een andere key, die wel gerelateerd is aan de key die voor versleuteling gebruikt is. Voorbeelden zijn RSA en DSA.
Certificaat Public key in combinatie met gegevens die de identiteit van de houder van de public key aangeven plus een door de TTP ondertekende hash van sleutel en identiteitsgegevens.
Encryptie Het omzetten van een blok data in iets dat zonder kennis te hebben van de sleutel of het algoritme niet is terug te herleiden.
Key Getal of blok data dat in combinatie met het encryptie algoritme gebruikt kan worden om iets te versleutelen.
Machtsverheffen B.v. 43 is gelijk aan 4x4x4.
Modulo Delen met rest. De Modulo is de rest uit de deling.
Private Key Encryptiesleutel die gebruikt wordt in asymmetrische encryptie en geheimgehouden moet worden dor de eigenaar.
Public Key Encryptiesleutel die gebruikt wordt in asymmetrische encryptie en openbaar is.
Signing Versleutelen met de private key.
Sleutel Zie Key.
Symmetrische Encryptie Versleuteling waarbij beide partijen gebruik maken van dezelfde geheime sleutel. Voorbeelden zijn: Triple-DES (3DES; is niet meer veilig), Blowfish, Two-fish en AES.
Trusted Third Party (TTP) Partij die je vertrouwt om de identiteit van andere partijen te controleren.
Verifying Ontsleutelen met de public key.
Versleuteling Zie encryptie

 

Door de site te te blijven gebruiken, gaat u akkoord met het gebruik van cookies. meer informatie

De cookie-instellingen op deze website zijn ingesteld op 'toestaan cookies "om u de beste surfervaring mogelijk. Als u doorgaat met deze website te gebruiken zonder het wijzigen van uw cookie-instellingen of u klikt op "Accepteren" hieronder dan bent u akkoord met deze instellingen.

Sluiten