PKI (Deel 1)

Door Equator op dinsdag 11 december 2007 16:08
Categorie: Work, Views: 1118

PKI, het buzzwoord in de wereld van Security, maar wat is het en wat kan je ermee?

Voor we hier echt antwoord op kunnen geven, zullen we eerst moeten weten wat PKI daadwerkelijk is.


PKI (Public Key Infrastructure) is een ontwerp welke is gebaseerd op Publieke en Private Sleutels waarbij de twee sleutels niet onafhankelijk kunnen functioneren. De sleutels worden volgens een wiskundige formule tegelijkertijd gegenereerd. Het is onmogelijk om bij bezit van 1 deel het bijbehorende deel te genereren.
Binnen PKI gaan we er van uit dat alleen de rechtmatige eigenaar van de private sleutel toegang heeft tot deze sleutel.

Voor dergelijke sleutelparen zijn enkele algoritmes, waarvan dit de bekendste zijn.
  • RSA
  • DSA
  • Diffie-Hellman
Alle drie de algoritmen kunnen sleutelparen genereren. Binnen PKI wordt alleen gebruik gemaakt van RSA.
RSA is ontworpen door Ron Rivest, Adi Shamir en Len Adleman van het Massachusetts Institute of Technology (MIT).

Oké, maar wat kan je met een dergelijk sleutelpaar :?

Een RSA sleutelpaar is te gebruiken voor zogeheten Asymmetrische encryptie, het basisprincipe van PKI.
Data welke is versleuteld met de publieke sleutel, kan alleen worden ontsleutelt met behulp van de private sleutel. En data die is versleuteld met de private sleutel kan alleen worden ontsleutelt met behulp van de publieke sleutel.

Oké, maar dan is er ook symmetrische encyptie :)

Klopt; Symmetrische encryptie is het versleutelen van data met behulp van een enkele sleutel. Met dezelfde sleutel is de versleutelde data ook weer te ontsleutelen.

Voorbeelden van symmetrische encryptie algoritmen:
  • DES
  • 3DES (Triple DES)
  • AES
  • IDEA
AES met een 256 bit sleutel wordt als zeer veilig gezien.

Symmetrische encryptie wordt gebruikt voor het versleutelen van grote blokken data. Asymmetrische encryptie is grofweg een factor 1000 trager en dus niet bruikbaar voor het ver- of ontsleutelen van grote hoeveelheden data.


Wat maakt PKI veilig :?

Het systeem met publieke en private sleutels is gebaseerd op het feit dat publieke sleutels – zoals de naam al zegt – publiek mogen zijn. Iedereen mag dus over de publieke sleutel van de ander beschikken. En de private sleutels mogen alleen in handen zijn van diegene van wie deze sleutel is.
Een document wat ondertekend is met een private sleutel van Pietje, kan dus alleen maar ondertekend zijn door Pietje omdat hij de enige is met toegang tot de private sleutel.


Ondertekenen :?

Met ondertekenen bedoelen we de digitale handtekening van een persoon.

Een document wat ondertekend moet worden, wordt eerst teruggebracht naar een unieke string van cijfers en letters. Dit proces heet hashen. Hiervoor wordt vaak gebruik gemaakt van Message Digest (MD2, MD4 of MD5) of Secure Hash Algorithm (SHA of SHA1).
Deze 32 karakters (MD) of 40 karakters(SHA) lange string is niet terug te brengen naar het originele document.** Wanneer er in het originele document een verandering plaats vindt zou de hash volledig afwijken.
Deze hash-waarde wordt aan het document toegevoegd.

Aangezien de hash ook gewoon te vervangen is met een nieuwe hash, wordt deze hash dus versleuteld met de private sleutel van de ondertekenaar.
Hiermee is de authenticiteit van het document dus gewaarborgd. Iedereen met de publieke sleutel van de ondertekenaar kan immers de versleutelde hash-waarde van het document ontsleutelen en vergelijken met de daadwerkelijke hash-waarde van het document. Wanneer deze overeenkomen kunnen we ervan uitgaan dat het document niet gewijzigd is onderweg.


Hoe zit dat dan met beveiligde e-mail :?

Wanneer ik een email wil versturen naar een ontvanger X en ik wil er zeker van zijn dat alleen ontvanger X deze kan lezen, dan zal ik de e-mail zo moeten versleutelen dat alleen de ontvanger hem kan lezen.
Wanneer ik de e-mail versleutel met mijn eigen publieke sleutel, kan alleen ik de e-mail lezen. Ik ben immers de enige met de bijbehorende private sleutel om de e-mail te ontsleutelen.
Wanneer ik de e-mail versleutel met mijn private sleutel, kan iedereen die beschikkingheeft over mijn publieke sleutel de e-mail ontsleutelen en lezen.

Ik zal de e-mail dus moeten versleutelen met de publieke sleutel van de ontvanger. Zodoende weet ik dat alleen de ontvanger de e-mail kan lezen daar hij alleen de bijbehorende private sleutel heeft.

Het versleutelen van een e-mail, of een groot document, met een publieke sleutel is een tijdrovende bezigheid. De computer is hier erg lang mee bezig.
Voor blokversleuteling wordt er dus geen gebruik gemaakt van een asymmetrische sleutel.
Er wordt hiervoor een symmetrische sleutel (128bit of 256bit groot) gegenereerd waarmee het document of de e-mail wordt versleuteld.

Deze symmetrische sleutel wordt op zijn beurt dan weer versleuteld met de publieke sleutel van de ontvanger, en meegestuurd met de versleutelde e-mail. Zodoende kan alleen de bedoelde ontvanger de symmetrische sleutel ontsleutelen en daarna met deze sleutel de gehele e-mail ontsleutelen.
Na de versleuteling van de e-mail wordt deze in zijn geheel nog eens ondertekend door de versturende partij. Nu weet de ontvanger zeker dat de mail van mij afkomt, en ik weet dat alleen de ontvanger de mail kan lezen.


Identificatie en autorisatie..

Het is ook mogelijk om een persoon te identificeren of te autoriseren met behulp van een sleutelpaar
Wanneer ik mij wil identificeren tegen een bepaald systeem geef ik mijn publieke sleutel aan dat systeem. Het systeem neemt mijn publieke sleutel en versleuteld een stukje tekst met deze publieke sleutel.

Dit versleutelde stukje tekst wordt weer aan mij gegeven om te ontsleutelen. Dit kan alleen met mijn private sleutel. Wanneer ik het stukje tekst heb ontsleutelt geef ik deze weer terug.
Wanneer het systeem het juiste stukje tekst terugkrijgt weet hij zeker dat ik diegene ben wie ik zeg dat ik ben. Ik ben immers de enige met de juiste private sleutel.


Maar hoe weet dat systeem dan wie ik ben :?

En daar komen we op het volgende probleem.. Iedereen kan wel roepen dat hij of zij "Belangrijk persoon X" is.

Hiervoor zijn instanties opgericht die tot taak hebben om te controleren of iemand inderdaad de persoon is die hij of zij zegt te zijn. En als bewijs krijg je daar een zogeheten certificaat voor. Deze instanties - de zogeheten Certificate Authorities (kortweg CA's) - geven iemand pas een certificaat voor "Belangrijk persoon X" als hij of zij ook kan aantonen deze persoon te zijn.
Voorbeelden van dergelijke instanties zijn Thawte, VeriSign, etc. Dit zijn instanties die door vrijwel iedereen als "vertrouwd" zijn aangemerkt. Wij vertrouwen dat de controles die zij doen, inderdaad kloppen.


Hoe gaat dat nu in zijn werk..

Stel, ik wil beveiligde e-mail versturen en daarmee aantonen dat ik inderdaad de daadwerkelijke persoon ben die ik zeg te zijn. Ik genereer een sleutelpaar. Het publieke deel van dit sleutelpaar stuur ik ( samen met mijn persoonlijke informatie zoals Naam, Plaats en E-Mail adres) als een zogeheten Certificate Signing Request (CSR) op naar de certificerings instantie die ik heb uitgekozen.
Indien de controle op mijn naam en e-mail adres positief uitkomt wordt van mijn CSR mijn certificaat gemaakt, en ondertekend door de CA. (Dit gebeurt dus weer door het hashen van mijn certificaat en het versleutelen van deze hash met de private sleutel van het CA sleutelpaar)
Dit ondertekende certificaat wordt naar mij teruggestuurd. Dit certificaat i.c.m. mijn private sleutel behorende bij de publieke sleutel in het certificaat geeft mij de mogelijkeheid om mail versleuteld te versturen.

Aangezien niemand mijn certificaat heeft, en dus ook niet kan controleren of mijn certificaat wel "vertrouwd" is, wordt mijn certificaat meegestuurd met de daadwerkelijke e-mail.

Voor de daadwerkelijke versleuteling heb ik echter het certificaat nodig van de ontvanger. Deze dient dus eerst via mail of een andere manier aan mij beschikbaar te worden gesteld.

De ontvanger van de e-mail neemt mijn certificaat uit de e-mail, en ontsleuteld met mijn publieke sleutel de hash-waarde van de versleutelde mail en controleerd deze. Indien dit klopt dan is de mail niet gewijzigd sinds het versturen.
Dan gebruikt de ontvanger zijn eigen private sleutel om de encryptie-sleutel te ontsleutelen. Met deze encryptie-sleutel wordt de gehele e-mail ontsleuteld en is deze leesbaar voor de ontvanger.

Tot zover deze inleiding in de wondere wereld van PKI :)

Suggesties voor Deel 2 zijn welkom (reactie)

(**)
Ja, met behulp van zogeheten rainbow tables is het mogelijk om een hash om te zetten naar de (mogelijk)originele invoer, maar dat is hier niet van belang. Ik betwijfel of er rainbow-tables bestaan die ook complete e-mails en documenten in de database hebben staan. Bovendien is het voor het verhaal even niet interessant.

Volgende: PKI (Deel 2) 21-12

Reacties

Er zijn nog geen reacties op deze post


Om te kunnen reageren moet je ingelogd zijn. Via deze link kun je inloggen als je al geregistreerd bent. Indien je nog geen account hebt kun je er hier één aanmaken.