Dictionary attack ( English dictionary attack ) - en attack på säkerhetssystemet med metoden för fullständig uppräkning ( engelska brute-force ) av de avsedda lösenorden som används för autentisering , utförd genom att sekventiellt granska alla ord ( lösenord i deras rena form eller deras krypterade bilder) av en viss typ och längd från ordboken för att sedan hacka systemet och få tillgång till hemligstämplad information . [1] Denna händelse är i de flesta fall av negativ karaktär, i strid med moraliska och lagstiftande normer.
Ur sannolikhetsteoretisk synvinkel är valet av lösenord deterministiskt och logiskt. Lösenordet kan vara: födelsedatum, namn, objekt, en uppsättning siffror, en sekvens av bokstäver tätt placerade på tangentbordet. I det allmänna fallet är ovanstående sammanlänkade .
Resultatet av dessa antaganden är att förutbestämning av lösenordsval spelar en nyckelroll i valet av algoritmer som ordbokssökningsmetoden bygger på .
Det finns två typer av attacker:
Det är möjligt att beräkna ett lösenordsstyrkepoäng, särskilt för att bestämma andelen framgångsrika ordboksattacker . Sannolikhetspoängen för framgång kan definieras som förhållandet mellan antalet knäckta lösenord i en ordboksattack och det totala antalet försök.
Användningen av Internet Worm 1988 ger ett väldokumenterat fall av lösenordssprickning. [2] Masken försökte knäcka lösenord genom att arbeta med en serie ordböcker. Det första steget av attacken använde en uppsättning ord som innehöll användarnamn hämtade från lösenordsfilen i Unix-systemet. Om detta inte lyckades användes en intern ordbok med 432 vanliga jargongord på Internet. Om det andra steget inte lyckades användes en Unix -ordbok med 24474 ord. Masken letade också efter ett tomt lösenord. Attackerade webbplatser rapporterade att cirka 50 % av lösenorden lyckades knäckas med denna strategi.
Nästa steg var Daniel Kleins arbete . [3] För att ge sina resultat samlade han in krypterade Unix -systemlösenordsfiler . Denna samling innehöll cirka 15 000 olika par av användarnamn/lösenord ( inloggning/lösenord ) . Klein konstruerade en serie ordböcker och en uppsättning mekanismer för att möjliggöra permutationer. Ordboken han tillhandahöll bestod av cirka 60 000 artiklar. Detta ark innehöll namn, platser, fiktiva referenser, bibliska termer, uttryck från W. Shakespeares dikter , etc. Efter att ha tillämpat en permutationsstrategi (användning av versaler, uppenbara ersättningar, permutationer av siffror) fick han ett lösenordsutrymme på mer än 3,3 miljoner möjligheter. Att använda denna ordbok hjälpte Klein att knäcka 24,2 % av alla lösenord på vissa servrar.
1991-1992. Eugene Spafford( sv. Eugene Spafford ) lyckades bygga, baserat på statistik, en ordbok med vilken 20 % av lösenorden på utvalda servrar dukade under för att spricka. [fyra]
År 2000 genomförde ett team av forskare från University of Cambridge en studie där 195 hashade lösenord attackerades, varav 35 % lyckades knäckas. [5]
Forskare/projekt | Tid | Lösenord verifierade | Procentandel av fynd, [%] |
---|---|---|---|
Internetmask [2] | 1988 | tusentals | ~50 |
Kleins studie [3] | 1990 | 15 000 | 24.2 |
Spaffords studie[fyra] | 1992 | 13787 | 20.0 |
Forskare från University of Cambridge [5] | 2000 | 195 | 35,0 |
I de flesta lösenord finns det en fonetisk likhet med orden i naturligt (engelska) språk; Anledningen till detta är att det är lätt att komma ihåg denna typ av information om ett givet lösenord. Denna egenskap tas med i beräkningen i "Markov-filter" baserade på Markov-kedjan , som är en standardteknik inom naturlig språkbehandling. Förekomsten av icke-alfabetiska tecken i lösenordet kan tolkas som att en tillståndsmaskin tillämpas på en specifik uppsättning element.
Ett mänskligt genererat alfabetiskt lösenord är ojämnt fördelat i utrymmet av alfabetiska sekvenser. Detta tillstånd kan tas med i beräkningen med stor noggrannhet i "Markov-filter" av noll och första ordningen: [6]
Matematiskt,
nollordning av Markov-modellen:
första beställningen av Markov-modellen:
var är sannolikheten för distribution av en sekvens av tecken, är karaktären av denna sekvens, är frekvensen av ett enskilt tecken eller digram i texten.
För att eliminera osannolika strängar i ordboken används sannolikhetsdiskretisering - ett tvånivåsystem med en tröskel introduceras :
nollordning av Markov-modellen:
första beställningen av Markov-modellen:
Anmärkningar
För att skapa tillståndsmaskiner introduceras vissa begränsningar och antaganden i förhållande till det knäckta lösenordet:
Deterministiska finita automater är idealiska medel för uttryck med de föreslagna begränsningarna. [6]
Det första steget i att bygga en ordbok baserad på finita automater är att skapa en sekvens av reguljära uttryck ( \" gemener\" , \"kaper före gemener" , \"alla versaler kommer före gemener" etc.).
En ordbok definieras som en uppsättning ord som matchar Markov-filter och ett ändligt antal reguljära uttryck som tillämpas på dem.
Algoritmen som används för att bygga ordboken skiljer sig något från Markov-filtret på nollnivå (i det här fallet kommer en annan tröskel att användas för olika ordlängder i ordboken ). [6]
Den modifierade ordboken definieras som
Skriv om filtret (ordboken) i additiv form
var .
Låt . Sedan definierar vi partiella ordböcker . Observera att det är definierat eftersom , därför inte beror på valet av .
För alla prefix innehåller den partiella ordlistan alla möjliga teckensekvenser som kan kopplas till det prefixet , så den resulterande strängen uppfyller alla Markov-egenskaper.
I allmänhet kan en delordbok skrivas
Rekursiv algoritm för att beräkna storleken på en partiell ordbok [6]
partial_size1 ( current_length , level ) { if level >= threshold : return 0 if total_length = current_length : return 1 summa = 0 för varje char i alfabetet summa = summa + partial_size1 ( current_length + 1 , level + mu ( char )) return summa }Rekursiv algoritm för att hitta en nyckel från en ordbok (tar ett index i tangentutrymmet som indata och returnerar motsvarande nyckel ) [6]
get_key1 ( aktuell_längd , index , nivå ) { if total_length = current_length : returnera "" summa = 0 för varje char i alfabetet new_level = level + mu ( char ) // sett upp från förberäknad array size = partial_size1 [ current_length + 1 ][ new_level ] if sum + size > index // '|' hänvisar till strängsammansättning retur char | get_key1 ( aktuell_längd + 1 , index - summa , new_level ) summa = summa + storlek // kontrollen kan inte nå hit print "index större än knappsatsstorlek" ; avsluta }Anmärkningar
Precis som med nollordningsmetoden definieras partiella ordböcker .
Efter att ha slagit upp en sträng i en delordbok måste du oroa dig för det sista tecknet (med hänsyn till digramet och dess distribution)
partial_size2 ( current_length , prev_char , level ) { if level >= threshold : return 0 if total_length = current_length : return 1 summa = 0 för varje tecken i alfabetet om nuvarande_längd = 0 new_level = mu ( char ) else new_level = level + mu ( prev_char ) , char ) summa = summa + partiell_storlek2 ( aktuell_längd + 1 , char , new_level ) } get_key2 ( current_length , index , prev_char , level ) { if total_length = current_length : return "" summa = 0 för char i alfabetet om nuvarande_längd = 0 new_level = mu ( char ) annat new_level = level + mu ( prev_char , char ) size = partial_size2 ( current_length + 1 , char , new_level ) if sum + size > index return char | get_key2 ( aktuell_längd + 1 , index - summa , char , new_level ) summa = summa + storlek // kontrollen kan inte nå hit print "index större än knappsatsstorlek" ; avsluta }Kommentar
Det finns flera sätt att motverka onlineordboksattacker :
Anmärkningar
Det antas att korrekt inloggnings-/lösenordskombination anges av användaren av detta konto , medan ordbokattacken utförs av ett automatiskt program. Det krävs att ett försök att ange rätt lösenord är "beräkningsmässigt enkelt" för människor och "beräkningssvårt" för maskiner.
Protokollet är ett test som gör att servern kan skilja en människa från en bot . Det föreslogs först av M. Naor ( eng. Moni Naor ) och kallas det omvända Turing-testet ( eng. Reverse Turing-test (RTT) ), ett annat namn för det är CAPTCHA . Det omvända turingtestet måste uppfylla följande villkor: [7]
Bildtestet uppfyller alla ovanstående villkor.
Protokoll 1 (kombination av Turings omvända test med valfritt autentiseringssystem) [8]
Användaren uppmanas att svara på ett RTT-meddelande innan autentisering startar (innan inloggning/lösenord skrivs in ).
Kommentar
Denna metod är inte optimal för stora system, eftersom det är ganska irriterande och psykologiskt svårt för användaren att ange svaret på RTT-testet varje gång före autentisering . [åtta]
Protokoll 2 (användarinloggningsprotokoll, modifierad version av protokoll 1) [8]
Om användaren lyckas logga in skickar servern en cookie till användarens dator som innehåller en registrering av användarens autentisering och giltighetsperioden för detta meddelande (förutsatt att oförmågan att ändra informationen i cookien utan att meddela servern (detta kan garanteras genom att lägga till en MAC ( meddelandeautentiseringskod ) , som beräknas med en nyckel som endast servern känner till).
Anmärkningar
Offlineordboksattacker kan förhindras eller försvåras på följande sätt:
Trusted Platform Module (TPM) är ett hårdvaruchip som gör att datorer kan hålla data säkra. Innehav av hemlig information (hädanefter - authData ) är nödvändigt för att komma åt och använda TPM-nycklar .
Under attacken kan kryptoanalytikern lära sig: [9]
Sammanställning av ordböcker baserat på mottagen information används i en offlineordboksattack för att fastställa authData .
Bekämpningsmetoder - med en modifierad SPEKE- krypteringsmetod( Simple Password Exponential Key Exchange ), som är baserad på Diffie-Hellman-nyckelutbytesalgoritmen (låter två parter skapa en delad hemlighet ( eng. stark delad hemlighet ), baserad på en svag delad hemlighet ( eng. svag hemlighet ), som de delar).
Protokoll (modifierad kryptografisk metod SPEKE)
1. användaren kör kommandot som krävs för auktorisering med authData ;
2. användarprocess och TPM ingår i SPEKE-protokollet
, använder som en svag delad hemlighet ;
3. Användarprocessen väljer en slumpmässig och skickar den till TPM , där är hash-funktionen ;
4. TPM väljer en slumpmässig och skickar till användarprocessen;
5. var och en av dem beräknar en hemlighet ;
6. ersätts av som HMAC-nyckel .
Anmärkningar