Just nu i M3-nätverket
Gå till innehåll
byllan1337

LÖST Ska använda salt för första gången och vet inte vad det är för något

Rekommendera Poster

Hej. Jag har googlat och kollat på youtube tutorials men jag förstår fortfarande inte vad salt gör eftersom detta är inte enkelt och salt är ju något man har på maten och jag vet inte vad det betyder i programmeringsvärlden. Men iallafall så använder jag password_hash när jag skapar userpassword.

 

Är det någon som har en bra förklaring på detta? Har förstått att man använder crypt(); eller sha1 eller något annat vad som helst till salt och sen ska man slå ihop salt och password_hash?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack, läst de om och om igen nu 2 dagar och ägnat runt 3 timmar åt varje artikel där. Jag förstår ändå ingenting av det. Jag förstår ju att man lägger in $salt i password_hash att man antingen lägger in det i början eller slutet.

 

1. Men det jag inte förstår är när man skickar det till databasen. Skickar man då endast password_hash till kolum password i databasen och sen när man ska skicka salt då skickar man salt + password tillsammans till salt kolum i databasen?

 

2. Sen detta med inloggningen. Jag använder ju mig av password_hash och det blir ju password_verify vid inloggning, då kollar den väl bara om password kolum från databasen stämmer? För att blanda in salt kolum blir ju bara krångligt tycker många utvecklare eftersom man själv vet att password är den hashade key som kommer funka för om man tar password_verify på salt kolum då sitter ju password_hash och salt ihop och den kommer inte låta usern logga in eftersom salt ger extra nummer/tecken.

 

3. Detta med uppdelningen som jag tog upp i 1an att password_hash skickas till password kolum i databasen och salt + password_hash sträng skickas till salt i password. Ofta inte hackern har läst tutorials och förstår att han inte behöver bry sig om salt eftersom den är saltat utan kan gå på password kolumen direkt istället för han vet att den inte är saltad!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Två saker som är viktiga att komma ihåg:

 

1. Saltet är inte hemligt.

 

2. Lösenordet är hemligt.

 

Eftersom lösenordet är hemligt så vill man inte spara det i databasen. I stället så hashar man lösenordet (kör det genom md5-funktionen exempelvis) och sparar bara hashen.

 

När en användare ska logga in så hashar man det som användaren anger i lösenordsrutan och jämför det mot hashen i databasen. Är det samma hash så vet man att användaren skrev rätt lösenord, trots att man inte har sparat lösenordet!

 

Den här metoden har dock några nackdelar, och det är där salt kommer in...

 

Om man nu som hacker tittar i databasen så kan man se att tio användare har samma hash. Vad betyder det? Jo, att de tio användarna har valt samma lösenord. Det kan ju inte vara ett speciellt svårgissat lösenord då, när de har råkat välja samma. Kanske london14, qwerty, 12345678, november14 eller liknande.

 

Man kan ju till och med göra så att man i förväg hashar alla vanliga lösenord och så kan man kolla vilka användare som har dessa hashar. Det tar inte ens en sekund och man har knäckt kanske 70% av alla lösenord.

 

Vad är då salt? Jo, det är man lägger till något till lösenordet innan man hashar det. Det kan vara vad som helst, men det viktiga är att det är olika för varje användare. För i och med att det är olika kan man inte längre se på hasharna om flera användare har samma lösenord.

 

Säg att vi har tre användare: Kalle, Maria och Agnes. Alla har lösenordet london14. Utan salt så kommer alla tre att ha hashen:

9d84a334bdc967300b974d2ea3dfaae9

 

Som hacker har vi redan räknat ut hashen för london14 i förväg, eftersom det är så vanligt. Att låta datorn kolla vilka användare som har hashen 9d84a334bdc967300b974d2ea3dfaae9 är en väldigt enkel sak som går mycket snabbt.

 

Men om vi nu för enkelhetens skull använder deras användarnamn som salt. Då kommer alla att få olika hashar:

9871301a1362ceb866d01164d7c70bad
c55da83aff76e4ab5149d94921825a8d
a8ab0902f119f49ebe7ca7a391b7a1e2
 

Vi kan inte längre se att det är samma lösenord. Och vi kan inte direkt se att det är london14 heller. För att testa om det är london14 måste hackern räkna fram en ny hash för varje användare. För att sedan testa vilka som har qwerty måste det också räknas fram en ny hash för varje användare. Det blir en väldig massa beräkningar, som tar en väldig massa tid.

 

Slutligen, dina frågor:

 

1. Endast password hash till passwordkolumnen. Endast salt till saltkolumnen. Observera att password hash är md5(password + salt).

 

2. I MySQL skriver du SELECT * FROM users WHERE password = MD5(CONCAT('password', salt)) AND username = 'username' där då 'username' är det användarnamn användaren matat in och 'password' är det lösenord användaren har matat in. Observera att du behöver kontrollera så det inte finns apostrofer i 'username' och 'password'.

 

3. Naturligtvis ska saltet in när lösenordet hashas, annars är det ju ingen mening med det.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Bra inlägg från Thomas.

Saltet kan vara en kombo av statisk nyckel (som sparas som en sträng i PHP-koden) och information från användaren, så försök vara kreativ.

 

Om du använder något från användaren ska det vara information som inte kan användas, t ex användar-ID i databasen, och kanske även användarnamn, så länge som detta inte kan ändras. i så fall måste användaren ange sitt lösenord för verifikation och nytt lösenhash sparas i databasen även ifall det för användaren är samma.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Två saker som är viktiga att komma ihåg:

 

1. Saltet är inte hemligt.

 

2. Lösenordet är hemligt.

 

Eftersom lösenordet är hemligt så vill man inte spara det i databasen. I stället så hashar man lösenordet (kör det genom md5-funktionen exempelvis) och sparar bara hashen.

 

När en användare ska logga in så hashar man det som användaren anger i lösenordsrutan och jämför det mot hashen i databasen. Är det samma hash så vet man att användaren skrev rätt lösenord, trots att man inte har sparat lösenordet!

 

Den här metoden har dock några nackdelar, och det är där salt kommer in...

 

Om man nu som hacker tittar i databasen så kan man se att tio användare har samma hash. Vad betyder det? Jo, att de tio användarna har valt samma lösenord. Det kan ju inte vara ett speciellt svårgissat lösenord då, när de har råkat välja samma. Kanske london14, qwerty, 12345678, november14 eller liknande.

 

Man kan ju till och med göra så att man i förväg hashar alla vanliga lösenord och så kan man kolla vilka användare som har dessa hashar. Det tar inte ens en sekund och man har knäckt kanske 70% av alla lösenord.

 

Vad är då salt? Jo, det är man lägger till något till lösenordet innan man hashar det. Det kan vara vad som helst, men det viktiga är att det är olika för varje användare. För i och med att det är olika kan man inte längre se på hasharna om flera användare har samma lösenord.

 

Säg att vi har tre användare: Kalle, Maria och Agnes. Alla har lösenordet london14. Utan salt så kommer alla tre att ha hashen:

9d84a334bdc967300b974d2ea3dfaae9

 

Som hacker har vi redan räknat ut hashen för london14 i förväg, eftersom det är så vanligt. Att låta datorn kolla vilka användare som har hashen 9d84a334bdc967300b974d2ea3dfaae9 är en väldigt enkel sak som går mycket snabbt.

 

Men om vi nu för enkelhetens skull använder deras användarnamn som salt. Då kommer alla att få olika hashar:

9871301a1362ceb866d01164d7c70bad

c55da83aff76e4ab5149d94921825a8d

a8ab0902f119f49ebe7ca7a391b7a1e2

 

Vi kan inte längre se att det är samma lösenord. Och vi kan inte direkt se att det är london14 heller. För att testa om det är london14 måste hackern räkna fram en ny hash för varje användare. För att sedan testa vilka som har qwerty måste det också räknas fram en ny hash för varje användare. Det blir en väldig massa beräkningar, som tar en väldig massa tid.

 

Slutligen, dina frågor:

 

1. Endast password hash till passwordkolumnen. Endast salt till saltkolumnen. Observera att password hash är md5(password + salt).

 

2. I MySQL skriver du SELECT * FROM users WHERE password = MD5(CONCAT('password', salt)) AND username = 'username' där då 'username' är det användarnamn användaren matat in och 'password' är det lösenord användaren har matat in. Observera att du behöver kontrollera så det inte finns apostrofer i 'username' och 'password'.

 

3. Naturligtvis ska saltet in när lösenordet hashas, annars är det ju ingen mening med det.

Tack där! THOMAS!

 

Bra inlägg från Thomas.

Saltet kan vara en kombo av statisk nyckel (som sparas som en sträng i PHP-koden) och information från användaren, så försök vara kreativ.

 

Om du använder något från användaren ska det vara information som inte kan användas, t ex användar-ID i databasen, och kanske även användarnamn, så länge som detta inte kan ändras. i så fall måste användaren ange sitt lösenord för verifikation och nytt lösenhash sparas i databasen även ifall det för användaren är samma.

Håller med. Tack.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...