kort guide om lösenord hantering
Hej
Jag har egentligen ingen utbildning i programmering eller datasäkerhet men jag är väldigt intresserad. Om det står något du tycker är helt fel eller kan förbättra så skriv det gärna här både för andra och min egen skull.
Jag tänkte skriva hur jag på ett säkert sätt skulle "hasha"(måste finnas ett bättre ord...) ett lösenord. Jag har sätt många skräckexempel där folk spara lösenord i klar text eller använder enbart md5 så därför tänkte jag att någon kanske får ut något av denna "guide"
Först och främst använd aldrig md5 då den är väldigt snabb vilket resulterar i att någon som försöker brute-force:a kan de testa fler kombinationer snabbare. md5 är också svag för en så kallad collision attack vilket betyder att man hittar flera kombinationer som ger samma hash.
Några mycket säkrare hash-algoritmer är sha256, whirlpool eller sha512 jag rekommenderar whirlpool. Alla har sina för och nackdelar så jag kommer inte gå djupare i varför då det inte är vad guiden är tänkt att handla om.
Nästa steg är att skydda sig mot så kallade rainbow tables det gör man genom att salta lösenordet innan man kör det genom en hash algoritm. Att salta betyder att man lägger till en massa tecken i lösenordet. Saltet bör vara unikt för varje lösenord och ska vara random. För att göra saltet bör man inte använda en prng som rand i php eller random i c#. Istället ska man använda en csprng som RNGCryptoServiceProvider i c#. Saltet bör vara minst lika långt som hashen.
Saltade strängen kan man sedan spara ihop med hasen i databasen. Det finns ingen ide att försöka gömma den någonstans efter som att om någon får tag på hasen så kan han ändå få tag på saltet också eftersom båda skickas och måste sparas i databasen samtidigt. Att hårdkoda saltet funkar inte heller då varje lösenord måste ha ett unikt salt så det aldrig kan finnas flera hash i databasen som är samma även om användarna använder likadant lösenord.
Näst sista steget är att skydda sig mot brute-force attacker det kan man göra genom att köra hasen flera gånger och på så sätt måste även den som försöker brute-forc:a köra algoritmen flera för varje kombination vilket givetvis tar längre tid som användarna behöver för att byta lösenord vid en eventuell attack.
Sista steget är mycket enkelt men också viktigt. Tillåt INTE användarna har för enkelt lösenord. Minst 7 bokstäver och med minst en siffra/tecken
Kan lägga upp lite exempelkod om någon är intresserad.
EDIT: ändrade till minst 7 bokstäver och med minst en siffra/tecken