webForumDet fria alternativet

Kryptering med sha1 + salt?!?

ASPur ASP

15 svar · 906 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Behöver hjälp med detta. Hur funkar det ? Hur man skriver när man sparar till databasen. Hur man gör gör att ex logga in på en sida med sitt lösenord m.m

Hittar bara sha1 med php eller asp.net när jag söker. Funkar det inte med asp?

Medlem sedan juni 20019 519 inlägg
#2

SHA1 och MD5 finns inte som standard till ASP. Det finns http://rossm.net/Electronics/Computers/Software/ASP/#MD5 för md5 en funktion som bygger om strängar till md5. Och visst går det att använda SHA1 (om du hittar det) och MD5 för att logga in en användare (md5 exempel):

Du sparar ner lösenordet i databas med md5 så du har md5 texten i din databas(ordet test blir : 098f6bcd4621d373cade4e832627b4f6 och det är den datan vi har i databasen). Sen när du ska se att användaren har angett rätt lösenord kör du (sql):

SELECT * FROM Users Where username = '" & username & "' and password = '" & md5(Request.Form("password") & "'"
Medlem sedan juni 20008 205 inlägg
#3

En del databaser har inbyggda hashfunktioner, MySQL är ett exempel.

Beträffande salt är det en slumpmässig sträng av godtyckliga tecken som du hakar ihop med resten av indatan till hashen (dvs lösenordet) för att försvåra ordboksattacker, där man jämför en hash mot förgenererade hashar av sannolika lösningar. Saltet måste alltså sparas, och helst har du olika salt för alla lösenord. Du slumpar då fram saltet när användaren skapas, och sen rimligen varje gång användaren byter lösenord.

Ett exempel med saltad SHA1 i MySQL skulle kunna vara:

select * from users u where u.password_sha1 = SHA1(CONCAT('lösenord', u.salt))

... där det hashade lösenordet ligger i users.password_sha1 och saltet finns i users.salt.

Medlem sedan dec. 20011 860 inlägg
#4

Tack för tipsen. Jag hoppas det hjälper mig när jag ska kika vidare på detta senare idag.

Medlem sedan dec. 20011 860 inlägg
#5

Men hur sparar jag ner eller uppdaterar med detta?

nåt sånt här? Men funkar inge bra:

strSalt = getSalt(15)
strPwd  = "mittlösenord"

Conn.Execute("UPDATE tbl SET losen=SHA1(CONCAT(strPwd,strSalt)),sha1='" & strSalt & "' WHERE userID= 1")

Tänkte använda denna slumpgeneratorn för saltet.

Function getSalt(ByVal intLength)
    If intLength < 0 Then intLength = 8
    Dim strChars, i, strPass, intRnd
    strChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!¤%?}][{$£@½§s"

    For i = 1 To intLength
       Randomize
       intRnd = CInt(Rnd() * (Len(strChars)-1)) + 1
       strPass = strPass & Mid(strChars, intRnd, 1)
    Next

    getSalt = strPass
End Function
Medlem sedan juni 20019 519 inlägg
#6

salt delen skapas väl första gången användaren skapas, sen kommer den väl alltid vara i databasen? Eller?

Medlem sedan dec. 20011 860 inlägg
#7

Jag la till lite text i mitt förra inlägg. Några frågor där..

Medlem sedan juni 20019 519 inlägg
#8

Salt delen blir väl omöjlig att kontrollera om du slumpar den varje gång? Skapar du inte en slumpad Salt första gången användaren skapas?

Medlem sedan dec. 20011 860 inlägg
#9

Den ska skapa en slumpar salt då. Sen om man vill uppdatera/ändra sitt lösenord ska den oxå slumpa nytt. Eller är det dumt?

Sen om man glömt sitt lösen och vill ha nytt lösen ska ett nytt slumpas.

Är det dumt att göra så?

Medlem sedan juni 20019 519 inlägg
#10

Du kan ju göra det:

Conn.Execute("UPDATE tbl SET losen=SHA1(CONCAT(strPwd,'" & strSalt & "')),sha1='" & strSalt & "' WHERE userID= 1")
Medlem sedan dec. 20011 860 inlägg
#11

Jag får kanske testa mig fram. Bara jag får det att fungera.

Jag återkommer om jag får problem. Tackar så mycket för hjälpen.

Medlem sedan mars 20041 505 inlägg
#12

Alltså vad är meningen med att salta om man ändå sparar saltet i klartext? :P

Medlem sedan juni 20019 519 inlägg
#13

Vad jag har fått uppfattning över "saltet" skall inte det vara specifict från projektet ? Som ingen kommer åt? Eller ska den vara unik per användare?

Medlem sedan dec. 20011 860 inlägg
#14

Vad är bäst att ha? Ska jag ha samma salt för alla som ligger kanske i en specifik extern fil? Hur tycker nu?

Medlem sedan dec. 20051 420 inlägg
#15

voigtann1 skrev:

Vad jag har fått uppfattning över "saltet" skall inte det vara specifict från projektet ? Som ingen kommer åt? Eller ska den vara unik per användare?

Ett unikt per användare ska du ha för att få maximal effekt mot regnbågsattacker.

En annan bra grej är att ha ett statiskt extra salt i koden, ifall någon skulle komma in i databasen och sno hash+salt.

Troxy skrev:

Alltså vad är meningen med att salta om man ändå sparar saltet i klartext? :P

Poängen är att en angripare inte kan jämföra färdiga hashvärden mot hasharna i databasen. Utan måste generera nya värden med salten. Det tar tid.

En angripare har en lista med färdiga hashvärden för vanliga lösenord, tex "power". Med ett salt så måste han skapa nya värden och jämföra dom nya värdena med dina hashar. Med salt för varje användare så måste angriparen skapa nya hashvärden för varje användare. Med ett extra salt i koden (som angriparen inte vet om) så gör han allt förjäves. :)

Medlem sedan dec. 20011 860 inlägg
#16

Okej, då sätter jag även en fast sådan då. Tack för hjälpen.

136 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)