Fråga:
Finns det något verkligt värde i hashing / salting lösenord?
Steve
2015-10-28 16:33:08 UTC
view on stackexchange narkive permalink

Jag ser efter ett system som innehåller mycket "lågkvalitativ" information, inget ekonomiskt annat än namn / adress / e-post etc. Någon har föreslagit att vi ska höja säkerheten från den nuvarande inloggningskodkrypteringsalgoritmen för att använda ICO-rekommenderad hash /saltning. Jag har läst lite och kämpar för att se nyttan, mitt argument har gått tillbaka till "experterna" som föreslår detta men de kommer inte (kan) svara på min ganska enkla fråga.

Såvitt jag kan säga förhindrar hashing / saltning att lösenordet läses och dekrypteras av en hackare, och det är utmärkt för detta, inget argument. Men såvida jag inte saknar något, för att kunna läsa lösenordsvärdet måste hackaren ha tillgång till databasen så att de kan stjäla lösenordsvärdena? ... om de har tillgång till databasen behöver de faktiskt inte lösenord eftersom de bara kan stjäla data direkt från databasen, dvs att programåtkomst de får från lösenorden skulle ge dem inget annat än att läsa databasen direkt? ...

Vad saknar jag?

Kommentarer är inte för längre diskussion; den här konversationen har [flyttats till chatt] (http://chat.stackexchange.com/rooms/30971/discussion-on-question-by-steve-is-there-any-real-value-in-hashing-salting- passw).
Frågan är skyddad, så kommenterar ... Kom ihåg att databasåtkomst skiljer sig från att ha referenser. DB-läsning innebär att du kan hämta och använda data så länge du har tillgång (som med kontanter). DB-skrivning betyder att du kan manipulera, men också bara tills detta är fixat. Sedan, om inte du låser och tvingar alla användare att förnya autentiseringsuppgifter med identitetsverifiering, kan inkräktare fortfarande använda gamla referenser & bli oupptäckta kanske & få andra att ta skulden (som ett kreditkort).
Detta måste vara en kopia av en annan fråga här.
Tolv svar:
Matthew
2015-10-28 16:40:44 UTC
view on stackexchange narkive permalink

Användare använder ofta samma lösenord på flera webbplatser. Din webbplats kanske inte har några finansiella data, men vad händer om samma lösenord används för deras bank eller för en onlinebutik?

Du kan hävda att detta inte är ditt problem, men det är vanligt problem, och det är därför varje gång ett intrång inträffar, är en av de omedelbara uttalandena "ändra ditt lösenord och ändra det på andra webbplatser där du har använt samma lösenord".

Om din webbplats använde något som Bcrypt (utan brister i implementeringen - se Ashley Madison) är chansen att en angripare kan räkna ut vilka lösenord som har använts smalare, och det ökar tiden för användare att kunna ändra sina lösenord någon annanstans. Om du bara lagrar lösenordet i din DB utan hashing kan en angripare vandra iväg med e-postadresserna och lösenorden och börja attackera en annan webbplats omedelbart.

E-postadress och lösenordspar handlas ofta mellan angripare också, i form av "kombinationslistor", vilket innebär att även om den ursprungliga angriparen bara är intresserad av din webbplats, kan de få fördelar genom att sälja informationen till någon annan.

Tillagt som svar på kommentar till fråga som nämner 2-vägs krypterad lagring

Problemet med en 2-vägs krypteringsmetod är att informationen som ska dekrypteras måste lagras någonstans i systemet. Om en angripare får åtkomst till din databas är det stor chans att de också har tillgång till din krypteringsnyckel. En hash kan inte vändas på det här sättet - onlineverktyg för att vända hash slår effektivt upp hash i en förberäknad lista.

Även om de inte har krypteringsnyckeln kanske de kan för att räkna ut vad nyckeln var - de kan använda en känd vanlig textattack genom att ange ett lösenord till ditt system och se vad resultatet är. Det skulle förmodligen inte vara en snabb process, men det kan vara värt att göra om det fanns några mål med högt värde i dina uppgifter (kändisar, politiker ...).

Å andra sidan, med en stark, saltad hash, är det enda sättet att hitta det ursprungliga lösenordet med stor säkerhet att hash alla möjliga inmatningar, med lämpligt salt. Med något som Bcrypt skulle det ta år, även om svaga lösenord fortfarande kommer att hittas relativt snabbt.

OK, det är en rättvis poäng, sajten är skriven i klassisk ASP så jag måste hitta en komponent för att göra detta, vilket inte borde vara för svårt, men då måste jag på något sätt tvinga fram en lösenordsändring för alla användare ... Jag kan inte ändra det eftersom jag inte kan skicka dem där lösenord (eller kan det göras i kod?) Dvs skapa ett lösenord och mejla det ?, tvinga sedan en lösenordsändring vid inloggning ... vad mer!
Det kommer att vara möjligt och verkar vara den bästa lösningen. Det enda jag kan tänka mig är att lösenordspåminnelsen måste tas bort och en lösenordsåterställning används istället ... några andra gotchas jag behöver tänka på?
@Steve Massor av saker som är värda att överväga, men de flesta av dem behandlas i OWASP Authentication Cheatsheet https://www.owasp.org/index.php/Authentication_Cheat_Sheet - väl värt att läsa
Dessutom - dina anställda har sannolikt tillgång till dekrypteringsnyckeln ... och så vad hindrar dem från att dekryptera hela lösenordsdatabasen och lägga ut den online efter att ha lämnat företaget? Som nämnts återanvänder människor sina lösenord så det finns sannolikt skador
@Steve, du behöver inte tvinga dina användare att ändra ett lösenord, det är ett policybeslut. Eftersom jag inte kan berätta alla detaljer från din fråga ser jag två alternativ. 1, om pwds verkligen är krypterade, dekryptera bara och hash / salt med ny kryptografiskt säker algoritm. 2, om pwds är envägs hashad med nuvarande (svagare) algoritm, skriv ny kod som utlöses vid inloggning och skapar en ny hash / salt med användarens levererade lösenord (förutsatt att den gamla verifieraren anger en matchning). Ingen behöver bry sig. På vägen för att få 100% efterlevnad meddela alla återstående användare att de måste göra en lösenordsåterställning.
@AndrewPhilips som skulle introducera problemet med hur man bortskaffar den gamla "dekrypterbara" databasen, och eventuella kvarvarande kopior skulle göra hela förändringen värdelös. Återställning av lösenord är vägen att gå här.
@gnp, det finns inga problem med bortskaffande, bara ta bort / noll som innehåller den gamla lösenordsdata när du spelar in den nya. Steves första kommentar var att han skulle behöva tvinga fram en förändring. Han borde veta att det är tekniskt möjligt att inte tvinga fram en förändring. Så i det här fallet har de två frågor: (1) en policyfråga (tvinga pwd-ändring?) Och (2) en teknisk fråga (måste alla användare byta pwd?). Även om jag, precis som du, lutar mig mot förändringspolicyn, kan det ibland påverka en användargrupp negativt. I sådana fall är det trevligt att ha ett val.
Mark Buffalo
2015-10-28 17:55:03 UTC
view on stackexchange narkive permalink

Bra fråga, och jag är glad att du ställde den. Jag vill att folk ska hitta den här tråden när de googlar den så att de - förhoppningsvis - inte gör samma misstag som många andra företag gör.

Du borde inte bara hash lösenord, bör du salta och se till att din hashingalgoritm använder någon form av SlowEquals . Du ska inte sluta där: du bör använda en säker hashingalgoritm som i hög grad motstår kollisioner , till exempel bcrypt eller scrypt.


Varför salt? Vad är kollisioner?

Jag ska använda md5 som ett exempel eftersom det är mycket känt. Använd inte det, eftersom det är sårbart för kollisioner och är mycket snabbt vilket innebär att det är mycket lättare att bryta. Låt oss föreställa oss att du bara hash dina lösenord utan salt. Du skulle sluta producera en statisk effekt nästan varje gång.

Till exempel skulle " myDarnPassword " konverteras till " aca6716b8b6e7f0afa47e283053e08d9 " när det hashades som md5. Vid den här tiden kan du skapa en ordbokattack och använda regnbågstabeller. Du kan till och med skapa en databas som konverterar så många slumpmässiga tecken till en lätt sökbar databas som inte kräver tidskrävande regnbågsuppslag. Du kan långsamt skapa det över tiden och slå upp hash senare.

Du skulle skapa en tabell ser ut så här:

  + --------- ---------- + ---------------------------------- + | LÖSENORD | UNSALTED_HASH | + ------------------- + --------------------------- ------- + | myDarnPassword | aca6716b8b6e7f0afa47e283053e08d9 | + ------------------- + --------------------------- ------- + | snällaDontSueMe11 | 0dd395d0ec612905bed27020fb29f8d3 | + ------------------- + --------------------------- ------- +  

Då skulle du välja från databasen något så här:

  VÄLJ [lösenord] FRÅN [tabell] VAR [ unsalted_hash] = 'aca6716b8b6e7f0afa47e283053e08d9'  

Och det skulle returnera myDarnPassword , plus alla kollisioner som inträffat.

Med tillräcklig processorkraft och tid kan du skapa biljoner kombinationer och helt enkelt knäcka ett stort antal lösenord på mycket kort tid (jag kan rekommendera att dela upp databaser i lösenordslängder på grund av det stora antalet ). Du behöver dock en enorm mängd hårddiskutrymme för detta.

Vid den tiden är allt du behöver göra att leta upp det utan att slösa bort processorkraft på brute-tvingar allt varje gång. Och om du tidigare har stulit andras lösenord från en databas kan du lägga till dem och konvertera dem till hash. Många webbplatser har redan gjort detta.

När en webbplats validerar ditt lösenord, kommer de att jämföra lösenordet med den lagrade hash, och om det matchar hash i databasen anses det vara ett giltigt lösenord. Du kan då låta användaren logga in.

Saltning av hash kan hjälpa till att besegra denna attack, men det sparar inte dig mot kollisioner. Du kan jämföra hackade hashkoder med din hashlista som genererade kollisioner och sedan ange lösenordet på en webbplats, även om du har fel lösenord: så länge hashen validerar är du pwned .


Vem bryr sig om någon knäcker mina lösenord? Jag bryr mig inte!

Nedan följer bara en liten samling exempel på vad phishers och andra skadliga individer kan med dina oskadade och osaltade lösenord i klartext. Det kan inte nödvändigtvis användas för att rikta in dig direkt, men låt oss säga att Hacker vill rikta in sig på Person A . Låt oss härleda hur du kan rikta dig mot Person A .

  1. Du är Hacker . Ditt jobb är att hacka webbplatser och utveckla en databas för att samla denna information.
  2. Person A är en person av intresse. Person A dyker upp i en av dina hackade webbplatsers databaser. Du känner nu till deras e-postadress och lösenord de använder för den webbplatsen.
  3. Nu kan du försöka logga in på deras e-postadress med lösenord du har stulit från den webbplatsen. Söta, det fungerar!
  4. Nu när du har tillgång till deras e-post, laddar du ner alla deras e-postmeddelanden via IMAP eller via deras webb-e-post. Vid denna punkt hittar du massor av intressanta saker. De kommunicerar med Person B .
  5. Du kan faktiskt google vissa människors användarnamn och e-postadresser, och det kan visa webbplatser de publicerar på. Detta kommer att visa andra webbplatser som användaren använder. Kanske kan du försöka hacka dessa webbplatser eller kanske bara dra slutsatser om vad de är intresserade av. Nu kan du låtsas vara som dem eller hitta ytterligare information. Information / aktiviteter kan inkludera:
    • Användarnamn . Person A postar online som Mark Buffalo . Det är ett relativt unikt namn. Du kan sedan googla Mark Buffalo och leta efter webbplatser som han publicerar på. Kanske avslöjar han mer av sin personlighet på andra webbplatser?
    • Lösenord . Kanske Mark Buffalo har samma lösenord på den webbplatsen. Kanske kan du logga in på den webbplatsen och se hans privata kommunikation med andra?
    • Personlig information . Eftersom du vet identiteten för Mark Buffalo , vad händer om han delar personlig information på certains webbplats? Vad händer om han lägger in på craigslist som söker efter manliga eller kvinnliga eskorter, och han har lämnat sitt telefonnummer där? Du har redan hittat hans telefoninformation så att du kan hitta ett sätt att ställa upp honom och utpressa honom för pengar / information / makt. Detta har inte mycket att göra med att salta lösenorden om du inte inkluderar telefonnumret, men de hittar sitt telefonnummer på en annan webbplats tack vare din läcka. Det är ett av de många mycket kraftfulla sätten att information kan samlas in och användas mot dig. Det här är trots allt ett Informationssäkerhet -forum, så jag vill använda detta exempel.
    • Familjinformation . Nu blir det läskigt. Vi har Mark Buffalos personliga information. Låt oss titta på hans sociala nätverk. Åh, han har ett Facebook -konto (jag har inte). Kan vi komma åt detta med samma lösenord? Om Buffalo använder samma lösenord / e-postkombination, då förmodligen. Och du kan nog dra slutsatsen från hans e-postmeddelande som du öppnade tidigare, där du hittade många intressanta saker. Vi kan nu logga in och läsa hans Facebook-meddelanden. Nu vet vi vem hans familjemedlemmar är. Vi kan sedan samordna utpressningsattacken lättare.
    • Annan inloggningsinformation . Eftersom vi fick tillgång till hans e-post tidigare ser vi att han också har ett Skype-konto. En av dem är hemlig. Vi loggar in och ser att han flörtar med människor på Skype. Vi har nu mer utpressningsmaterial.
    • Imitation . Du kan nu logga in och efterlikna Buffalo på en mängd olika webbplatser. Kanske är han faktiskt en rakskjutare och har aldrig gått efter några ledsagare eller något liknande? Nå, nu kan du förvandla honom till en eskorterande sökande, åtminstone i utseende, genom att använda hans referenser för att imitera honom online. Föreställ dig skador som kan orsaka en politiker som felaktigt anklagats och tvingas avgå.
    • Saker som gör det lättare att hacka andra människor . Du kan sedan skicka e-post till Person B med infekterade bilagor och låtsas att du känner honom. Du har läst tillräckligt med e-postmeddelanden så att du kan imitera Mark Buffalo till den punkt där du verkar precis som han. Du skapar e-postmeddelandet på ett sätt som gör att Person B intet ont anar vad som verkligen händer, och nu kan du göra samma sak för Person B , eller värre.

Och det är bara en liten samling idéer. Det finns många olika användningsområden för någon annans referenser. Salta och hash dina lösenord, använd kollisionsresistenta hashalgoritmer som bcrypt och scrypt, och förhindra SQL-injektionsattacker. Snälla gör mig inte till en eskorterande sökande! Spara Mark Buffalo!

(Jag är medveten om att vissa webbplatser kan blockera ditt försök att få åtkomst till deras tjänster när du använder en annan IP, men det finns många sätt att kringgå det, och inte alla webbplatser gör det) .

Grattis för din potentiella grupptalan om du blir hackad.

Tack för historien, jag förstår poängen. Även om hur de sedan utfärdar en grupptalan mot mig är lite tuffa, om användaren använder samma lösenord överallt kan det vara mot någon
@Steve Tja, de skulle kunna visa att du inte gjorde allt som var möjligt för att skydda lösenordsdata som du fick - brottdata är vanligtvis kopplade till en källa. Om flera intrång inträffade, men ditt system var det enda med lösenord för vanlig text, ser det inte bra ut. Reglerna varierar beroende på land, men kräver i allmänhet att du har vidtagit branschstandard, även om de verkar vara för stora för en specifik applikation.
Det finns dataspår. Små brödsmulor som du kan lämna överallt. Om "Hacker" någonsin fångas, är chansen stor att de kan hitta ursprunget till hans skadliga beteende och det skulle leda tillbaka till dig, oavsett om de andra systemen har oskadade och osaltade lösenord eller inte.
@Downvoter, har du ett ord att dela med oss? Är du upprörd över att jag avslöjade vanliga mönster som används av skadliga individer som du för närvarande använder själv? Har jag fel? Förolämpade jag dig med min förvrängda humor? Vänligen dela. :)
Han kan bara återställa alla dina lösenord om han får tillgång till din e-post. Gå bara till PayPal och bankwebbplatser och fråga om lösenordsåterställning. Det är därför du måste vara riktigt proaktiv med e-postkonton, de är kritiska, du bör använda ett mycket bra lösenord på din e-post + 2-vägs autentisering
@Freedo, instämde.
Kommer bara att lägga detta här också: https://xkcd.com/792/
+1 esp. för sista meningen. Många länder har sekretesslagar som gäller för alla tjänster som erbjuder användarkonton. Även om du inte tror att din db har någon känslig information, kan det bara att använda industristandard hash / saltpraxis minska ditt potentiella ansvar om du blir hackad - det visar att du vidtar rimliga åtgärder för att inte vara den svagaste länk i en hackad operation i flera delar.
@Steve `Även om hur de sedan utfärdar en grupptalan mot mig är lite svag '- Det kallas" vårdslöshet ". I en rättslig miljö betyder det "underlåtenhet att använda rimlig försiktighet, vilket resulterar i skada eller skada på en annan." Detta är skäl för en rättegång. Fråga bara Sony, Ashley Madison, Home Depot, Target ...
@Freedo, Jag vill lägga till: vissa e-postar sig själva från sina andra e-postkonton då och då, så du kanske inte kan återställa lösenorden om de inte använder samma e-postkonto. Det kan ta lite lätt detektivarbete. Jag ville bara visa hur illa det kunde få i så många exempel som jag kunde tänka på just nu.
Jag tror att du kunde ha använt termen [rainbow table] (https://en.wikipedia.org/wiki/Rainbow_table) i ditt svar. Jag tror dock inte att en traditionell SQL-databas används för den här uppgiften. ;)
Självklart. En traditionell SQL-databas skulle användas om du vill lagra alla resultat online så att andra kan kontrollera. :) Har du sett dessa webbplatser?
Jag glömde hur trångsynt en del säkerhetsfolk kan vara. Vissa webbplatser har funnits där i flera år och bara för att de har lämnats utan stöd betyder det inte att ägaren kommer att bli föremål för en rättegång (utifrån formuleringen antar jag att vi har många amerikanska personer på denna styrelse och jag antar att stämningskulturen är vanligare där). Om du läser några av de saker som skrivs här så ska ingen få lov att lägga upp en webbplats om de inte har tillräckligt med resurser för att spendera jaga alla potentiella säkerhetsproblem ... affärer handlar om att balansera risk när den inte kan tas bort helt och hållet
Du skjuter dig verkligen i foten om du bestämmer dig för att inte skydda människors information. = /
@Steve Vad förväntade du dig? Du kom hit och frågade om alla branschstandarder, rekommendationer och bästa praxis egentligen bara är BS och om du bara kan ignorera dem. Varför tror du att människor reagerade som de gjorde? Från din kommentar avfärdar du bara allt detta som människor som är paranoida. Allvarligt kille, gör jobbet rätt eller gör det inte alls. Var inte killen som ger branschen ett dåligt namn eftersom du är för lat eller för inkompetent för att göra jobbet korrekt.
Jag ser ärligt talat inte var detta gick ur hand förrän du gjorde de anklagelserna. Jag tyckte att det var en bra fråga och verkligen behövde besvaras. Du kanske missförstod oss?
@MarkHulkalo Jag tror att människor blir sjuka och trötta på att se samma fråga i olika former om och om igen, frågade av någon som tycker att de är så smarta att de bara kan göra det på sitt sätt och flagrant ignorera alla branschens bästa metoder.
För att vara tydlig. Jag förstår och håller med om allt som sägs och arbetar med att sortera webbplatser som har budgeten för att få detta rättat. Min poäng är verkligen att vissa webbplatser inte har någon budget och / eller är gamla och att uppgifterna inte är riktigt värdefulla. Frågan är då att ta bort webbplatsen och stoppa verksamheten ELLER acceptera en partiell lösning ... och det är inte mitt samtal. Allt jag verkligen påpekade var att detta är ett verkligt beslut och att bara skrika imbecile på mig erkänner inte verkligheten. Jag ser kommentarer om att detta är en timmes arbete ... tro mig det är inte när du arbetar med Classic ASP!
Selenog
2015-10-28 17:32:33 UTC
view on stackexchange narkive permalink

En vanlig typ av intrång är skrivskyddad åtkomst till användartabellen. Detta beror på att den här tabellen används i koden som gör inloggningen som du inte behöver vara autentiserad för. Att få lösenorden skulle då göra det möjligt att läsa åtkomst till all data, men även om angriparen redan har full läsåtkomst på DB kan han fortfarande få skrivåtkomst via lösenorden, kunna logga in på kontot och enkelt ändra vissa data.

Inte ens alltid ett brott - i old school * nix-system (de som inte har implementerat "skugglösenord") har alla inloggade (privilegierade) användare sådan åtkomst.
user90546
2015-10-29 15:33:51 UTC
view on stackexchange narkive permalink

En mycket enkel anledning för saltning och hashning av användarnas lösenord är detta:

En användares lösenord är hans / henne hemlighet

Ingen annan borde veta det. Inte du, inte din kollega, inte DBA. Ingen . Enkelt så ...

Enligt din åsikt ... operativt under vissa omständigheter måste du "bli klient" men eftersom detta är en säkerhetswebbplats förväntar jag mig att operativ logik inte är högt rankad!
Om du har administrativ åtkomst till ett (korrekt utformat) system kan du "bli klient" utan att veta hans lösenord. Jag har aldrig behövt be någon om sitt lösenord för att kunna testa vad deras konto kan göra; Jag använder bara `sudo` (eller motsvarande).
@Steve Du vet hur alla de stora tjänsterna alltid säger att du aldrig ska berätta ditt lösenord till någon, även om de låter som om de kommer från $ SERVICE-support?
@Steve: lägger bara till en del funktioner på din webbplats som visar webbplatsen som användaren $ USER skulle se den, endast tillgänglig för administratörsanvändare. Du behöver inte använda en faktisk inloggning.
Thor Erik
2015-10-28 16:40:29 UTC
view on stackexchange narkive permalink

En del av saltning är att göra det svårare att analysera och stjäla lösenordet och använda deras användarnamn / e-post och lösenordskombination på andra webbplatser.

Det är ganska vanligt att användare återanvänder 1 eller 2 lösenord på flera webbplatser. Att ändra din algoritm till en som salter och tar lite mer tid (t.ex. bcrypt, scrypt och liknande) rekommenderas starkt och ganska enkelt att implementera på de flesta språk.

SEM
2015-10-29 15:44:59 UTC
view on stackexchange narkive permalink

Syftet med ett salt är tvåfaldigt: för det första introducerar det ett unikt (-ish) element till varje lösenord, så att om två användare råkar använda samma lösenord kommer lösenordets hashade text att variera. Om användare A ser att hennes lösenordshash är "QWERTYU123", och att User B: s lösenordshash också är "QUERTYU123", kan användare A dra slutsatsen att hon har samma lösenord som Användare B.

För det andra, det introducerar en betydande hastighetsstopp för alla som har tillgång till databasen som vill tvinga lösenorden med en ordboksattack. Utan salt kan angriparen helt enkelt hash "TRUSTNO1" för att få hash "QUERTYU123" och skanna sedan lösenordskolumnen för att se om den texten visas. Med ett salt måste angriparen tvätta om "TRUSTNO1" för varje rad i databasen för att testa för en matchning och lägga betydligt till mängden CPU som krävs för att kontrollera varje ordbokspost.

Nick Gammon
2015-10-31 10:00:44 UTC
view on stackexchange narkive permalink

om de har tillgång till databasen behöver de inte lösenordet eftersom de bara kan stjäla data direkt från databasen

Lösenordet är det värdefulla. Det beror på att många, många människor använder samma lösenord. Så lösenordet till din dukklubb kan vara detsamma som de använder för sin nätbank.

Jag ser efter ett system som innehåller mycket "lågkvalitativ" information, inget ekonomiskt annat än namn / adress / e-post etc.

Dessa är också värdefulla. Jag har tappat koll på antalet e-postmeddelanden som jag nyligen har fått från "eBay" eller "Apple" och hävdar att mitt konto har varit begränsat såvida jag inte "verifierar" mina uppgifter. De är vanligtvis uppenbart falska eftersom de inte nämner mitt riktiga namn. Men om du lagrar ett namn och en e-postadress är det mycket lättare att göra en realistisk utskick och be om mer personlig information. Till exempel:

Kära herr Smith på 42 Station Street, Gotham City.

Vi insåg precis att vår klubb överdebiterade dig detta räkenskapsår och vill återbetala 10 USD. Svara med dina bankuppgifter så att vi kan sätta in pengarna på ditt konto.

Så, avvisa inte e-post och namn.


Längst ner linjen är dock att hasning och saltning av din befintliga databas bara borde ta ungefär en timmes kodning och testning. Då kan du göra en "batchkonvertering" av lösenord för vanlig text till de hashade och saltade.

RVD
2015-10-28 19:59:45 UTC
view on stackexchange narkive permalink

Kryptering av användarinformation som namn, e-post, etc. och lagring i databas snarare än att lagra den i ett råformat ger en extra säkerhet för din applikation. För det andra kan personer som har åtkomst till din databas inte heller läsa data enkelt. Alla typer av information som du lagrar och som kommer från alla kunder har sekretess. Eftersom det är deras data och det är ett utvecklaransvar att lagra det på ett sätt som gör det svårt för hacket att göra mening, vare sig det är låggradig information eller topphemlig information. Dekryptering och kryptering av data bör också göras på serversidan eftersom servrar i allmänhet hålls bakom brandväggen. Så det blir säkrare ur säkerhetsperspektiv.

codykochmann
2015-10-29 01:50:03 UTC
view on stackexchange narkive permalink

Jag kan se vad du menar om angriparen också kunde komma åt databasen. Saken är dock att ett väldesignat säkerhetssystem bara låter databasen lagra information som både användaren och servern har krypterat individuellt.

Generellt är lösenordet det första fältet med dolda värden där du kan låta dina användare ge som kan hashas för att dekryptera deras data för att ge ett andra säkerhetsskikt om databasens krypteringsnycklar någonsin är äventyras. På det sättet, även när det finns ett brott, är användarens data fortfarande säker.

anomaly
2015-10-29 23:59:19 UTC
view on stackexchange narkive permalink

I detta sammanhang är hashpunkten baserad på tanken på en envägs- eller dörrfunktion: en funktion som är lätt att beräkna men svår att reversera. När användaren genererar ett lösenord beräknar systemet sin hash och lagrar det värdet i databasen. När användaren skickar in ett lösenord för att komma in i systemet beräknar den sin hash och jämför det med värdet i databasen. Om de är desamma, bra; om inte, så var lösenordet fel och användaren bör hindras från att komma åt systemet. För att detta ska fungera behöver hash två egenskaper: (1) Olika originalvärden hash till olika värden; (2) Det är beräkningsmässigt svårt att gå från hashen till det ursprungliga värdet.

Så varför bry sig sig om hash alls? Om någon hackar in i din databas (inte bara genom datorhackning utan genom socialtekniska attacker, lämnar en utskrift på bussen, agerar av en missnöjd anställd, etc.), allt de får är en serie hashvärden. Det är svårt att återställa det ursprungliga värdet från ett hashvärde, så det här är inte särskilt användbart för en hackare. Om lösenorden för klartext lagras i databasen vinner hackaren om databasen äventyras. han har direkt tillgång till alla konton och lösenord, och han kan i princip göra vad han vill. Denna inställning betyder också att du inte har tillgång till människors lösenord. Det här är bra; även om du litar på dig själv litar du antagligen inte på --- och borde inte behöva lita på --- din motsvarighet i din bank, din föregångare eller efterträdare på jobbet etc. Du borde inte behöva vara beroende av storheten eller infall av en administratör för att säkerställa att din information är säker.

När det gäller salter nämnde jag ovan att hash måste ha två icke-privata egenskaper för att vara effektiva. (Det finns några ytterligare som jag hoppar över för nu.) Funktioner som har dessa egenskaper är inte enkla att hitta, och det vore oklokt att förlita sig på den specifika administratören av en webbplats för att komma med en anständig. Istället finns det allmänt tillgängliga hashes som de flesta använder. Poängen med ett salt är att se till att olika platser effektivt använder olika hash: istället för att bara hasha 'lösenord', istället 'salt' + 'lösenord' för olika värden av 'salt'. Det betyder att om någon använder samma lösenord på två webbplatser, har de faktiskt olika hash på de två systemen, så att en hackare inte kan använda det ena för att bryta det andra. Utan saltet kunde hackare bara tvinga alla hash för lösenord av rimlig längd. Jag nämnde ovan att hash måste vara svårt att vända. Om du har en tabell över alla möjliga hash för lösenord upp till, t ex 10 bokstäver (eller till och med bara de vanligaste lösenorden), är det trivialt att vända hashen; slå bara upp det i tabellen.

Karl Bielefeldt
2015-10-30 23:13:35 UTC
view on stackexchange narkive permalink

Förutom de andra svaren, kom ihåg att det finns många grader av sårbarheter mellan helt säker och fullständig åtkomst till en databas. En sårbarhet kan bara avslöja vissa lösenord, eller bara de första tecknen i den, eller vara svår att associera med en viss användare, etc. Hashing och saltning kan hindra ett mindre brott från att bli ett stort.

Även inkräktare vill begränsa sin egen exponering. Ju längre de använder en sårbarhet eller bakdörr för att komma in i ett system, desto mer sannolikt kommer de att bli upptäckta och utestängda innan de uppnår sitt mål. Om du lämnar dina lösenord oskadade och osaltade, har du bara gett dem ett väldigt enkelt sätt att komma tillbaka in i systemet som alla användare, som är extremt svårt att upptäcka och mildra.

jmoreno
2015-10-30 11:19:26 UTC
view on stackexchange narkive permalink

Jag tror att det bästa sättet att uttrycka detta är: året är 2015, den mest privata och personliga informationen som dina användare överlåter till dig är deras lösenord och användar-id. Skydda det, inte med ditt liv utan med din okunnighet, inte med din förmåga utan din oförmåga.

Om du inte vet deras lösenord och inte har något sätt att återställa sitt lösenord, kan ingen stjäla det från dig eller tvinga dig att avslöja den.

Alla behöriga digitala tjuvar, med valet mellan tusen namn och adresser och tusen e-postadresser / användarnamn och lösenord, kommer att ta det senare varje gång. >

Jag förstår kostnad och tid, men om det görs rätt, från början tar det verkligen ingen extra tid alls, och att byta till en säkrare metod är inte det tidskrävande.



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...