Les 11: Authenticatie & Autorisatie

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

In deze les zitten 31 slides, met interactieve quizzen en tekstslides.

Onderdelen in deze les

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

Slide 1 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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

Slide 3 - Tekstslide

Deze slide heeft geen instructies

Hoofdstuk 7:
Authenticatie & Autorisatie

Slide 4 - Tekstslide

Deze slide heeft geen instructies

Beschrijf in jouw eigen woorden:
Authenticatie

Slide 5 - Open vraag

Deze slide heeft geen instructies

Beschrijf in jouw eigen woorden:
Authorsatie

Slide 6 - Open vraag

Deze slide heeft geen instructies

Slide 7 - Tekstslide

Deze slide heeft geen instructies

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

Slide 8 - Woordweb

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Quizvraag

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 - Quizvraag

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

Slide 14 - Tekstslide

Deze slide heeft geen instructies

Gebruikersgegevens veilig opslaan:
Wachtwoorden

Slide 15 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

Wat weet je over het veilig opslaan van wachtwoorden?

Slide 17 - Woordweb

Deze slide heeft geen instructies

Wachtwoorden veilig opslaan:
Hashing

Slide 18 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies










1E05EB80FBFF2A1AC89136A19E4D190F67DA6704E3B8192B4C74082284915D4D24634605BB881DAB1EAD4BF50EDF609F237DAC8CB6ECF6D0F77B064C5B463C0D

Slide 21 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

Hashing
Is niet voldoende beveiliging zonder verdere maatregelen

Slide 24 - Tekstslide

Deze slide heeft geen instructies

Hashes kunnen 'gekraakt' worden met Rainbow Tables



Grote database met vooraf
gegenereerde wachtwoorden

Slide 25 - Tekstslide

Deze slide heeft geen instructies

Hash + Salt + Cost




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

A98BBB147B52DDFB1668A2FDF1E62C5C8FC47E251F7B93D86274EE926FBB36EE9FA2F85CF7477E7DD355A34FE538AD90BFB293AF92E84F8CFAF8FB56CB96C065

Slide 26 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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

Slide 29 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies

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 - Tekstslide

Deze slide heeft geen instructies