Encryptie… introductie
Encryptie is niet meer weg te denken in het hedendaagse dataverkeer. Encryptie zorgt ervoor dat onze data veilig is en zijn integriteit en authenticiteit behoud. Onze hedendaagse communicatiekanalen (denk aan Internet) zijn onveilige kanalen. Andere mensen hebben ook toegang tot dit netwerk en kunnen potentieel meekijken. Encryptie is een van de mechanismes die dit voorkomt. Encryptie zorgt niet dat data niet gestolen kan worden maar dat de data niet meer gelezen kan worden.
Encryptie is een vorm van cryptografie. Encryptie betekend het versleutelen ofwel onleesbaar maken van data en decryptie is het weer leesbaar maken van de data. Heb jij vroeger nooit een geheimtaal gehad waarvan alleen jij en je vrienden wisten hoe de geheimtaal gelezen moest worden? Encryptie is net zoiets.
Moderne cryptografie definieert vier hoofddoelstellingen ter bescherming van vertrouwelijke informatie, namelijk:
- Geheimhouding (informatie geheim houden voor onbevoegde)
- Integriteit (zorgen dat ontvangen informatie niet gemodificeerd is)
- Authenticatie (zeker weten dat de verzender en ontvanger legitiem zijn)
- Niet te weigeren (informatie die verzonden is kan niet geweigerd of ingetrokken worden)
Encryptie versleuteld data volgens een bepaald algoritme (cipher suite). Er zijn vele verschillende algoritmes. De meest voorkomende algoritmes vermeld ik verderop in de post. Allereerst is het goed om te vermelden wat de encryptiesleutel is en welke 2 belangrijke soorten cryptografie we hebben.
Encryptie sleutel
De encryptiesleutel is een set van gegevens die gebruikt worden om bepaalde data te versleutelen of te ontsleutelen. Als we encryptie met geheimtaal vergelijken dan zou de encryptiesleutel het codeboek zijn en hoe deze toegepast moet worden. B.v. Z = A, Y = B. Als een gebruiker de sleutel gebruikt om data te versleutelen dan kan de ontvanger (als de sleutel bekend is) het bericht ontsleutelen door de procedure in omgekeerde volgorde te herhalen. Bij asymmetrische cryptografie is de encryptie sleutel (private key) niet hetzelfde dan de decryptie sleutel (public key). Dit gegeven beveiligd een aantal zwakheden binnen symmetrische encryptie. Toch blijft de sleutel binnen cryptografie de zwakste schakel. Als deze bekend wordt aan een derde partij dan is de beveiliging verbroken.
De encryptie sleutel moet verkregen worden op een veilige locatie. In theorie zouden de 2 partijen die veilig willen communiceren elkaar op een veilige locatie moeten ontmoeten om de sleutels te delen. Het delen van de sleutels over het internet kan gevaarlijk zijn omdat de onderhandeling nog niet over een veilig kanaal gaat en dus afgeluisterd kan worden. Hier zijn diverse trucjes op gevonden. In veel gevallen bevat een certificaat de sleutel. Dit certificaat is geautoriseerd door een CA (Certificate Authority). In een nutshell is dit proces als volgt:
1. Partij A (Webserver) vraagt een certificaat aan bij een CA. Hij stuurt hiervoor een aanvraag naar de CA welke ondertekend is met zijn publieke sleutel.
2. De CA controleert de authenticiteit van de aanvrager en het bedrijf en stuurt vervolgens de aanvraag retour welke ondertekend is met de publieke sleutel van de CA
3. Partij A maakt op zijn webserver de aanvraag compleet met de retour ontvangen data van de CA en er ontstaat een certificaat.
4. Partij B (de cliënt) wil veilig communiceren met Partij A. Partij B verteld aan partij A welke cipher keys (algoritmes) hij kent.
5. Partij A stuurt zijn certificaat met publieke sleutel en hoogst mogelijke encryptiemethode naar Partij B
6. Partij B controleert het certificaat. Bij akkoord is de authenticiteit van partij A gewaarborgd. Partij B maakt een pre-master key en versleuteld deze met de publieke sleutel van Partij A
7. Partij A voegt data toe aan de pre-master sleutel en maakt hier een master key van waar vervolgens weer een sessiesleutel van gemaakt wordt. Partij A stuurt deze info versleuteld met de pre-master key terug naar partij B.
8. Partij B ontvangt nu de sessiesleutel en schakelt zijn encryptie in volgens de afgesproken standaarden en met de afgesproken sessiesleutels
9. Data wordt nu veilig verstuurd tussen partij A en B
Bovenstaande proces is een voorbeeld waar asymmetrische encryptie wordt gebruikt om sessiesleutels te communiceren en waar vervolgens beide partijen communiceren over een symmetrisch of asymmetrisch versleutelde lijn.
Symmetrische encryptie
Symmetrische encryptie is encryptie waarbij 2 partijen gebruik maken van dezelfde sleutel. Deze sleutel wordt gebruikt om data te versleutelen en ontsleutelen. Het voordeel van symmetrische encryptie is dat deze encryptiemethode vele malen sneller is dan asymmetrische encryptie. Daarom heeft symmetrische encryptie de voorkeur bij grote bestanden. Symmetrische encryptie werkt alleen goed bij een 1-op-1 communicatiekanaal. Als er meerdere partijen aanwezig zouden zijn tijdens een sessie met symmetrische encryptie dan zouden de partijen niet weten wie de data verstuurde omdat het datapakket eerst uitgepakt zou moeten worden.
Asymmetrische encryptie
Asymmetrische encryptie is een stuk veiliger dan symmetrische encryptie. Dit komt omdat niet alle partijen op de hoogte zijn van de private key (de decryptie sleutel). Er wordt 1 sleutel gebruikt om data te versleutelen (de publieke sleutel) en er wordt 1 sleutel gebruikt om de data te ontsleutelen. Deze sleutel is alleen bekend bij de ontvanger en noemen we de private key. Asymmetrische encryptie is langzamer dan symmetrische encryptie omdat de encryptiemethode een stuk ingewikkelder is. Dat moet wel zodat de publieke sleutel het decryptie proces niet kan verraden.
Hashing
Hoewel hashing eigenlijk geen encryptie is wordt hij wel vaak onder de encryptiemethodes geschaard. Hashing is geen encryptie omdat een hash niet meer terug te draaien is. Data die gehashed is kan dus niet meer leesbaar worden gemaakt. Bij hashing wordt data via een algoritme veranderd in onleesbare data. Dit algoritme gebruikt vaak “willekeurige nummers” om de hash te maken welke gebaseerd zijn op een specifieke waarde zoals b.v. het MAC adres, de systeemtijd of de CPU Instruction Pointer.
Als identieke data middels dezelfde hash 2x versleuteld wordt dan levert dit beide keren dezelfde hash op. Als de data slechts 1 bit afwijkt dan zal de hash compleet anders zijn. Dit werkt als volgt:
Gebruikersnaam | Wachtwoord | Hash |
---|---|---|
Jan-jansen | Welkom123 | 568719801efc2cfd162f157c5efb3829 |
Pieter | Welkom123 | 568719801efc2cfd162f157c5efb3829 |
Zogenaamde “rainbow tables” bevatten hashes van bekende wachtwoorden. Middels deze tabellen kunnen wachtwoorden toch nog achterhaald worden ondanks dat ze gehashed zijn. Om deze zwakheid tegen te gaan worden hashes vaak “gesalt”. Het toevoegen van een salt is feitelijk het toevoegen van een andere constante waarde waardoor elke hash toch weer uniek wordt. Dit ziet er dan als volgt uit:
Gebruikersnaam | Wachtwoord | Salt (welke gehashed wordt) | Hash |
---|---|---|---|
Jan-jansen | Welkom123 | Jan-jansenWelkom123 | 60af770543727af9a656ae11a1e12991 |
Pieter | Welkom123 | PieterWelkom123 | 76617d7da1c5ee2f84349dbe8907bd65 |
De volgende hash methodes zijn de meest bekende moderne hash methodes. SHA-256 en SHA-512 worden momenteel als favoriete en meest veilige hashmethode gezien. SHA-3 is ondertussen ook uitgebracht en zal op korte termijn SHA-2 gaan vervangen.
SHA-512 & SHA-3
SHA staat voor “Secure Hash Algorithm” en is ontworpen door de Amerikaanse National Security Agency. SHA-0 stamt alweer uit 1993 en in 1995 zag SHA-1 het daglicht. SHA-2 bestaat uit 4 verschillende substandaarden, SHA-224, SHA-256, SHA-384 en SHA-512. SHA-2 voorziet dus in langere sleutels en is een stuk veiliger en met de huidige technologie onkraakbaar. Toch zijn er zwakheden gevonden die het theoretisch mogelijk maken om met veel tijd en krachtige machines (veel krachtiger dan momenteel gemaakt kunnen worden) de hash te kraken.
SHA-3 (Secure Hash Algorithm 3), een subset van het cryptografische Keccak en gebruikt de “sponge construction”. In het Nederlands vertaald is dit de “spons constructie” welke data absorbeert in de spons en het resultaat (de hash) er weer uitknijpt. De methode van hashing is compleet anders en SHA-3 heeft eigenlijk niets te maken met zijn voorgangers. SHA-3 kent dezelfde sleutellengtes dan SHA-2 (224, 256, 384 en 512 bits) en wordt beschouwd als een alternatief voor SHA-2 maar is nog niet per definitie beter. Het is ook mogelijk om beide functies tezamen te gebruiken.
MD5
MD5 is een hashfunctie die erg populair was begin jaren 90. MD5 staat voluit voor “MD5 message-digest algorithm” en gebruikt de Merkle–Damgård construction structuur. MD5 wordt nog steeds voor sommige toepassingen gebruikt maar wordt door sommige structurele fouten als onveilig beschouwd. MD5 heeft een 128-bit hashwaarde. Om MD5 te kraken maken crackers gebruik van de hierboven vermelde “Rainbow Tables”.
RIPEMD-160
In 1996 is in België de RIPEMD-160 hashmethode uitgevonden. RIPE-160 staat voluit voor “RACE Integrity Primitives EvaluationMessage Digest”. RIPEMD-160 kent naast de 160 bit hashwaarde ook varianten met 128-, 256- en 320-bit. RIPEMD-160 is gebaseerd op het oude MD4 (de voorloper van MD5). RIPEMD-160 is ontwikkeld in een academische omgeving in tegenstelling tot SHA welke door de NSA ontwikkeld is. RIPEMD-160 is ook een outdated hashmethode en wordt niet veel meer gebruikt.
Encryptie standaarden
Er zijn vele soorten encrypties die voor verschillende soorten doeleinden gebruikt worden. In de tabel hieronder staan de meest bekende encryptiemethodes vermeld incl. hun specifieke eigenschappen.
Encryptie | Sleutel bits | Blokgrootte bits | Soort Cipher | Soort encryptie |
---|---|---|---|---|
AES | 128, 192, 256 | 128 | Block Cipher | Symmetrische encryptie |
3DES | 112, 168 | 64 | Block Cipher | Symmetrische encryptie |
IDEA | 128 | 64 | Block Cipher | Symmetrische encryptie |
ECC | Symmetrische encryptie | |||
Rijndael-algoritme | 128, 160, 192, 224, 256 > | 128, 160, 192, 224, 256 | Block Cipher | Symmetrische encryptie |
RC4 | 40-2048 | Stream Cipher | Symmetrische encryptie | |
SSL 3.0 | Asymmetrische encryptie | |||
TLS 1.2 | Asymmetrische encryptie | |||
RSA | 1024, 2048, 4096 | Asymmetrische encryptie | ||
PGP | 512, 1024, 2048, 4096 | Asymmetrische encryptie |
Download hier de complete encryptietabel als PDF.
XOR operator
Als je met encryptie bezig bent kom je vaak de term “XOR-Poort” tegen. XOR is net als ROT, AND, NOT en diverse andere een logische operator ofwel een booleaanse operator. Deze operators zijn de logische bouwstenen van digitale schakelingen en worden bij encryptie gebruikt om de data en de cipher sleutel samen te voegen. XOR heeft 2 of 3 ingangen en 1 uitgang. Om deze reden is XOR de enige operator die met asymmetrische encryptie gebruikt kan worden. XOR is namelijk afhankelijk van 2 waardes om hier 1 waarde van te maken (publieke sleutel + privé sleutel maken data weer leesbaar). XOR vergelijkt booleaanse waarden en daarvan moet er een oneven aantal waar (1) zijn. Voor een betere uitleg zie de volgende waarheidstabel van XOR:
XOR waarheidstabel:
Unencrypted data (P1) | Privé sleutel (P2) | Encrypted output met publieke sleutel (Q) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Een cracker weet bij een 0-byte dus niet of het origineel een 0 of een 1 was. Als we dat vergelijken met de AND waarheidstabel dan zien we dat elke 1 ook een 1 is bij de unencrypted data. Op die manier is al een deel van de encrypted data te ontcijferen.
AND waarheidstabel:
Unencrypted data (P1) | Privé sleutel (P2) | Encrypted output met publieke sleutel (Q) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Stel voor dat een cracker de volgende byte te pakken krijgt waar voor encryptie de AND operator gebruikt is:
10010111
Dan kan de hacker hier 5 bits van ontcijferen. 1 is immers altijd 1:
1__1_111
Met XOR kan een 1 een 0 of een 1 zijn. De cracker kan dus 0 bits met zekerheid ontcijferen.
Conclusie
Deze intro in encryptie ging iets dieper dan aanvankelijk de bedoeling is. Ik hoop dat jullie met deze introductie het idee van encryptie begrijpen en dat ik wat vragen heb mogen beantwoorden. Toekomstige posts over encryptie zullen gaan over specifieke ciphers of methodes. Helaas kan niet alles in 1 post gecoverd worden omdat er vele encryptie standaarden en methodes zijn. Bedankt voor het lezen en vergeet niet om dit bericht even te delen als je het interessant vond 🙂