Steffen svar täcker detta perfekt, men jag ville bara lägga till några fler detaljer.
Allt som ger en matchning är vanligtvis bra
Som säger han, du bryr dig vanligtvis inte om att hitta det verkliga lösenordet, för många applikationer kommer gärna att autentisera dig med alla strängar som händer med hash till hashvärdet som lagras i databasen. Detta gäller oftast för webbapplikationer, men kan vara mindre ofta i andra sammanhang. Det betyder att om du utför en brute force-sökning och hittar något med samma hash kan du logga in på kontot även om det inte är samma lösenord. Detta, som antyds i frågan, är karaktären av hashing och är ett direkt resultat av duvahålsprincipen.
Tills du behöver det faktiska lösenordet
Det kan dock finnas vissa fall där du vill hitta det ursprungliga lösenordet. Detta skulle vara fallet om till exempel en hackare stal ett användarnamn / lösenord från en värdelös tjänst och ville försöka logga in som användare på en mer värdefull tjänst (Facebook, banker, etc ...). Eftersom människor ofta använder samma lösenord överallt, vill du i det här fallet verkligen ha det ursprungliga lösenordet - inte bara något som hasar till samma värde för en viss hashingalgoritm (trots allt kan olika tjänster använda olika hashingmetoder, och de flesta också använd kryptografiska salter - h / t @Taemyr).
Men skillnaden spelar ingen roll
Lyckligtvis (för vår angripare), detta spelar ingen roll. Anledningen är att en uttömmande brute force faktiskt är omöjlig. Istället kommer en hackare att prova saker som sannolikt kan vara lösenord (ordlistor, vanliga lösenord, etc ...). Föreställ dig som ett motexempel trots att det är omöjligt att du har en hash från en webbtjänst och lyckas utföra en brute force-sökning på alla möjliga 256-bitars ASCII-strängar. Du hittar tre ingångar som har samma värde som användarens lösenordshash:
- BD3EDF42F6D3AF2DAAE93313EB534
- 7AF7B8B8F84443872C48EC372DBD1
- lösenord
Vilket skulle du gissa är det verkliga lösenordet? Svaret är tydligt # 3. Jag menar, det finns tekniskt en chans att användaren precis råkade välja ett extremt starkt lösenord (dvs. BD3EDF42F6D3AF2DAAE93313EB534 ) som just hände hash till samma värde som lösenord , men oddsen för det är faktiskt noll.
I denna mening har angriparen en bra fördel. De föredrar att hitta det verkliga lösenordet, och det visar sig att eftersom människor är dåliga att välja slumpmässiga lösenord, är det bästa sättet att göra det inte genom att kontrollera allt hur som helst - det är genom att kontrollera saker som ser ut som lösenord. Detta gör brute-tvångssökning mycket, mycket, mycket, mycket effektivare och ger också angriparen ett mycket mer användbart resultat (det faktiska lösenordet, snarare än någon slumpmässig sträng som råkar ha samma hash).