salt

i kryptering – ett sätt att göra det svårare för angripare att knäcka lösenord. – Ett salt är en slumpmässig sifferserie som den mottagande tjänsten lägger till ett lösenord innan den gör ett kondensat (en hash) på lösenordet och sparar det. Medan det brukar vara användaren som väljer lösenord är salt något som slumpas fram av inloggningssystemet. Det lagras hos mottagaren och är okänt för användaren. Tjänsten lägger vid inloggning saltet till det lösenord som användaren har angett, räknar fram ett kondensat och jämför det sedan med det som står i databasen över saltade lösenordskondensat. Det ska vara exakt likadant.

  • – Användaren har ett vanligt lösenord som hon själv måste komma ihåg;
  • – Tjänsten som kräver inloggning har för varje användare ett unikt salt (en sifferserie) som användaren inte känner till, och som lagras i en separat databas;
  • – Tjänsten har också en databas som för varje användare innehåller ett kondensat av användarens lösenord kombinerat med saltet. Tjänsten har däremot inga sparade lösenord i klartext.

Bakgrund: Lösenord bör lagras som kondensat, inte i klartext, hos tjänster som kräver inloggning. Detta för att undvika att lösenord i klartext kommer på avvägar vid ett eventuellt intrång. (En lista över kondenserade lösenord är oanvändbar för inloggning.) Om salt inte används skickar användaren vid inloggning sitt lösenord i klartext till tjänsten, som då gör ett kondensat på lösenordet och jämför med kondensatet av användarens lösenord i databasen. Redan detta har sina risker: till exempel kan två användare ha samma lösenord, och då blir det också samma kondensat, vilket en angripare skulle kunna upptäcka och dra slutsatser av. Värre är att algoritmer för att göra kondensat inte är hemliga. Det betyder att en angripare kan göra en ordlisteattack eller uttömmande attack där hon kör långa listor med tänkbara lösenord genom kondensatalgoritmen. Om angriparen har kommit över databasen över lösenordskondensat kan hon sedan jämföra kondensat från sin körning med kondensat i listan. Om två är identiska vet angriparen att hon har hittat ett lösenord. Om lösenordet ABC ger kondensatet XYZ, och kondensatet XYZ återfinns i den stulna databasen vet angriparen att det motsvarar lösenordet ABC.  Det är detta som man förhindrar med salt. – Saltning: När en användare loggar in lägger tjänsten användarens salt (som alltså lagras hos tjänsten) till lösenordet som användaren anger. I stället för lösenordet 62mTY2P3a gör tjänsten alltså ett kondensat på, till exempel 62mTY2P3a88935618 där 88935618 är saltet (i själva verket brukar salt vara mycket längre – 32 tecken rekommenderas). Resultatet blir att kondensatet blir helt annorlunda än om man hade gjort ett kondensat enbart på lösenordet. Och det räcker med att man ändrar en siffra i saltet för att det ska bli ett helt annat kondensat. Resultatet av beräkningen jämförs vid inloggning med databasen över lösenord, där ett kondensat av lösenordet med salt är lagrat. Om det är samma har användaren angett rätt lösenord.  – Kontentan är att saltade lösenord blir resurskrävande för en angripare att knäcka, eftersom man inte bara måste pröva långa listor med tänkbara lösenord, utan också pröva varje tänkbart lösenord tillsammans med alla tänkbara salt. – Det heter salt både på svenska och engelska. – Läs också om peppar och nonce.

[kryptering] [ändrad 5 juli 2022]