WN

WN (https://www.wn.se/forum/index.php)
-   Allmänt (https://www.wn.se/forum/forumdisplay.php?f=2)
-   -   Lagra lösenord i klartext (https://www.wn.se/forum/showthread.php?t=5643)

Robert 2005-01-24 09:01

Citat:

Originally posted by Jonas@Jan 23 2005, 23:28
En nackdel med MD5 är att 2st (eller fler) olika filer/strängar/osv kan ge samma hash, det vill säga att man kan komma förbi inloggningen utan att känna till det rätta lösenordet.
Faktiskt, i teorin (ja, i praktiken också) så finns det ett oändligt antal textsträngar som producerar ett identiskt hash, MEN det är omöjligt att i praktiken ens hitta 2st likadana.

Sen måste man givetvis sätta sitt eget systems "viktighet" i förhållande till den som ska hacka det... Jag tror inte att nationella säkerhetsorgan (med resurser och teknik) vill hacka era cmsverktyg eller ta över någon användares konto på eran site.
I en realistisk värld så kommer Nisse att testa några lösenord, kanske brutforce submitta lite innan han ger upp. :rolleyes:

guran 2005-01-24 10:14

Citat:

Ursprungligen postat av Robert
Citat:

Ursprungligen postat av Jonas
En nackdel med MD5 är att 2st (eller fler) olika filer/strängar/osv kan ge samma hash, det vill säga att man kan komma förbi inloggningen utan att känna till det rätta lösenordet.

Faktiskt, i teorin (ja, i praktiken också) så finns det ett oändligt antal textsträngar som producerar ett identiskt hash, MEN det är omöjligt att i praktiken ens hitta 2st likadana.

I höstas var det en forskare som publicerade en artikel och hävdade att han hade lyckats ta en text hasha den och sedan manipulerat texten och lyckats få ut samma hash. Okej, möjligheten finns.

Men hur ska ett lösenord på kanske 8-10 tecken manipuleras? Troligen kommer antal möjliga kombinationer på 8-10 tecken aldrig att ge samma hash. För att få samma hash talar vi om textmassor. Möjligen dokument som innehåller tusentals tecken.

eg0master 2005-01-24 10:40

Citat:

Originally posted by guran@Jan 24 2005, 11:14
I höstas var det en forskare som publicerade en artikel och hävdade att han hade lyckats ta en text hasha den och sedan manipulerat texten och lyckats få ut samma hash.
Låter intressant. Du vet inte var man kan hitta den artikeln?

zoran 2005-01-24 10:52

Citat:

Ursprungligen postat av anders.n
Citat:

Ursprungligen postat av eg0master
Efetrsom MD5 är en envägsfunktion så har du ingen nytta av MD5 hashen när du ska lista ut lösenordet. Du kan inte göra någon form av analys av hashen som hjälper dig att hitta lösenordet. Det enda du kan göra är att pröva alla möjliga lösenord. Att du har hashen betyder bara att du vet när du ska sluta (precis som om du har en robot som försöker logga in genom att prova olika lösenord).

Dock så är det viktigt att man använder någon form av "salt" också, då det finns färdiga rainbow tables (för-uträknade hashsummor) för olika hash-algoritmer. Har man även med ett bra "salt" när man lagrar hashet så måste man brute-forcea lösenorden.

Sedan är det ju alltid bra att tvinga användarna att ha relativt säkra lösenord också. :)

*Hugger ett inlägg från högen*

Först av allt, som flera redan nämnt är det bra att skapa krypterade lösenord. Först för att man vet att flera använder samma lösenord till allt möjligt och sen även för att minimera skadan ifall någon skulle komma åt databasen.

Massa folk pratar om "bra salt". Vad är salt för något? 2 stycken slumpmässiga ASCII-tecken. Iallafall ifall man pratar om salt till crypt()-funktionen. (PHP använder ju unix-standardlibbet för det).

Om du i php kör crypt("foobar") så klämmer den dit 2 stycken tecken som salt. Vilka? Ja de får man reda på genom att titta på det krypterade lösenordet. Är krypterade lösenordet "RS4CNv1lS3cLo" så har saltet varit "RS". Salt är ju inte på något sätt hemligt. Snarare tvärtom. Det är allmänt känt.

Därför är det viktigt att när man ska KRYPTERA lösenordet så ska man inte använda samma lösenord som salt. Betrakta liten visning i python:

>>> from crypt import crypt
>>> crypt("foobar","RS")
'RS4CNv1lS3cLo'
>>> crypt("foobar","foobar")
'foa3VCPbMb8XQ'
>>>

(Cryptmodulen i python använder samma libbar som crypt() i php)

Som vi kan se.. så är första lösenordet "foobar" krypterat med salt RS. Vi fick RS4CNv1lS3cLo. Andra lösenordet är krypterat med "foobar" som salt, eller rättare sagt "fo". Som vi kan se börjar den andra krypterade strängen med "fo" i så fall och kan avslöja hur vårt lösenord börjar. (Ja förutsatt man har tillgång till koden och kan se denna miss).

Så i och med att crypt krypterar alltid likadant ifall man använder samma salt är ju det sättet det enda vi kan verifera lösenord.

Med andra ord... crypt("foobar", $cryptedpwd) använder första två tecken från $cryptedpwd som salt till att kryptera foobar. Är "foobar" rätt lösenord så ska resultatet bli samma som $cryptedpwd.

Med andra ord. "Bra salt" som någon skrev är allt förrutom de första två bokstäverna på lösenordet. :)

Det finns INGET sätt att dekryptera lösenordet. PUNKT. Det finns sätt att gissa dåliga lösenord (brute force), och det är inget som kan hindra en från att göra det mer än att ha databasen skyddad och kanske tillåta max 3 felaktiga loginförsök på en timma.

Om det är någon som känner eller tror att jag har fel där kan denne gärna försöka dekryptera:
BassB1YipTunI

Så personligen tycker jag inte något finns att säga emot crypt() när det kommer till UNIX. På Windows vet jag ärligt talat inte, men jag bryr mig inte heller. Den tar jag inte ens i med tång för att inte tala om att försöka implementera ens låtsassäkerhet.

/Zoran

Robert 2005-01-24 12:30

Hmmm, jag brukar "salta" innan jag md5'ar...är det inte så man gör? I mitt fall är alltså saltet inbakad i den kompilerade .Net koden, vilket gör det svårare för någon med tillgång till servern att kolla upp saltvärdet/värdena (koden är dessutom obfuskerad). Förstod inte riktigt meningen med att se saltet ibörjan av av hashen?

Exempelvis:

"13MySAaAl98T" + strPassword + "11abc34SecondSaltTjolahopp998822"

.. detta hashas sedan.

Den paranoida kan ju alltid trippelhasha hashen så blir det svårare att endast leta efter ett salt i den dekompilerade koden utan man måste även in och titta i logiken.

eg0master 2005-01-24 12:32

Citat:

Originally posted by zoran@Jan 24 2005, 11:52
[...]
Så personligen tycker jag inte något finns att säga emot crypt() när det kommer till UNIX. På Windows vet jag ärligt talat inte, men jag bryr mig inte heller. Den tar jag inte ens i med tång för att inte tala om att försöka implementera ens låtsassäkerhet.

/Zoran

Hehe, kul att du talar så varmt om unix crypt och att denna funktion fungerar utmärkt som substitut till hash-metoder.
Och jag kan bara hålla med för det unix crypt gör är just en hashning. Det är en envägsfunktion precis som MD5 och SHA1. Så det fungerar alldeles utmärkt.

Funktionens namn förvirrar, men som jag sa från början. Man måste göra skillnad på kryptering där man kan dekryptera (dvs utifrån kryptot återskapa klartexten) och hashning (kallas även envägskryptering) där man bara kan jämföra de "krypterade" strängarna och se om de matchar.

Robert: Ja ditt sätt att "salta" MD5-hashen adderar en dimension som försvårar försöken att återskapa algoritmen, men i praktiken saknar det betydelse eftersom saltet är konstant är det lika svårt att knäcka ett lösenord med salt som utan.

omid 2005-01-25 04:17

Citat:

Originally posted by Robert@Jan 24 2005, 06:30
Förstod inte riktigt meningen med att se saltet ibörjan av av hashen?
Meningen med ditt salt är alltså att ett och samma lösenord ska kunna få olika hashvärden.
Om t.ex. två användare har samma lösenord, t.ex. "apa", så kan det ena hashas till "hu832879wr98" och det andra till "ijogst8wisosy".

Detta är alltså bra så blir det jobbigare för någon som försöker brute-force:a en lista med lösenord.
Tänk dig att du har en ordbok med N ord (lösenord som du vill testa),
för att testa denna lista på en lösenordsfil med M användare som alla har olika salt så
måste du totalt hasha M*N lösenord (istället för N st).

Ex, vill du testa lösenordet "apa" på denna lista:
kalle:hu832879wr98
kajsa:ijogst8wisosy

Så får du först anropa crypt("apa","hu") och sedan crypt("apa","ij"), totalt 2 anrop alltså.

Hade listan haft samma salt, alltså:
kalle:hu832879wr98
kajsa:huogst8wisosy

Så hade det räckt att anropa crypt("apa","hu") 1 gång.

Du gör det helt enkelt livet lite jobbigare för den som vill brute-force:a. :)

Jonas 2005-01-25 04:29

Kan kort och gott citera min lärare i datasäkerhet.

"Allting är säkert tills den dagen någon jäkel ger sig fan på att lyckas"

Vill någon hacka er så gör personen det (det vill nu säga om personen innehar kunskapen).

Enda sättet att skapa säkerhet är om man kan tänka som hackaren och är RIKTIGT paranoid.

Har sett skräck exempel på säkerhet.

Ett community (namnet utelämnar jag) körde en SQL fråga i GET (?sql=select+*+from+table)
I själva koden låg det en <?=print_r()?> eller motsvarande bortkommenterad i html (<!-- -->)

Rätt tragiskt att det gick att köra tex. select * from users och sedan se resultaten i sidan...

guran 2005-01-25 11:24

Alla koder eller krypteringar går att dekryptera. Ta t.ex. RSA där krypteringen är öppen, dvs. den matematiska funktionen är känd. Att dekryptera en krypterad kod i RSA görs genom att prova alla kombinationer av de två nycklar som används för krypteringen. Det är bara det att för två nycklar med 4096 bitars längd tar det kanske 150 år för alla världens datorer att fixa det.

Att dölja en text behöver nödvändigtvis inte betyda att den aldrig ska gå att läsa, utan målet kan vara att dölja den tillräckligt länge. När texten väl är dekrypterad har den inget värde längre.

Kristofer 2005-01-25 16:16

MD5 i osaltat format är inte speciellt säkert då de flesta användare har lösenord i form av namn eller ord som finns i språket.

En snabb sökning i en ej nämnd databas skulle lätt hitta ett lösenord av tio av lunarstorms användare och förmodligen fler då de flesta har tämligen "enkla" lösenord där och på många andra ställen där vanligt folk väljer sina egna lösenord som de sedan ska försöka komma ihåg.

Använd ett bra salt som tidigare talare påpekat om ni använder md5.


Alla tider är GMT +2. Klockan är nu 08:00.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson