Fråga:
På inloggningsformulär i två steg, varför är det inloggningsnamnet och inte lösenordet som frågas först?
Out of Band
2015-09-09 19:15:47 UTC
view on stackexchange narkive permalink

Det finns flera inloggningsformulär (t.ex. Googles) på internet där du först anger ditt inloggningsnamn och sedan, när det har skickats, får du ange ditt lösenord.

En av fördelarna med detta är Antar jag att servern kan dra upp en bild bara den känner och visa den för användaren för att hjälpa till med att förenkla enkla nätfiske.

Min fråga är varför ingen gör det tvärtom - först be om ett lösenord och sedan för inloggningsnamnet.

Jag kan se det uppenbara svaret (att lösenordet kanske inte är unikt och därför servern inte skulle veta vilka anti-phishing-bilder som ska visas), men att övertygar mig inte. Att inaktivera omedelbart konton som delar lösenord eller åtminstone tvingar användare att ändra sina lösenord till en unik sträng nästa gång de loggar in kan vara sätt runt det och som en åtminstone skulle det lösa lösenordsfenomenet "123456".

En annan fråga som jag kan se är att i ett phishing-scenario där en användare anger sitt lösenord korrekt och sedan märker att fel bilder visas för honom, har han redan gett upp sitt lösenord och allt som återstår för phishern att göra är att identifiera vem det här lösenord tillhör.

Vad jag skulle vilja veta är om inloggnings-då-lösenordssekvensen mest beror på överväganden eller användargränssnitt eller om det finns andra säkerhetsproblem med att vända sekvensen för att be om lösenordet först (förutom de två jag har nämnt).

Att tvinga unika lösenord har en kritisk säkerhetsproblem: När jag skulle utlösa det skulle jag veta att det finns minst ett konto som använder samma lösenord som jag försökte. Kontonamn anses vanligtvis inte vara hemliga, så jag kan nu prova det lösenordet med alla konton jag känner till.
Kommentarer är inte för längre diskussion; denna konversation har [flyttats till chatt] (http://chat.stackexchange.com/rooms/29031/discussion-on-question-by-pascal-schuppli-on-two-step-login-forms-why-is- det-det).
"han har redan lämnat sitt lösenord och allt som återstår för phishern att göra är att identifiera vem det här lösenordet tillhör." länken. Då är chansen stor att i fallet med att google användarnamnet bara är den e-postadress personen mottagit e-postmeddelandet på, vad är från det ögonblicket också tillgänglig information.
Det andra problemet med unika lösenord är användarupplevelsen. På ett litet system med 20 användare kan detta fungera, men tänk dig att försöka skapa ett unikt lösenord för gmail. Det är svårt att hitta ett unikt användarnamn. Vid den tiden kan du lika gärna automatiskt tilldela lösenord och anta att det kommer att vara på en fästis inom några sekunder.
** Det är därför du inte borde dricka och ställa frågor online. **
åtta svar:
Thomas Pornin
2015-09-09 19:28:47 UTC
view on stackexchange narkive permalink

Ett ensamt lösenord kan inte nödvändigtvis verifieras av sig självt. I synnerhet om servern gör saker ordentligt lagrar den inte själva lösenorden utan utdata från en lösenordshashfunktion beräknad över lösenordet. En lösenordshash-funktion (i motsats till enbart hash-funktion) innehåller några extra funktioner, inklusive ett salt (av mycket goda säkerhetsrelaterade skäl). För att verifiera ett lösenord krävs sedan kunskap om motsvarande salt. Eftersom saltet är instansspecifikt (poängen med saltet är att distinkta användare har sina egna salter) krävs användaridentiteten (användaridentiteten används som en indexeringsnyckel för saltet).

SilverlightFox
2015-09-09 19:37:10 UTC
view on stackexchange narkive permalink

För det första skulle servern inte veta om lösenordet ensam matchade några konton.

I ett säkert system saltas lösenorden och hashas sedan.

I en förenklad demo, antar att jag hade tre användare:

  Användarnamn Lösenordbob foobaralice foobarmaggie foobar  

När dessa lösenord är inställda tillsätts ett salt och en hash genereras:

  Användarnamn salt värde till hash hash resultbob ABCDEF ABCDEFfoobar 778f9aab91717e420e447d7e4cdd84f1alice 123456 123456foobar 17e9191daecc5b8be26779209769b275maggie ZXCVBN ZXCVBNfoobar 527cb07b112559cf9c1aff19d28074fa  

som du kan se, är syftet med salt som det inte finns två lösenord lagras samma, även om lösenordet kan matcha. Detta är ett viktigt säkerhetssteg att ta för att förhindra att regnbågstabeller används i en extraherad lösenordslista.

Detta gör det omöjligt att avgöra vilket konto som loggas in på grundval av enbart lösenordet, eftersom saltet till användningen är inte känd. Detta beror på att användarnamn används som en nyckel för uppslaget, och utan att det ges till servern kan lösenordet som anges i steg ett inte matchas utan att försöka varje hash i användartabellen förrän en matchning hittas. På ett korrekt konfigurerat system skulle detta vara för långsamt eftersom du använder en långsam algoritm (se fotnot).

Det skulle också vara en massiv säkerhetsinformationsläcka om systemet berättar att ditt lösenord håller på används av en annan.

Exemplet ovan är endast avsett att illustrera och använder MD5. Använd aldrig MD5 för att hash lösenord - använd bcrypt, scrypt eller pbkdf2.

Vänta, va? Saltet som ska användas * är * känt, det lagras där precis bredvid lösenordshashen ...
Användarnamn används som nyckel för att slå upp vilken hash som ska användas. OP: n frågade varför ett system inte kunde be om lösenord först - anledningen är att systemet inte skulle veta vilket salt som lösenordet skulle ha utan att användarnamnet skulle letas upp.
Ingen sa att lösenordet måste hasas innan användarnamnet erhålls men ... frågan var en front-end-fråga, inte en back-end-questino.
"eftersom det salt som ska användas inte är känt." -> Bara om detta orsakar förvirring är problemet att du inte vet rätt salt för lösenordet du beräknar hashen för. Teoretiskt kan du gå igenom varje konto och beräkna hash baserat på salt och lösenord. Detta skulle dock vara för långsamt för att vara praktiskt om du har fler än ett par användare.
@underscore_d: Du saknade den avgörande delen av min kommentar.
@Mehrdad Så det gjorde jag! Förlåt. Jag raderar min fina kommentar nu.
Black
2015-09-10 02:07:43 UTC
view on stackexchange narkive permalink

Frågar du inte i princip "Finns det någon anledning att vi inte har offentliga lösenord och privata användarnamn?"

De är båda bara textsträngar. Din idé att genomdriva unika lösenord är egentligen bara att säga att användarnamn är unika. Etiketten du applicerar på en textruta spelar ingen roll. Vi kallar strängen som är privat ett lösenord och den unika ett användarnamn eller användar-ID eftersom det är unikt.

Säkerhetsmässigt och tittar på det i normal ordning för inloggning / lösenord : Om du krävde att båda skulle vara unika, skulle du öppna en attack mot databasen, för varje kontrollerat lösenord skulle kontrolleras mot alla användare i databasen eftersom du har krävt att dina lösenord ska vara unika . Så båda unika fungerar inte. Båda icke-unika fungerar inte eftersom du inte vet vilket konto som nås. Så det lämnar bara en unik sträng. Om du skapar en enda unik textsträng kan du lika gärna göra den till en offentlig datablad och kontrollera det först (och vi kallar dessa data Login / ID / Användarnamn).

@PascalSchuppli Han säger att även om du inte hade för avsikt att byta ut betydelsen av lösenord och användarnamn, finns det inget sätt att implementera detta system på ett sätt där du inte_byter deras betydelse. Om lösenordet kommer först måste det vara osaltat. Om den är osaltad, sitter den i en fil någonstans i ren text. Om det står i klartext behöver du en bit information som inte är_, och din enda kandidat just nu skulle vara användarnamnet. Så du måste salta användarnamnet med lösenordet och ...
lagra hash för det saltade användarnamnet. _Då_ skulle systemet vara säkert. Men samtidigt skulle du ha vänt definitionerna av ett lösenord och ett användarnamn helt.
@PascalSchuppli Dina lösenord förlorar entropi eftersom din angripare får en parallell fördel på systemet. Om 1 miljon lösenord har gjorts är det 1 miljon mindre måste du kontrollera även om du får ditt system att "fungera". Det är som att slumpmässigt generera ett lösenord men kasta ut det om det inte är ett ord. Detta system är inte säkert. Och som har sagts, om du inte får det att "fungera" (om det finns en metod för att kontrollera mer än en användare än en gång, t.ex. ändra lösenordsformulär, registrera dig), får du 1 miljon av dessa reducerade entropikontroller varje när du skickar en begäran.
@PascalSchuppli * "användarnamn är lätt att gissa även om de inte är allmänna kunskaper av design" * Uppenbarligen har du aldrig stött på ett system som använder (erkänt fruktansvärt) konvention: "Ditt användarnamn är h0j7k # X1P% 3. Ditt standardlösenord är ditt efternamn. " De finns (även om jag inte har någon aning om varför).
Keavon
2015-09-10 04:10:25 UTC
view on stackexchange narkive permalink

Låt oss föreställa oss en analogi ...

Jag är en budbärare som skickas av min kung för att leverera ett meddelande till ett visst slott i Slottdalen. Jag vet hur slottet jag vill gå till ser ut och jag fick en lösenfras för att berätta för vakten så att jag kunde släppas in i slottet.

Jag har två alternativ för hur man gör detta:

  1. Som du utan tvekan förväntar dig är det konventionella sättet att göra detta att åka till slottet som jag skickades till och sedan berätta för lösenfrasen som ska släppas in. Detta används först min offentliga information (slottet, synligt för alla som vill titta på det) för att logga in med min privata information (lösenfrasen).

  2. Men det finns en omvänd väg att gör det här. Jag kan få ett horn och ropa min lösenfras över hela dalen för allmänheten att lyssna på. Eftersom slottet som jag tänker besöka har hört min lösenfras (tillsammans med alla andra slott och de potentiellt skadliga invånarna i dalen), bör slottet jag besöker veta att förvänta mig.

    Jag fortsätter sedan till häst till rätt slott och åka över dess öppna vindbrygga. Men de skulle släppa in någon genom denna öppna vindbro! Nu när min privata information har delats med världen kan vem som helst åka mellan slotten och gå in i den med den öppna porten.

    Om jag inte är här för att skrika detta i ett horn, dalbo kunde stå på toppen av en kulle med sitt eget horn och skrika gnisslande över dalen tills de hör dammet av en vindbrygga öppnas; de vet att de gissade en lösenfras korrekt, de måste helt enkelt åka mellan slottet tills de hittar en som är öppen.

Det första alternativet är hur det vanligtvis görs. Det finns ingen anledning att ändra den konventionen. Alternativet är möjligt, men genom att dela din privata information först gör du det mycket lättare att gissa lösenordet för alla på en gång innan du autentiserar med offentlig information, dvs åker till varje slott eller försöker hela allmänheten kontonamn. Med tusentals slott i den här dalen eller konton på en webbplats är det troligt att någon gissar ett enkelt lösenord och då är det mycket lättare att helt enkelt matcha det med ett av få tusen slott eller offentliga kontonamn.

A + analogi, skulle läsa igen
Ordningen i vilken information samlas in är irrelevant för huruvida informationen kan krypteras eller inte. Den sista meningen i svaret kompenserar för det, eftersom detta / kanske / möjliggör enklare attacker av snabbmekanismen ger omedelbar feedback för ett ogiltigt lösenord innan du ber om användarnamnet. Men det är typ av ett sekundärt problem.
Doryx
2015-09-10 09:00:55 UTC
view on stackexchange narkive permalink

Google behöver inte ange din e-post först av säkerhetsskäl. Du måste ange ditt e-post / användarnamn så om du loggar in på en arbets- eller utbildningsdomän som vill ha en egen målsida för SSO / SAML

Det är en bra poäng (syn på webben gör detsamma). Det kan dock finnas en sekundär orsak till säkerhet / belastningsminskning / begränsning av den hastighet med vilken konton kan sonderas.
Kanske är det sant för Google, men många system ** måste ** ange ditt användarnamn först av säkerhetsskäl: [ömsesidig autentisering] (https://en.wikipedia.org/wiki/Mutual_authentication).
dannysauer
2015-09-10 17:28:25 UTC
view on stackexchange narkive permalink

Om du först ber om lösenordet måste du behålla det "hemliga" värdet i något tillstånd medan du väntar på användarnamnet. Med en webbapp skulle du vanligtvis behöva göra den lagringen på något sätt så att en ny process kan läsa värdet, eftersom användarnamnet skulle komma in på en andra begäran. Det ökar möjligheten för lösenordssträngen att avslöjas, både när det gäller tid och när det gäller sätt att komma till data.

Genom att först fråga användarnamnet, lösenordsverifiering som använder saltad hashing (eller inte) kan redan ha tillgång till allt som krävs för att verifiera lösenordet omedelbart, och systemet behöver bara ha lösenordet tillgängligt under en minimal tid. Det är i allmänhet bäst att ha känslig data tillgänglig så kort tid som möjligt.

Och det är konventionen. Genom att först be om lösenord kommer du att träna användare att av misstag skriva sitt lösenord i användarnamnfält någon annanstans, vilket troligen kommer att avslöjas genom loggar.

Gör inte det. :)

Plus ett för att skriva lösenord i användarnamnsfält. Stort nej-nej
Och plus en för att nämna det uppenbarligen ofta förbisedda faktumet att att ta (artist tidigare känt som) "lösenord" först inte kräver att det är helt osaltat, eftersom det kan saltas senare, men tidsfördröjningen ger ytterligare ett säkerhetshål i detta (ganska konstigt, eller till och med bara definitionsbyte) idé.
Ombongi Moraa
2015-09-10 16:07:41 UTC
view on stackexchange narkive permalink

För att lägga till; mekanismen för identifiering vs autentisering / verifiering bestäms när applikationen utvecklas. Identifiering är 1: många , verifiering / autentisering är 1: 1

  1: 1 - matcha mot en för vald resultatuppsättning; 1: många - matchar mot alla resultat i DB  

Användarnamn som gmail är unika. Detta är inte obligatoriskt för alla applikationer, men det gör livet lättare för verifieringsalgoritmen i motsats till identifieringsalgoritmen.

Tänk på det populära användarnamnet och sedan autentisering av lösenord för gmail:

  1. ange användarnamnet;

    gmail matchar det unika användarnamnet och alla andra unika användarnamn; Ja matcha, ange lösenord; Ingen matchning, ingen åtkomst.

  2. Ange lösenord.

    gmail matchar bara 1 användarnamn med 1 lösenord lagrat i vilket format som helst; Ingen matchning, autentisering misslyckades. Ja matcha, få tillgång till din post.

Ganska enkelt IMHO.

Tar den andra sidan, identifiering (1: många), matchningsprocessen av gmail skulle vara så här:

  1. ange lösenord; och som @SilverlightFox tydligt indikerar kan många konton ha samma lösenord.

      matchande algoritm matchar lösenordet till ALLA användarnamn registrerade i gmail-databasen.  

    En för konservativ resultatuppsättning kan vara tio användarnamn.

  2. Ange användarnamn;

Huruvida användarnamnen är unika eller kan vara desamma, avgör hur mycket mer tid som autentiseringsprocessen kommer att köras och hur många matchningar som hittas. Om fler än 1 matchar måste vi implementera inloggningsautentisering i tre steg.

Tvåstegsautentisering gör livet enklare för utvecklaren och algoritmen.

jhash
2015-09-28 23:44:10 UTC
view on stackexchange narkive permalink

I händelse av google och större delen av inställningen för delad autentisering använder systemet i princip användar-id för att identifiera risken och bestämma lämplig inloggningsprocess som den ska köras för användaren.

Om i de flesta av dessa situationer är användar-ID som anges av person bara en ingång som övervägs. Tillsammans med den skickas en hel del annan information (som IP-adress där du kommer åt, enhet som användaren använder - det finns en enhetssignatur som genereras och skickas tillsammans med användar-id) till en riskbestämningsmotor (i de flesta bankerna men kan inte alltid användas) vilket kan ge en föreslagen inloggningsprocess. Utöver det kontrollerar systemet inloggningspolicyn som är associerad med användaren (dvs. om det till exempel har flera faktorer aktiverat). Baserat på slutgiltig bestämning kan du för det mesta bara få en enkel lösenordsskärm men i vissa fall kan du bli ombedd att gå till flera autentiseringsprocesser (t.ex. telefonbaserad OTP, etc.).



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 3.0-licensen som det distribueras under.
Loading...