===== Opbevaring af passwords i en database ===== Når man laver et login‑system, må man **aldrig gemme passwords i klar tekst** i databasen. Hvis databasen bliver stjålet, vil alle brugeres passwords ellers være synlige. I stedet bruger man disse principper: * Passwords **hashes** * Hvert password får et **salt** * Kun **hash + salt** gemmes i databasen ---- ===== Hvad er hashing? ===== En **hash** er resultatet af en **énvejskryptering**: * Man kan lave en hash ud fra et password * Man kan **ikke** lave passwordet ud fra hashen Eksempel: Password: "hemmeligt123" Hash: "A94A8FE5CCB19BA61C4C..." Når brugeren logger ind: * Brugeren indtaster sit password * Passwordet hashes igen * Hashen sammenlignes med den, der ligger i databasen ---- ===== Hvad er "salt"? ===== Et **salt** er en **tilfældig tekst**, som lægges sammen med passwordet **før hashing**. Eksempel: Password: hemmeligt123 Salt: X7f@9Q! Resultat: hemmeligt123X7f@9Q! Det samlede resultat hashes derefter. ---- ===== Hvorfor bruger man salt? ===== Salt forhindrer to vigtige angreb: * **Ens passwords → samme hash** * **Rainbow table‑angreb** (færdige lister med hashes) Uden salt: "1234" → samme hash for alle brugere Med salt: "1234" + saltA → hash1 "1234" + saltB → hash2 Selv om to brugere har samme password, får de **forskellige hashes**. ---- ===== Hvordan gemmes det i MariaDB? ===== I databasen gemmer man typisk: * `PasswordHash` * `Salt` Eksempel på tabel: id | username | password_hash | salt Man gemmer **aldrig selve passwordet**. ---- ===== Kort C#‑tanke (uden kode) ===== I C# gør man typisk: * Generér et tilfældigt salt * Kombinér password + salt * Hash resultatet (fx med SHA‑256 eller bedre) * Gem hash og salt i databasen Ved login: * Hent salt fra databasen * Hash det indtastede password + salt * Sammenlign hashes ***