Hur knäcks dina lösenord? Hur förbättrar man lösenordssäkerhet?
I denna artikel har vi presenterat flera klassiska metoder för att knäcka lösenord, tillsammans med de bakomliggande principerna bakom dessa tillvägagångssätt. Med tanke på dessa koncept har vi gett praktiska råd från både lösenordsvårdares och kontoinnehavares perspektiv om hur man kan förbättra lösenordens säkerhet.
Vi ser ofta nyheter om att användares lösenord för några välkända appar med en stor användarbas läcker. Du kanske känner att eftersom du inte använder just den appen har sådana incidenter inget med dig att göra, men så är inte fallet i verkligheten.
Nyligen kom det även nyheter på Twitter om att AI-metoder avsevärt kan påskynda hastigheten för att knäcka lösenord. Så vi ville förstå de intrikata detaljerna bakom det och se hur vi kan förbättra säkerheten för våra lösenord.
Hur knäcks lösenord?
I allmänhet bearbetas kontolösenord vanligtvis med olika hash-algoritmer och lagras sedan i databaser. Du kan hänvisa till vår tidigare blogg för att få en bättre förståelse av lösenordshashning. Tyvärr lagrar vissa tjänsteleverantörer, saknar sunt förnuft, lösenord i klartext i sina databaser. Denna praxis kan resultera i ännu större skada om data läcker.
Genom att spara hashade lösenord kan inte ens databasadministratörer få tillgång till ditt ursprungliga lösenord, vilket avsevärt förbättrar säkerheten. När man verifierar korrektheten av ett inmatat lösenord används samma hash-algoritm för att bearbeta det inmatade lösenordet. Det resulterande hashet jämförs sedan med det lagrade värdet i databasen. Om de två hashvärdena matchar anses det inmatade lösenordet vara korrekt.
Enkelt uttryckt, innebär att knäcka lösenord att generera strängar som följer de tillåtna lösenordsreglerna. Det innebär sedan att man kontinuerligt kontrollerar dessa strängar med den ovan nämnda metoden för att slutligen avslöja det korrekta lösenordet i klartext.
Vanliga metoder för att knäcka lösenord
I det här avsnittet kommer vi kort att introducera tre vanliga sätt att knäcka lösenord.
Brute-force-attack
Brute force-attacker listar vanligtvis alla möjligheter inom de tillåtna lösenordsreglerna och testar dem en efter en.
Till exempel kan mobiltelefoner ställa in en 4-siffrig numerisk lösenord. Brute-force-attacker kommer att testa alla möjligheter en efter en från 0000
, 0001
, 0002
, …, hela vägen till 9999
.
Brute-force-attacker är mycket tidskrävande, eftersom det finns för många försök. Anta att lösenordets längd är $L$, och antalet möjliga tecken per löenordsstorlek är $n$, då är antalet möjligheter brute-force-attacker måste försöka $n^L$, vilket är ett mycket stort antal.
Anledningen till att många lösenord kräver en kombination av siffror, versaler och gemener bokstäver, och specialtecken, är att öka $n$, vilket avsevärt ökar antalet möjligheter, och därmed ökar svårigheten att knäcka lösenordet.
Ordboksattack
Ordboksattacker utnyttjar ord från ordböcker, ofta kombinerade med mellanslag, siffror, specialsymboler och andra element, för att skapa olika lösenordskombinationer. Dessa kombinationer används sedan för att försöka matcha lösenorden.
Många individer väljer att använda meningar med klara betydelser som lösenord för enkel återkallelse. Ordboksattacker visar sig vara en effektiv metod för att knäcka lösenord med sådana egenskaper.
Regnbågstabellsattack
En regnbågstabell är en förberäknad mappning av lösenord i klartext till deras motsvarande hashvärden. Genom att direkt jämföra de hashvärden som lagras i databasen med de i regnbågstabellen, kan eventuella matchningar som hittas användas för att leta upp och direkt hämta det motsvarande lösenordet i klartext.
Regnbågstabeller erbjuder fördelen att ge omedelbar tillgång till lösenord i klartext om hashvärdet har förberäknats (och noterats i regnbågstabellen). Det är dock viktigt att notera att om hashvärdet inte har förberäknats (och därför inte finns med i tabellen), kan en regnbågstabell inte användas.
Förutom de metoder som beskrivs ovan finns det många andra tekniker som inte täcks här. Generellt används en kombination av dessa metoder för att omfatta alla möjliga lösenord och påskynda knäckningen.
Hur man påskyndar lösenordsknäckning?
I föregående avsnitt presenterade vi kort några klassiska metoder för att knäcka lösenord. Från dem kan vi sammanfatta några idéer för att förbättra hastigheten eller framgångsgraden för lösenordsknäckning.
För att knäcka ett lösenord, innebär det ofta två steg:
- Bestämma sökutrymmet för lösenordet (generera möjliga lösenord)
- Använda hash-algoritmen för att generera hash för de möjliga lösenorden som erhållits i föregående steg, och jämför dem med hashet för lösenordet som ska knäckas
Den tidigare nämnda ordboksattacken och regnbågstabellsattacken optimerar dessa två steg respektive:
- Ordboksattacken begränsar sökutrymmet för lösenord. Bygger på antagandet att "användare tenderar att skapa lösenord med ordkombinationer med faktiska betydelser", ord som
zzzz
ingår inte i ordboken, vilket betyder att de inte kommer att testas som potentiella lösenord. Denna praxis är liknande att förtidigt utesluta felaktiga svar. Analogt med att hantera flervalsfrågor, medan du kanske inte är säker på det rätta alternativet, kan du identifiera vilka val som definitivt är fel. Genom att eliminera dessa uppenbart felaktiga alternativ förbättras dina chanser att gissa rätt bland de återstående valen. - Regnbågstabellsattacken påskyndar exekveringstiden för hash-algoritmen. För individer väl bevandrade inom datastrukturer, är uppslagning en $O(1)$-komplex operation, och ingen operation kan vara enklare än $O(1)$ vad gäller tidskomplexitet. I kontrast är tidskomplexiteten för vanligt använda hash-algoritmer som MD5 och SHA $O(n)$, vilket är märkbart långsammare än $O(1)$.
I praktiken börjar optimering av lösenordsknäckningsprocessen också från de ovanstående två perspektiven. Det är värt att nämna att på grund av det relativt lilla utrymmet för att optimera $O(n)$ tidskomplexiteten för stränghashartiklar, görs fler överväganden för att förbättra hårdvaru- eller beräkningsmetoder, vilket inte kommer att förklaras här.
Så hur hjälper AI att knäcka lösenord?
I hela ansträngningen att knäcka lösenord sträcker sig AI:s roll till att lära sig vissa mönster och konstruktionsmetoder från exponerade lösenord i klartext. Därefter kan AI simulera dessa lösenordskonstruktionsmönster för att generera en massa potentiella lösenord. Därefter kan AI använda hash-algoritmer eller till och med specialiserad hårdvara för att utföra lösenordsknäckning.
Faktum är, jämfört med andra lösenordsknäckningsverktyg, är PassGAN's dödande fördel att det kan "gissa de mest troliga lösenorden så snabbt som möjligt", vilket är idén om "minska möjliga lösenordssökningsutrymme" vi nämnde ovan.
Hur man gör lösenord säkrare?
Vi kommer att förklara hur man skyddar lösenord från två perspektiv. Här börjar vi helt enkelt från själva lösenordet, utan att diskutera andra sätt att säkerställa kontosäkerhet, såsom multifaktorauthentisering (MFA) och så vidare.
Från identitetstjänstleverantörernas perspektiv
Som leverantörer av identitetstjänster, är de värdar för alla användares lösenord, vilket innefattar dem med ansvaret att säkerställa säkerheten för dessa lösenord. Här är flera scheman som kan implementeras för att förbättra säkerheten för användarnas lösenord:
-
Undvik att lagra lösenord i klartext: Även om detta kan verka som sunt förnuft, lagrar fortfarande vissa tjänsteleverantörer lösenord i klartext inom sina databaser. Genom att använda hash-värden för att lagra lösenord, läggs ett lager av säkerhet; även om databasen komprometteras, skulle hackare behöva avsevärda ansträngningar för att knäcka de hashade lösenorden.
-
Tillämpa hastighetsbegränsningar på API-gränssnittet för lösenordsverifiering: Låt oss återvända till processen för att knäcka lösenord som nämnts tidigare. En integrerad del av denna process involverar att "verifiera" om ett lösenord är korrekt. Eftersom lösenord är betrodda till identitetstjänstleverantörer, är de de enda enheterna utrustade för att erbjuda API för lösenordsverifiering. Genom att begränsa frekvensen av åtkomst till detta API, kan vi hindra hackare från att snabbt försöka olika lösenord, även om de har mycket troliga lösenordsgissningar.
-
Tvinga mer komplexa lösenordssammansättningar: Till exempel, som nämnts tidigare, bidrar större teckensortering inom lösenord av en given längd till ökad komplexitet. Dessutom, genom att använda AI-tekniker liknande de som diskuterats tidigare, möjliggörs utvärdering av lösenordssäkerhet innan inlämning. Om ett lösenord bedöms som svagt, kan användarna uppmanas att välja ett mer robust alternativ.
Ur användarnas perspektiv
Som kontoinnehavare och associerade digitala tillgångar, bör användarna ägna största uppmärksamhet åt att säkerställa säkerheten för sina konto lösenord.
-
Undvik att använda samma lösenord på olika webbplatser: Efter att ha erhållit lösenord från vissa webbplatser, försöker många hackare att använda de kontouppgifterna för att få åtkomst till andra webbplatser. Om flera konton för olika tjänster delar samma lösenord, kan det finnas en risk för förlust av konton och upplevd informationsläcka i det nämnda scenariot.
-
Välj helt slumpmässiga lösenord så mycket som möjligt: Detta tillvägagångssätt hjälper till att förhindra återanvändning av vanliga lösenordsmönster som de flesta använder (som nämnts tidigare, att använda engelska meningar), och komplicerar därmed hackares ansträngningar att "begränsa lösenordssökutrymmet" och ökar nivån av lösenordskomplexitet.
Som infrastrukturen för identitetstjänster, har Logto implementerat många av de bästa praxis som nämnts ovan för att skydda användarnas kontosäkerhet. Detta möjliggör för användare att interagera med olika appar utan oro för kontoförlust, samtidigt som det möjliggör för online-tjänsteleverantörer att säkerställa användardatasäkerhet med minimal ansträngning, vilket innebär att de kan koncentrera sig på sina kärnverksamheter.