Module: Security

Module: Security

Security

Beveliging is de laatste jaren in ICT land een hot item. Regelmatig komen er verhalen in het nieuws over gehackte accounts en gebuikergegevens die op straat liggen.
In de deze module behandelen we een aantal aspecten van security waar je als (web)programeur mee te maken krijgt.

Symmetrische encryptie

Een van de belangrijkste vooruitgangen in beveiliging van ICT is wel de uitvinding van het RSA cryptosysteem. Manieren om gegevens te versleutelen waren al eeuwen bekend. Zelfs in de tombes van het oude Egypte zijn afwijkende hiërogliefen gevonden met als waarschijnlijk doel de boodschap te versluieren. De eerste vormen van encryptie berusten op een gedeelde sleutel om informatie te ontcijferen. Deze vorm wordt ook wel symmetrische encryptie genoemd. Persoon A en persoon B delen een sleutel met elkaar en kunnen met die sleutel informatie versleutelen en weer ontsleutelen.

Een voorbeeld van een eenvoudige symetrische encryptie:

De volgende regel is versleuteld met deze sleutel:

491AD8WF4YW

 

 

 

 

 

 

 

 

Symmetrische encryptie wordt tegenwoordig veel gebruikt om bijvoorbeeld documenten en zip bestanden te versleutelen. Voorbeelden van moderne symmetrische encryptie zijn:  AES (Rijndael), Blowfish, DES, 3DES.

Asymmetrische encryptie

Een beveiligde verbinding via het internet op zetten met een symmetrische encryptie is niet erg praktisch. Een bank zou dan met iedere gebruiker een unieke encryptie sleutel moeten afspreken voordat je de website van de bank kunt bezoeken. Gelukkig hebben we hier iets op gevonden. In 1977 werd het RSA cryptosysteem voor het eerst gepubliceerd. Dit systeem gaat uit van twee sleutels per gebruiker. Eén sleutel is privé en mag nooit gedeeld worden. De andere sleutel is publiek, deze sleutel mag bij iedereen bekend zijn. Daarnaast is het niet mogelijk om de privé sleutel te herleiden aan de hand van de publieke sleutel. De sleutels zijn zo gemaakt dat je berichten kunt versleutelen met de publieke sleutel. Deze sleutel is niet geschikt om het bericht te ontsleutelen. Dat kan alleen met de privé sleutel. Dit noemen we asymmetrische encryptie.

In de volgende video wordt encryptie nog een keer uitgelegd:
https://www.youtube.com/watch?v=AQDCe585Lnc

TLS

TLS is een bekend voorbeeld waarbij asymmetrische encryptie wordt gebruikt. TLS wordt bijvoorbeeld gebruikt als je een HTTPS (HyperText Transfer Protocol Secure) pagina bezoekt. Bij het TLS protocol worden tijdens het bezoeken van een website de publieke sleutels uitgewisseld. De browser van de gebruiker versleuteld het verzoek met de publieke sleutel van de website. De server ontsleuteld het verzoek met zijn privé sleutel. Na het verwerken versleuteld de server het antwoord met de publieke sleutel van de browser van de gebruiker en stuurt de informatie terug. De browser ontsleuteld deze informatie weer met de privé sleutel en toont de informatie aan de gebruiker. Naast versleutelen en ontsleutelen van gegevens controleert het TLS protocol ook nog of de publieke sleutel wel bij de website hoort. Dit noemen we authenticatie.

Hashing

Bij veel websites kun je tegenwoordig een account aanmaken om bij de website aan te melden. Door jezelf aan te melden weet de website wie je bent en kan de website gegevens voor jou onthouden. Zo kan een webwinkel je vorige bestellingen laten zien en alvast jouw gegevens invullen als je iets wilt bestellen. Deze gegevens waaronder jouw wachtwoord worden dan bewaard in een database. Als een hacker de inhoud van de database steelt is dat erg vervelend, tenslotte liggen al jouw gegevens dan op straat. Bij wachtwoorden is dat nog erger. Veel mensen gebruiken hetzelfde wachtwoord voor verschillende websites. Waardoor een hacker niet alleen kan aanmelden bij de webwinkel met jouw gegevens, maar ook bij andere websites.

Als programmeur moet je er alles aan doen om deze gegevens te beveiligen. Bij wachtwoorden wordt hiervoor vaak gebruik gemaakt van hashing. Een computer kan, met behulp van een hash functie, van iedere tekst of bestand een unieke kleine tekst berekenen. Deze unieke kleine tekst noemen we een hash. Het is niet mogelijk om met de hash de originele tekst te achterhalen. Als we het wachtwoord van een gebruiker door de hash functie halen, krijgen we dus een unieke waarde die niet terug te vertalen is in het oorspronkelijke wachtwoord. Deze waarde, de hash, bewaren we in de database. Als een gebruiker zich opnieuw aanmeld berekenen we van het wachtwoord de hash en vergelijken we die met de hash in de database.

Mocht de database gehacked worden, dan zijn daar alleen de hashes te vinden en niet de wachtwoorden. Met het steeds sneller worden van computers zijn hashes minder veilig geworden. Een moderne computer kan proberen achter het wachtwoord te komen door brute force hacking. Je laat dan de computer van alle combinaties van letters en cijfers een hash berekenen. Uiteindelijk vindt de computer een hash die overeenkomt met de hash van het wachtwoord en dus het oorspronkelijke wachtwoord. Om dit proces nog sneller te maken zijn er op internet zogenaamde rainbow tables te vinden. Dit zijn lijsten met al berekende hashes van veel voorkomende woorden en wachtwoorden. Nu hoef je alleen maar te zoeken naar de juiste hash en bijbehorend wachtwoord. Probeer het maar eens uit. De md5 hash van het woord schaap is 3ce0f51d2f5cec020cd1dff96f46e422. Deze hash is gemaakt met de website https://www.md5hashgenerator.com/, maar iedere md5 hash functie maakt deze hash van het woord schaap. Als je deze hash plakt in de volgende site: https://crackstation.net/, dan zie je dat dit een bekende hash is. Als gebruikers hetzelfde wachtwoord hebben hebben ze ook dezelfde hash. Bij een succesvolle hack heb je dan niet het wachtwoord van één gebruiker gevonden maar van meerdere.

Gelukkig is er een oplossing voor deze vorm van hacking, we maken het wachtwoord langer. Hoe langer het wachtwoord hoe lastiger het is om deze met bruteforce te achterhalen. Een wachtwoord met een lengte van 5 characters waarbij je alleen kleine- en hoofdletters gebruikt levert iets meer dan 380 miljoen combinaties op. Dat zijn er bij een wachtwoord met 12 characters al ongeveer 391 triljoen. Dus hoe langer het wachtwoord hoe beter. Toch kiezen gebruikers vaak een kort wachtwoord omdat dat gemakkelijk te onthouden is. Om het wachtwoord toch langer te maken, plakken we een extra stuk voor of achter wachtwoord. We noemen dit extra stuk een salt. Salt is letterlijk vertaald uit het engels, zout en met teveel zout wordt het eten, lees hacken, een stuk minder lekker. Als we nu ook nog voor iedere gebruiker een andere salt gebruiken zijn zelfs de hashes van twee dezelfde wachtwoorden niet meer hetzelfde. De unieke salt per gebruiker sla je dan naast de hash en de gebruikersnaam op in de database.

2FA

Websites beveiligd met een gebruikersnaam en wachtwoord zijn op zich veilig. Mensen zijn echter erg slordig met hun vertrouwelijke gegevens, waaronder ook hun wachtwoorden. Vaak hangen er briefjes aan een monitor met daarop een wachtwoord of liggen de wachtwoorden netjes opgeschreven in een laatje. In deze gevallen heeft een wachtwoord beveiliging allen niet zoveel nut. Als een website veel vertrouwelijke gegevens bevat is een gebruikersnaam en wachtwoord beveiliging vaak niet afdoende. In de meeste gevallen wordt dan gekozen om Twee-Factor Authenticatie (2FA) te implementeren. Bij twee-factor authenticatie voegen we een extra element toe aan het inlog proces. Naast dat je iets moet weten, het wachtwoord, moet je ook nog in het bezit zijn van iets. Tegenwoordig wordt voor het tweede deel vaak een smartphone gebruikt met daarop een 2FA app. Maar ook een pasje, vingerafdruk of irisscan kan dienen als een tweede factor. Ook al weet iemand jouw wachtwoord, dan kunnen ze niet aanmelden zonder de tweede factor. 
 

Diagnostische toets

  • Het arrangement Module: Security is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Laatst gewijzigd
    2020-12-08 13:24:41
    Licentie
    CC Naamsvermelding 4.0 Internationale licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Studiebelasting
    4 uur en 0 minuten