Fråga:
Spelar det någon roll om en brute force-sökning efter ett lösenord returnerar en kollision och inte lösenordet?
MikeSchem
2020-03-13 01:37:53 UTC
view on stackexchange narkive permalink

Antag följande mycket grundläggande hashingalgoritm.

h (k) = k mod 17

Låt oss säga att vi skapar ett lösenord 12345 för en webbplats som använder denna mycket grundläggande hashingalgoritm. Det skulle ge hash på 3.

Säg att en brute force angripare kommer förbi och börjar gissa siffror som börjar på 1, de skulle bara behöva nå 3 innan de fick en hashkollision och självklart är 3 inte originalet lösenord.

Är problemet att lösenordets hashutrymme (0-16) är mycket mindre än det tillåtna lösenordets utrymme, eller finns det något annat jag har utsikt över?

Jag har uppdaterat din titel i ett försök att bättre återspegla din fråga i slutet.Om du inte gillar min ändring kan du återställa den eller bara redigera den igen.
Som en anmärkning: Ja, orsaken till kollisioner är att hashing-utrymmet är mindre än inmatningsutrymmet.Detta gäller för alla hashalgoritmer och kallas [Pigeonhole_principle] (https://en.wikipedia.org/wiki/Pigeonhole_principle).
Fem svar:
Conor Mancone
2020-03-13 02:11:52 UTC
view on stackexchange narkive permalink

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:

  1. BD3EDF42F6D3AF2DAAE93313EB534
  2. 7AF7B8B8F84443872C48EC372DBD1
  3. 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).

Även den andra sidan som använder samma algoritm är otillräcklig.De måste använda samma algoritm och ha samma salt.
@Taemyr: Exakt.I själva verket är det hela meningen med att använda ett salt - för att se till att identiska lösenord inte resulterar i samma hash, för det skulle vara dåligt, som visas här.Jag redigerade för att nämna det.
Under vissa omständigheter verkar det bara hjälpa dig att ha hash.Till exempel kryptering av zip-kryptering och MS Office-dokument krypterar lösenordet till en hash, kontrollerar hashen när du försöker dekryptera, och om haschen matchar använder du det ursprungliga lösenordet för att göra den faktiska dekrypteringen.Det finns ingen chans att "lösenord" dekrypterar din fil korrekt om ditt lösenord var "BD3EDF42F6D3AF2DAAE93313EB534", även om båda har samma hash.
Jag håller inte med "en uttömmande brutal kraft är faktiskt omöjlig", medan för lekmannen kanske;men för något med resurser och tid är det inte.Det är det som hjälper lönsamheten för superdatorer och botnet-gårdar.På många sätt liknar det hur krytomining fungerar.
För mitt valda exempel (en 256-bitars sträng) är det faktiskt omöjligt att utföra en uttömmande brute force-sökning: https://en.m.wikipedia.org/wiki/Brute-force_attack#Theoretical_limits
@vol7ron whoops, glömde att tagga dig i mitt svar.Se även här: https://www.reddit.com/r/theydidthemath/comments/1x50xl/time_and_energy_required_to_bruteforce_a_aes256/
@ConorMancone tack för uppföljningen jag tar en titt.
Jag kan ge ett motexempel.Antag att algoritmen för lösenordshash hade egenskapen att om du kunde prova alla lösenord med åtta tecken, skulle du förvänta dig att hitta 1-2 träffar, men webbplatsens minimum är tio tecken.De korta matcherna är felaktiga.
@vol7ron Även om du använde all datorkraft på jorden i tusentals år skulle du fortfarande inte kunna förstärka något som AES-kryptering.Observera dock att i morgon kan någon hitta en attack som minskar komplexiteten från säg 2 ^ 256 till 2 ^ 64 och * att * skulle förändras mycket.För närvarande kan vi inte utesluta att något sådant finns.Vi vet att kvantberäkning kan minska komplexiteten med kvadratroten (vilket skulle göra AES-128 osäker eftersom det "bara" kräver 2 ^ 64 beräkningar, men AES-256 skulle fortfarande vara tillräckligt säkert).
@Bakuriu Du har antagit att AES används, vilket jag aldrig sett någonstans ovan.Även med tanke på AES-128, som fortfarande är mycket säker, sägs det att det skulle ta en miljard miljarder (kvintillioner) år.Det finns ingen invändning mot teoretiska gränser.Vad som inte utforskas är realistiska gränser.Informationskällan och tidsperioden kan vara mycket vägledande för de byte som sekvenserades.Om du kan begränsa dina alternativ till dessa byte minskar det komplexiteten när du tvingar brute, varför siffror och specialtecken nu krävs.Hur mycket tid kan det raka sig?
@vol7ron Svaret talar uttryckligen om _uttömmande_ brute force.Att begränsa sig till troliga kombinationer är precis vad svaret säger _händer_, men per definition är det inte _uttömmande_.Hela poängen är att godtyckliga sekvenser av byte som råkar kollidera med det riktiga lösenordet antagligen aldrig kommer att hittas, eftersom angriparen bara skulle försöka de bytesekvenserna om de försökte _ alla_ bytesekvenser, inte riktade mot de som är mest troliga.
@IMSoP Jag har inget problem med svaret lika mycket, men jag måste fokusera OP, som inte uttrycker en åsikt om svårighetsgrad eller metod för algoritm / schema.”Uttömmande” är en relativ term och beror i detta fall verkligen på metodik.Jag tror att vi är överens om det är AES eller tvåfisk, eller till och med en RSA- eller SHA-envägs hashing;brute-force är utmanande och osannolikt med dagens teknik;dock bör vi också överväga att det finns teknik som finns som inte är allmänt tillgänglig, vars gränser och begränsningar är osäkra.
Steffen Ullrich
2020-03-13 01:46:28 UTC
view on stackexchange narkive permalink

Huvudmålet med brute forcing är inte att få det ursprungliga lösenordet utan att få ett lösenord som fungerar. Således spelar det ingen roll om det hittade lösenordet inte var det ursprungliga så länge det fungerar.

Det är dock mycket troligt att med effektiv och intelligent brute-tvingning baserad på en ordlista med vanliga lösenord och typiska modifieringar kommer det resulterande lösenordet att vara det verkliga. Detta beror helt enkelt på att de flesta användare inte använder långa slumpmässiga lösenord utan vanliga lösenord med typiska modifieringar och därmed kommer de riktiga lösenorden att hittas först när de gör intelligent brute forcing.

Fax
2020-03-15 00:07:38 UTC
view on stackexchange narkive permalink

Spelar det någon roll om en brute force-sökning efter ett lösenord returnerar en kollision och inte lösenordet?

Det finns andra svar som hanterar denna fråga ganska bra, så jag ska utforska en annan vinkel: Det spelar ingen roll, eftersom sökningar med brute-force sannolikt aldrig kommer att hitta en kollision istället för det ursprungliga lösenordet.

Antaganden:

  • Lösenordet är kortare än den maximala längden med ett visst antal tecken.
  • Brute-force-sökningen försöker varje tecken, med början med kortast möjliga lösenord.
  • Implementeringen har en mycket låg sannolikhet för kollisioner. Detta gäller även för föråldrade algoritmer som MD5, men inte för den algoritm du angav.
  • Kollisioner är enhetligt fördelade.

Låt oss säga att vårt lösenord är "lösenord", som har åtta tecken. Antalet alfanumeriska lösenord mellan ett och åtta tecken är cirka 2.219e + 14.

Låt oss säga att den maximala lösenordslängden är tio. Mellan nio och tio tecken finns det 8.528e + 17 lösenord, eller cirka 3800 gånger så många som mellan en och åtta. Även om vi antar fem kollisioner är sannolikheten att alla fem är längre än vårt "lösenord" cirka 99,9%.

Antalet jag har använt för max lösenordslängd är (förhoppningsvis) mycket mindre än vad som är används vanligtvis och antalet kollisioner är kraftigt överskattat. I praktiken är det inte att hitta en kollision som är kortare än det faktiska lösenordet.

gnasher729
2020-03-15 15:35:19 UTC
view on stackexchange narkive permalink

Alla hashingalgoritmer som används i praktiken bör ha ett nyckelutrymme som är omöjligt att göra kraft. Å andra sidan är uppsättningen av faktiska lösenord mycket mer begränsad, så angripare kommer inte att söka i alla möjliga lösenord, utan bara de som används av riktiga användare.

Nu om du har ett bra lösenord och en angripare gör en brute force-attack, är det inte omöjligt att ett annat lösenord skulle ha samma hash. Om nyckelutrymmet för hashen bara var 64 bitar, kan du förvänta dig att några har samma hashkod bland några miljarder lösenord. Så det är inte omöjligt att en angripare hittar ett annat lösenord med samma hash (efter att ha kontrollerat 2 ^ 64 lösenord i genomsnitt). Båda skulle arbeta för angriparen att komma till tjänsten. I verkligheten bör hash-algoritmen ha ett mycket större nyckelutrymme och ingen kommer någonsin hitta ett annat lösenord med samma hash.

Att hitta det alternativa lösenordet gör att du kan logga in på en tjänst. Men de flesta angripare vill uttryckligen ha lösenordet eftersom de inte är intresserade av någon obetydlig tjänst men hoppas att du kommer att använda samma lösenord med andra tjänster. Så det alternativa lösenordet kommer att vara helt värdelöst för dem om inte en annan tjänst använder exakt samma hashingalgoritm och exakt samma salt.

vol7ron
2020-03-13 21:35:58 UTC
view on stackexchange narkive permalink

Spelar det någon roll om en brute force-sökning efter ett lösenord returnerar en kollision och inte lösenordet?

Om ett lösenord är den enda mekanismen för åtkomst till en resurs är det ofta spelar ingen roll om det är exakt eller en kollision. Om du anger "hund" eller "katt" och din hashingalgoritm var string.length , kommer antingen att ge dig åtkomst.

Även om detta ofta är fallet är det också en fråga om programmets / tjänstens implementeringsdetaljer. Till exempel kan en webbplats / tjänst utföra giltighetskontroller av äkthet och körning, som bedömer lösenordet och var lösenordet kommer ifrån. Så även om "hund" och "katt" skulle kunna ge åtkomst, om mellanhanden har en regel att lösenord inte kan börja med "d" så är den kollisionen ute.

Dessutom kan vissa säkrare tjänster ibland samla in metadata (även hashad) på det medföljande lösenordet (t.ex. längd, antal byte osv.) och inkonsekvenser i att metadata ibland används för att flagga, neka åtkomst eller återställa lösenord till konton.


OP-exempel

  h (3) = 3 mod 17 = 3  

Är problemet att lösenordets hashutrymme (0-16 ) är mycket mindre än utrymmet för det tillåtna lösenordet, eller finns det något annat jag har utsikt över?

För att ta itu med din fråga om problemet; det finns många problem med exemplet; inklusive enkelhet och för många potentiella kollisioner. Utan regler för verkställighet handlar problemet inte om ingångsfönstrets storlek. Problemet är att hashingalgoritmen leder till för många kollisioner; 3 plus multiplar av 17 ( {3,20,37,54 ...} ) resulterar alla i 3.

Kollisionerna är det som är viktigt eftersom det är hashen som används för autentisering och verifiering; om brute force kan komma in i 20, 37 eller 54 ... och ändå komma åt kontot eller resursen, spelar det ursprungliga lösenordet ingen roll.

För att återgå till den ursprungliga frågan är det ofta så att allt som krävs är kollisionen. Faktum är att det här är ofta hur WiFi-intrång fungerar. Hashet hittas, vilket möjliggör anslutning till den lösenordsskyddade gatewayen.

Först användes hashingalgoritmen avsiktligt för att göra det enkelt att visa en kollision.För det andra tror jag inte att salter är riktigt relevanta.Salter är unika per användare.De hjälper vanligtvis till att undvika förberäknade attacker.Så det är både utanför räckvidden eftersom det här bara tar hänsyn till en användare och för att vi pratar om brute force, inte en förberäknad bifogning.
@MikeSchem tack.Jag anser att salter är relativa.När jag nu ser de två andra svaren för vad som har accepterats av samhället talar man faktiskt om en ordbok (en form av förberäkning) och den andra nämner salter.Strider vi alla efter din standard?Frågan var inte heller klar vad som attackerades, det handlade om brute force.Du kan tvinga dig in i ett e-postkonto, vilket din inmatning skulle gå genom en hashingalgoritm, eller så kan du tvinga dig in i den underliggande databasen
Jag tror att OP frågar om det finns en praktisk skillnad mellan att hitta det riktiga lösenordet och att hitta en kollision, som de andra svaren talar om.Detta svar handlar främst om sannolikheten för att hitta en kollision i första hand, vilket, som jag förstår frågan, är utom poängen.
@JoshEller ah, tack.Jag anser det inte utöver saken.Jag tror att kärnan i det som nämndes var `om brute force kan komma in i 20 eller 37 eller 54 ... och ändå komma åt kontot eller resursen, det ursprungliga lösenordet spelar ingen roll 'den praktiska skillnaden är ingen.Kanske kan jag göra det tydligare
@JoshEller Jag tog bort det mesta av kommentarerna och grävde mer i det du nämner som kärnan i frågan.Verkar det mer lämpligt?


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 4.0-licensen som det distribueras under.
Loading...