Les 11: Authenticatie & Autorisatie

Python intro
Programming basics-II
Les 3 / Week 7a
Entity Framework: Authenticatie & Autorisatie
CSD-V
Les 11
1 / 31
suivant
Slide 1: Diapositive
Applicatie- en mediaontwikkelaarMBOStudiejaar 1

Cette leçon contient 31 diapositives, avec quiz interactifs et diapositives de texte.

Éléments de cette leçon

Python intro
Programming basics-II
Les 3 / Week 7a
Entity Framework: Authenticatie & Autorisatie
CSD-V
Les 11

Slide 1 - Diapositive

Cet élément n'a pas d'instructions

Deze les
We behandelen hoofdstuk 6 niet gezamenlijk. Lees het hoofdstuk zelf door en stel vragen via Teams of in de les.

📚 Theorie:
  • Let op: deadline feedbackmoment GameBib CRUD (pagina 86)
  • Hoofdstuk 7: Authenticatie & Autorisatie
  • Gebruikersgegevens veilig opslaan

👩‍💻 Praktisch: 
Feedbackmoment GameBib CRUD - De Game Bibliotheek

Slide 2 - Diapositive

Cet élément n'a pas d'instructions

⏰ Let op: deadline feedbackmoment GameBib CRUD
(pagina 86)

Slide 3 - Diapositive

Cet élément n'a pas d'instructions

Hoofdstuk 7:
Authenticatie & Autorisatie

Slide 4 - Diapositive

Cet élément n'a pas d'instructions

Beschrijf in jouw eigen woorden:
Authenticatie

Slide 5 - Question ouverte

Cet élément n'a pas d'instructions

Beschrijf in jouw eigen woorden:
Authorsatie

Slide 6 - Question ouverte

Cet élément n'a pas d'instructions

Slide 7 - Diapositive

Cet élément n'a pas d'instructions

Welke vormen van authenticatie ken je?
Zoals: gebruikersnaam + wachtwoord

Slide 8 - Carte mentale

Cet élément n'a pas d'instructions

Wachtwoorden bij authenticatie
Alleen een wachtwoord is tegenwoordig bij veel applicaties niet meer voldoende. Je ziet steeds vaker een tweede laag van authenticatie. Meerdere 'factoren' die de toegangscontrole regelen. Oftewel MFA.

Multi Factor Authentication

Slide 9 - Diapositive

Cet élément n'a pas d'instructions

MFA - Multi Factor Authentication
Door meerdere factoren te combineren kan de beveiliging 
bij toegangscontrole worden aangescherpt. 
De factoren bestaan doorgaans uit:



  • iets dat de gebruiker weet,
    zoals een wachtwoord bij een gebruikersnaam of pincode
  • iets dat de gebruiker heeft,
    zoals een pasje, een individueel e-mailadres, een geregistreerde smartphone
  • iets dat de gebruiker is (een eigenschap van de gebruiker),
    zoals een vingerafdruk

Slide 10 - Diapositive

Cet élément n'a pas d'instructions

MFA - Multi Factor Authentication
Ook je locatie kan gebruikt worden als vorm van beveiliging.



Wanneer je steeds inlogt vanuit Breda is er nog weinig aan de hand. 
Maar zodra je nog geen uur later ineens vanuit het midden van China probeert in te loggen zullen er al snel alarmbellen gaan rinkelen wanneer je MFA hebt ingesteld.

Slide 11 - Diapositive

Cet élément n'a pas d'instructions

Wat is geen vorm van MFA?
A
Een inlogcode via sms/e-mail
B
Inloggen via een Authenticator app met je vingerafdruk
C
Het 'ik ben geen robot'-schermpje dat je krijgt bij het inloggen
D
Je wordt opgebeld en krijgt een code te horen

Slide 12 - Quiz

Ik-ben-geen-robot is om Spam te voorkomen
Is je bankpas in combinatie met de pincode die alleen jij weet ook een vorm van MFA?
A
Ja
B
Nee

Slide 13 - Quiz

Ja, je bankpas+pincode is 1 van de bekendste en meest voorkomende vormen van MFA. 

Slide 14 - Diapositive

Cet élément n'a pas d'instructions

Gebruikersgegevens veilig opslaan:
Wachtwoorden

Slide 15 - Diapositive

Cet élément n'a pas d'instructions

Wachtwoorden opslaan
Wachtwoorden zijn extreem gevoelige gegevens. We willen eigenlijk onder geen enkele omstandigheid dat het wachtwoord van een gebruiker beschikbaar is; zowel voor de beheerders van het systeem, als voor hackers.

Het probleem is dan: hoe zorgen we er voor dat we niet het wachtwoord opslaan, maar toch weten dat een gebruiker het juiste wachtwoord invult?

Slide 16 - Diapositive

Cet élément n'a pas d'instructions

Wat weet je over het veilig opslaan van wachtwoorden?

Slide 17 - Carte mentale

Cet élément n'a pas d'instructions

Wachtwoorden veilig opslaan:
Hashing

Slide 18 - Diapositive

Cet élément n'a pas d'instructions

Hashing functies
We kunnen er met een hash-functie voor zorgen dat we van het wachtwoord een waarde kunnen maken die we niet terug kunnen herleiden tot een wachtwoord. Het is dus een functie die maar één kant op werkt.

Dit is mogelijk dankzij wiskundige trucs.

Slide 19 - Diapositive

Cet élément n'a pas d'instructions

Hashing functies
Gelukkig hoeven we zelf geen hashing functies te schrijven, want die zijn al netjes bedacht en beschikbaar.

Om wachtwoorden op te slaan gebruiken we typisch het SHA-512 algoritme, maar er zijn meerdere beschikbaar.


Secure Hash Algorithm

Slide 20 - Diapositive

Cet élément n'a pas d'instructions










1E05EB80FBFF2A1AC89136A19E4D190F67DA6704E3B8192B4C74082284915D4D24634605BB881DAB1EAD4BF50EDF609F237DAC8CB6ECF6D0F77B064C5B463C0D

Slide 21 - Diapositive

Cet élément n'a pas d'instructions

Als we alleen een hash opslaan in de database...

Hoe kunnen we dan bij het inloggen weten of het wachtwoord goed ingevoerd is?

Slide 22 - Diapositive

Cet élément n'a pas d'instructions

Als we alleen een hash opslaan in de database, hoe kunnen we dan bij het inloggen weten of het wachtwoord goed is?
  1. De gebruiker probeert in te loggen met 'Janiek' en 'Welkom123'
  2. Haal de gebruiker 'Janiek' op uit de database:
    var userInDatabase = db.Users.First(u => u.Username == 'Janiek');
  3. Hash het ingevoerde wachtwoord op dezelfde manier als bij het registreren:
    var hash = hashFunction('Welkom123');
  4. Vergelijk de hash van de gebruiker met de zojuist gegenereerde hash:
    if (userInDatabase.PasswordHash == hash) {
       // log in
    } else {
      // toon foutmelding
    }

Slide 23 - Diapositive

Cet élément n'a pas d'instructions

Hashing
Is niet voldoende beveiliging zonder verdere maatregelen

Slide 24 - Diapositive

Cet élément n'a pas d'instructions

Hashes kunnen 'gekraakt' worden met Rainbow Tables



Grote database met vooraf
gegenereerde wachtwoorden

Slide 25 - Diapositive

Cet élément n'a pas d'instructions

Hash + Salt + Cost




Bijvoorbeeld:
password: Welkom123
salt: 2jh4kjaas#dkjtg
cost: 2
hash(hash(Welkom1232jh4kjaas#dkjtg)) =

A98BBB147B52DDFB1668A2FDF1E62C5C8FC47E251F7B93D86274EE926FBB36EE9FA2F85CF7477E7DD355A34FE538AD90BFB293AF92E84F8CFAF8FB56CB96C065

Slide 26 - Diapositive

Cet élément n'a pas d'instructions

Hashing 'cost': bewust moeilijker maken om hash te maken
1 seconde om een hash te genereren betekent:
  • De server heeft 1 seconde nodig om 1 nieuwe gebruiker te registreren
  • De server heeft 1 seconde nodig om 1 gebruiker in te loggen

  • Hackers hebben 6621 jaar nodig om alle hashes te berekenen voor een wachtwoord van 8 karakters wat alleen uit letters bestaat.

Een hash functie trager maken is een afweging tussen beveiliging en prestatie (server snelheid)

Slide 27 - Diapositive

Cet élément n'a pas d'instructions

We slaan dit op in de database:
(Hashing Algorithm) + Cost + Salt + Hash


password: Welkom123
salt: 2jh4kjaas#dkjtg
cost: 2

Bijvoorbeeld:
sha512$2$2jh4kjaas#dkjtg$A98BBB147B52DDFB1668A2...
A98BBB147B52DDFB1668A2FDF1E62C5C8FC47E251F7B93D86274EE926FBB36EE9FA2F85CF7477E7DD355A34FE538AD90BFB293AF92E84F8CFAF8FB56CB96C065

Slide 28 - Diapositive

Cet élément n'a pas d'instructions

Hashing juist implementeren
PHP: password_hash en password_verify
C#: build it yourself

Slide 29 - Diapositive

Cet élément n'a pas d'instructions

SecureHasher.cs
Om een wachtwoord te hashen:
var password = "Welkom123";
var hash = SecureHasher.Hash(password);

Bij het registreren gebruik je SecureHasher.Hash om het wachtwoord van de gebruiker te hashen. Sla die hash op in de database

Slide 30 - Diapositive

Cet élément n'a pas d'instructions

SecureHasher.cs
Om een wachtwoord te controleren:
var username = usernameTextBox.Text;
var password = passwordTextBox.Text;
var user = db.User.First(u => u.username == username);

if ( SecureHasher.Verify(password, user.HashedPassword) )
   // log in
}}

Bij het inloggen gebruik je SecureHasher.Verify om de hash te controleren met het ingevoerde wachtwoord.

Slide 31 - Diapositive

Cet élément n'a pas d'instructions