ugrás a tartalomhoz

Hogyan hasheljünk?

rockybro · 2009. Júl. 27. (H), 18.57
Úgy tudom, hogy jelszavak titkosításához ma már közel sem elég, ha simán csak valamelyik hash függvénnyel kódoljuk, mert a szivárvány táblák segítségével a kódolt jelvszavak egy része seperc alatt visszafejthető… A problémára talán a legjobb megoldás, ha hashelés előtt jól megsózzuk. Az érdekelne, hogy melyik a legjobb választás a hashelési módszerek közül.

A kérdéseim:

  • Hány sót használjak? Elég egy, vagy legyen a jelszó előtt és után is?
  • Mit és hányszor kódoljak?
  • Használjak esetleg két különböző hash függvényt?
  • Kódoljam a jelszó hash-ébe mondjuk a felhasználónevet is?

És hogy illusztráljam a lehetőségeket:

  • md5($pass.$salt)
  • md5($salt.$pass)
  • md5(md5($pass))
  • md5(md5(md5($pass)))
  • md5(md5($pass).$salt)
  • md5(md5($salt).$pass)
  • md5($salt.md5($pass))
  • md5($salt.$pass.$salt)
  • md5(md5($salt).md5($pass))
  • md5(md5($pass).md5($salt))
  • md5($salt.md5($salt.$pass))
  • md5($salt.md5($pass.$salt))
  • md5($salt.md5($pass).$salt)
  • md5(sha1(md5(sha1($pass))))
  • md5($username.md5($pass).$salt)
  • md5(md5($username.$pass).$salt)
  • sha1($salt.$pass)
  • sha1($username.$pass)
  • sha1($username.$pass.$salt)
  • sha1($salt.sha1($salt.sha1($pass)))


Szerintem: md5($salt.md5($username.$pass).$salt)

Szerintetek melyik a legoptimálisabb megoldás, ha szem előtt tartjuk a biztonságot és a sebességet egyaránt?
 
1

$hash =

gex · 2009. Júl. 27. (H), 20.05
$hash = sha1(strlen($password) . md5($password) . $salt);
sebességről pedig itt szerintem felesleges beszélni. majd ha ott tartasz hogy már csak a hash-képzés lassítja a rendszered, akkor térjünk vissza a kérdésre. ;)
2

Azért örülnék, ha még a

rockybro · 2009. Júl. 27. (H), 20.58
Azért örülnék, ha még a weboldal elindítása előtt találnék egy tuti módszert, mert így megspórolhatnám a menetközbeni átálással járó nehézségeket.
3

használd azt amit gex írt.

solkprog · 2009. Júl. 27. (H), 21.34
Én is hasonlót használok mint amit gex írt. Szerintem (is) ez az egyensúly a "gyors" jelszó kódolás és a "biztonság" között.

üdv,
Balázs
4

Szóval érdemes kombinálni a

rockybro · 2009. Júl. 27. (H), 22.18
Szóval érdemes kombinálni a hash függvényeket?
Mért jó az, ha a hash-be belekódoljuk a jelszó hosszát? Azt még megértem, hogy mondjuk adatbázisban tároljuk a jelszó hosszát, és az alapján tudjuk ellenőrizni, hogy megfelelő jelszót adtak-e meg, avagy csak véletlen egyezik a hash...
Nem jobb, ha előre is teszünk saltot, és nem csak a végére?
5

Nem!

janoszen · 2009. Júl. 28. (K), 05.04
Általános tévhit, hogy a többszörös hashelés jobban titkosítja a jelszót, miközben igazából szűkíti a lehetséges hashek terét, ezzel növelve annak az esélyét, hogy valaki tud ütközést generálni. Ez józan ésszel belátható, hiszen egy nagyobb teret képezünk le egy kisebbre és ha ezt kétszer megcsináljuk, akkor az eredmény egy még kisebb tér lesz.

A sózás nyilván itt segít, lehet mindenféle trükkös dolgot kitalálni, de tényleg szükség van rá? És ha igen, biztos lehetsz benne, hogy a trükkösen kitalált hash függvényed nem éppen ellened dolgozik? Mert ha sózol valamit, viszont kétszer hashelsz, akkor azt kellene bizonyítanod, hogy a sógeneráló random függvényed jobban véletlenszerűsít, mint amennyit a kétszeres hashelés elvesz a térből.

Mindezt nem azért mondom el, mert a weben általánosságban szükség lenne olyan übersecure megoldásokra. Kaptam én olyan kérést ügyféltől régebben, hogy álljunk át plain text jelszó tárolásra, hogy az elfelejtett jelszónál a régi jelszavát lehessen neki kiküldeni. Fölvilágosítottam a veszélyekről, azt mondta, rendben. Ez ilyen, a leggyengébb pont még mindig a felhasználó, aki fölírja a monitorra, DOC fájlba, stb a jelszót.

Ha már kriptográfiával szeretnél foglalkozni, akkor keress egy szimpatikus hash függvényt. Egyébként én a crypt függvényt szoktam használni, azzal egyszerű hashelést váltani.

Disclaimer: ez mind azon alapul, amit az egyetemen fölszedtem. Nem űzöm napi szinten a kriptográfiát, szóval jó lenne, ha valaki hozzáértő megnézné a dolgot.
20

gondolkozzunk együtt

solkprog · 2009. Júl. 28. (K), 21.25
(fáradt vagyok úgyhogy lehet totál baromságot mondok, de nem bírom ki hogy erre ne reagáljak)

Példa: sha1(md5($pass))
desifrírozás (ha tudjuk az sifrírozás lépéseit):
1, Találj egy olyan md5 hasht amiből ez a sha1 hash lesz. (az összes md5 kulcsot kell csak végigpróbálni, de végig kell próbálni)
2, (Megvan az md5 hash.) Találj egy olyan kulcsot ami ezt az md5 hash-t adja.

Szóval még ha tudjuk a hashelő algoritum lépéseit akkor is az első lépés plusz egy lépés volt a kódfejtőnek, egy szimpla md5($pass) szemben. De ha nem tudja hogy a sha1-en belül mit büvészkedtünk akkor nem csak az md5 kulcsokat kell végigellenőrizze.

üdv,
Balázs
23

...és a fejlesztő...

saxus · 2009. Júl. 29. (Sze), 10.37
Ez ilyen, a leggyengébb pont még mindig a felhasználó


... aki azt hiszi, hogy 1-2 babona alapú trükk miatt elhagyja az alapvető input ellenőrzést és figyelembe se veszi, hogy mondjuk egy ' OR 1=1 "jelszóval" is be lehet lépni bármelyik userrel.

Láttam már olyan kódot, ahol az alkotója szentül meg volt győződve arról, hogy milyen trükkösen kivédett mindent, holott csak a szerencséjének köszönhette, hogy az utána lévő kódot úgy írta meg, hogy kiessen a nem megfelelő adat.

Egyébként az userek jó részének jelszó elnevezési szokása katasztrófa és sokadszorra se érti meg, hogy miért nem jó jelszó az 1234. Ilyenkor meg teljesen mindegy, hogy hogy van sózva, faragva a jelszó hashe.
25

Kompatibilis hash... :)

AuthGabor · 2009. Júl. 29. (Sze), 16.28
Szerintem az elterjedtebb módszerek közül kellene választani, mivel bármikor esélyes, hogy LDAP vagy egyéb AD felől kell authentikálni... :)

Például OpenLDAP esetén ilyesmi tökéletes:
MessageDigest digest = MessageDigest.getInstance("SHA1");
byte[] hash = digest.digest(password.getBytes());
char[] base64 = Base64Encoder.encode(hash);
String encodedPassword = new String(base64);
encodedPassword = Base64Encoder.encodeString("{SHA}" + encodedPassword);

Nem érdemes ennél jobban variálni, nem ezen fog múlni a rendszer védelme vagy biztonságossága.
6

md5-ről

szabo.b.gabor · 2009. Júl. 28. (K), 08.15
mit is csinál az md5? beadsz neki a bemenetére bármit és kiköp a végén egy 128 bites témát (32 hexa számot, egy hexa szám 4-bit). a lényeg, hogy (max) 2^128 variáció van (ha tényleg elég jó az md5..)

nem tudom mire gondolsz szivárvány tábla alatt, de md5-nél nem az a lényeg, hogy ugyanazt a jelszót adja be a rosszindulatú júzer, hanem az a lényeg, hogy egy olyant találjon aminek a lenyomata ugyanaz. úgyhogy ennek - md5(md5(md5())) - az égvilágon semmi értelme, sőt ahogy proclub is írta, még rossz is lehet.

md5-tel esetleg úgy tudod növelni a hatékonyságot, hogy a jelszót darabokra szeded és külön külön készítesz hash-t és az összefűzött hash-t használod.

md5($part1).md5($part2).

kérdés, hogy szükség van-e ilyesmire?

tegyük fel, hogy igazából az md5() a 2^128 variáció helyett gyakorlatban csak 2^32 különböző lenyomatot generál.

2^32 = 4 294 967 296

tehát jó sok :)

ha biztonságra akarsz menni, akkor inkább kezeld a hibás próbálkozásokat (3 rossz próba után időkorlát, ban, stb..), valamint azt, hogy ne tudjon olyan jelszót megadni a júzer, ami szótárral könnyen törhető. esetleg kötelezően adass új jelszót a júzerrel.

én így látom a dolgokat
12

Nana!

fchris82 · 2009. Júl. 28. (K), 12.19
md5-tel esetleg úgy tudod növelni a hatékonyságot, hogy a jelszót darabokra szeded és külön külön készítesz hash-t és az összefűzött hash-t használod.

md5($part1).md5($part2)

Ha vmi igazán rossz ötlet, akkor az ez! Nyers erős próbálgatás esetén egyszerűen belátható, hogy ez a módszer balgaság. Tegyük fel, hogy csak számokat tartalmazhat a jelszó és 4 karakteres! A variációk száma ebben az esetben: 10 x 10 x 10 x 10 = 10 000 . Ha ez van hash-elve, ennyit kell próbálkoznom maximum. Most ha ezt 2 x 2 karakterre bontom és azt tárolom el, akkor a próbálkozások száma drasztikusan lecsökken: 10 x 10 + 10 x 10 = 200!
Azt meg nem ér mondani, hogy "de ehhez tudni kell, hogyan működik", mert a dolognak úgy is biztonságosnak kell lennie, hogy mindenki tudja, hogyan működik.

ha biztonságra akarsz menni, akkor inkább kezeld a hibás próbálkozásokat

Ez meg kicsit szezon-fazon. Az adatbázisban azért kell elkódolni a cuccot, hogyha ahhoz bárki hozzáfér (akár évek múltán), akkor se tudja kitalálni, hogy milyen jelszavakat használtak a user-ek. És mivel konkrétan hozzáfér az adatbázishoz, ezért nincs olyan, hogy "próbálkozások száma".

2^32 = 4 294 967 296

tehát jó sok :)

Nem, nem sok és a megközelítés is elvi hibás. A jelszó hossza és "variációs nehézsége" - hány és milyen karaktereket tartalmaz - határozza meg a törhetőséget nyers erő esetén és nem a hash végeredményének hossza!!! Mert ha a felhasználók 3 karakteres, számokból álló jelszót használnak, akkor egyrészt a variációk száma máris csak 1000, másrészt 99%-uk a 007-et választotta.

nem tudom mire gondolsz szivárvány tábla alatt

A szivárvány tábla egy néhány GB-os "adatbázis", amiben a hash-ek mellé oda van írva, hogy minek az eredménye. Tehát már vki jó előre legyártotta az md5 hasheket '0'-tól 'zzzzzzzzzz'-ig mondjuk és így csak a hashek alapján nagyon gyorsan megtalálható, hogy mi volt a jelszó. Ezért érdemes vhogy módosítani a mezei md5 hash-elést.
44

md5 hash

Balogh Tibor · 2016. Ápr. 2. (Szo), 17.19
Nem jól tudod, az md5 egy 16-os számrendszerbeli, 32 helyiértékes számot generál, 16^32. Ez egy kurva nagy szám.
45

16

vbence · 2016. Ápr. 2. (Szo), 19.31
16^32 = (2^4)^32 = 2^128
7

Nálam

Tanul0 · 2009. Júl. 28. (K), 08.50
Nálam sha1($salt.md5($pass).md5($user).$salt);
8

Felesleges elbonyolítani

Heilig Szabolcs · 2009. Júl. 28. (K), 10.18
Jó páran már említették hogy felesleges, de mások példáiban mégis többször előjön a többszörös hash-elés ilyen-olyan formában. Ez nem más, mint babona. Tanul0 példája is arról szól, hogy az sha1 kódolás előtt még külön md5-öli a jelszót és a felhasználónevet. Ez jó esetben is csak nem árt (ezt is fejtegették már előttem). Minimum az adott rendszerre egyedi salt-ra mindenképp szükség van, mivel ez biztostja, hogy a különböző rendszerekben ha valaki ugyanazt a jelszavát használja, ne lehessen az azonos hash-ek alapján köztkeztetéseket levonni. Ez persze kevés, mert ha a rendszerben mindenkinél azonos a salt, akkor több különböző user azonos jelszavának megint csak azonos lesz a hash-e, ami a fentiek miatt megint csak nem jó. Ezért szokás még valami userre jellemző egyedi dolgot is a hash-be tenni (pl. felhasználónév, vagy azonosító). A másik megoldás, amit pl. a Symfony sfGuard pluginje is alkalmaz, hogy minden felhasználóhoz generál és tárol egy egyedi salt-ot.

Egyetlen fontos kritérium van csak tehát a hash-elni kívánt karakterlánccal kapcsolatban. Mégpedig az, hogy rendszeren belül illetve lehetőleg globálisan nézve is egyedi legyen. Ennél több nem kell, attól nem lesz egyedibb a hash alapja, hogy benne az amúgy is egyedi felhasználónév helyett annak md5-ölt változata van ott.

Fontos tudni, hogy a különféle hash megoldások (mint az md5 vagy az sha1) egyik fontos jellemzője az, hogy arra se lehessen következtetni két hash-ből, hogy a alapjuk kicsit, vagy nagyon eltér. Azaz ha csak 1 bit a különbség, vagy akár az összes 75%-a, ugyanúgy teljesen eltérő lesz a hash attól,amit az eredeti bitsorra kapnánk. Gondolom, ennek nem ismerete okozhatja ezeket a többszörös hash-elési hókuszpókuszokat.
9

Világosítsatok föl légyszi...

tisch.david · 2009. Júl. 28. (K), 10.57
...hogy miért olyan kardinális kérdés ez? Én eddig azt gondoltam, hogy ha valaki illetéktelenül hozzáfér az adatbázishoz, akkor pont azokhoz az adatokhoz fér hozzá illetéktelenül, amit a user(ek) "jelszóval védtek". Vagyis: minek fáradna a jelszó feltörésén, ha minden előtte van. Vagy ez csak a furmányos SQL injection próbálkozások miatt kell?

Thx!
Dávid
11

Felvilágosítás

Joó Ádám · 2009. Júl. 28. (K), 11.31
A jelszavakat azért kell titkosítani, mert a legtöbb felhasználó esetében más alkalmazásokhoz is hozzáférést biztosítana a támadónak, ha az sikeresen szerzi meg az adatbázis tartalmát.

Sózni, saltolni pedig a brute force technika elleni védekezésképp tanácsos: nagy mennyiségű karakterláncot (tipikusan lehetséges jelszavakat egy szótár alapján) előre hashelve az idő- és processzorköltséges számítások elvégzése egyszeri feladat, majd ezek után egy egyszerű keresés kérdése a zagyvalékból megismerni az eredeti jelszót. Véletlenszerű karakterlánc jelszóhoz illesztésével gyakorlatilag új jelszót hozunk létre, ami garantáltan nem szerepel egyetlen szótárban sem.
14

Mert semmi köze a

Török Gábor · 2009. Júl. 28. (K), 16.19
Mert semmi köze a szolgáltatómnak az én jelszavamhoz. Pláne, ha véletlenül ugyanazt használom náluk, amit máshol is.
10

Ahogy én csinálom

Joó Ádám · 2009. Júl. 28. (K), 11.22
Én egyrészt minden alkalmazáshoz képzek egy globális sót, illetve felhasználónként egyet-egyet. A jelszó tárolva: md5($dynamicSalt . $password . $staticSalt).

Ahogy fenn már sokan kifejtették, a többszörös hashelés nemhogy nagyobb biztonságot nem ad, de csökkenti a biztonságot.

A kétféle só célja a kétoldalú védelem: ha az adatbázis esik áldozatul támadásnak, és a jelszavakkal tárolt salt ismeretessé válik a behatoló előtt, akkor a globális még mindig védelmet nyújt, illetve fordított esetben, ha a kiszolgáló kompromittálódik, akkor még mindig ott vannak az egyedi saltok (és természetesen a globális sónkra szabott szivárványtáblák ellen is ez véd).

A saltot ASCII 33–126 között képzem véletlenszerűen.

(A fenti megoldás tippként bekerült a Zend Framework kézikönyvébe is.)
13

Tetszik!

rockybro · 2009. Júl. 28. (K), 15.56
Tetszik!

Kb hány karakterből álló sót érdemes használni? Az általad linkelt zendes oldalon 49 karakteres só készült. Nem sok ez egy kicsit?
16

Érzésre

Joó Ádám · 2009. Júl. 28. (K), 19.55
Az bizony pontosan 50 karakter hosszú :) Igazából nem tudom, hasraütésre választottam egy nagyobb számot (így a felhasználó gyakorlatilag garantáltan egy ötven karakternél hosszabb jelszót használ), de ha te sajnálod a helyet az adatbázisban, akkor kisebbre is veheted.
41

.

Blackfire · 2009. Szep. 23. (Sze), 00.16
Az jelent valami plusz védelmet, ha a már kész hash két végéhez még pár random karaktert fűzök, így a hashből nem látszik, hogy md5-ös és ilyen szivárványtáblában kell keresni ill, bruteforce is tovább tart?
15

Ehhez mit szóltok?

Max Logan · 2009. Júl. 28. (K), 16.23
sha1( substr( md5($password), 0, 32 - strlen($salt) ) . $salt );
17

Indoklás?

Joó Ádám · 2009. Júl. 28. (K), 19.58
Miért jó?
19

Nem saját ötlet

Max Logan · 2009. Júl. 28. (K), 20.25
18

Milyen hosszú a szó?

janoszen · 2009. Júl. 28. (K), 20.07
Mint már elmondtuk, kár trükközni. Az ilyen esetekben a LEGGYENGÉBB hashelés erőssége fog számítani, amit tovább csökkentesz azzal, ha mondjuk a jelszó hosszából elveszel.

Unix körökben a crypt függvény használatos valamilyen, de mindenképpen EGY darab hash függvénnyel. Ráadásul ott sokszorta nagyobb a veszély, hogy valaki megszerzi az adatbázist, hiszen vannak lokális felhasználók, akik parancsokat tudnak futtatni.

Egy szóval: crypt, vagy ha erősebb hashelést akartok alkalmazni (pl sha512) akkor saját crypt implementáció (nem olyan borzalmasan bonyolult) és semmi több. (A crypt tartalmazza a sót is.) Egyébiránt javaslom meglesésre az mcrypt extensiont.

Saját crypt írásához az MD5 példája a doksiból:
$1$rasmusle$rISCgZzpwk3UhDidwXvin0

Az első három karakter a hash típusát jelzi, utána valamennyi a salt, a többi pedig maga a hash. Esetleg ki lehet adni egy unixon a man 3 crypt parancsot vagy meg lehet nézni a Wikipediát
21

Ez nagyon jó

Tanul0 · 2009. Júl. 29. (Sze), 05.16
md5Crypt

Emlékszem mennyit szívtam vele, amikor még nem csináltam meg az admin felületet a mail rendszeremhez, és a jelszóval szívtam :D és kiderült, hogy szóköz lett volna az utolsó karakter. Azóta kicsit átírtam a generátort, és *.* teszek a végére, hogy tudjam ha van szóköz.

akit érdekel a script: itt letöltheti perlben, vagy php itt
22

Számomra ebben az érdekesnek

csaba86 · 2009. Júl. 29. (Sze), 09.40
Számomra ebben az érdekesnek tartott témában már csak egy valami nem világos. A sót tárolhatom adatbázisban? Vagy mindig generálom amikor szükségem van rá? (Persze mindig ugyanolyat, ugyanannak a usernak.)
24

Tárolod

janoszen · 2009. Júl. 29. (Sze), 11.03
Eltárolod a jelszó mellé. A só lényege ez esetben az, hogy ne lehessen egyetlen rainbow table-el végigmenni az összes felhasználón, ha esetleg kikerülnek a hashek. Akkor generálod a saltot, amikor a felhasználó jelszót változtat. Az általam javasolt crypt(3) elmenti a hash típusát és a saltot is magába a hashbe, ezért ennél nem kell külön elmenteni.
26

mcrypt?

Greg · 2009. Aug. 3. (H), 16.11
miert nem titkositassz mcrypt-el? igy az elfelejtett jelszonal is ki tudod kuldeni az eredetit es eroforrast sem tul sokat eszik. ha a crypt key-t a kodban tarolod akkor ha a db-t fel is torik eleg nehez lesz a jelszot feltorni.
27

leggyengébb láncszem

gex · 2009. Aug. 3. (H), 21.05
az elfelejtett jelszonal is ki tudod kuldeni az eredetit
ilyesmire írták valahol fentebb, hogy titkosíthatsz te a világ legjobb algoritmusával, az emberi hülyeségtől az se véd meg.
28

re

Greg · 2009. Aug. 4. (K), 12.39
lehet hulye vagyok de nem ertem mire gondolsz
29

e-mail

gex · 2009. Aug. 4. (K), 12.46
arra hogy e-mailben eredeti jelszót küldeni minden, csak nem biztonságos.
30

re

Greg · 2009. Aug. 4. (K), 13.11
mennyivel biztonsagosabb egy linket kikuldeni amin meg tudod adni az uj jelszot?
31

sokkal

gex · 2009. Aug. 4. (K), 13.42
1. az ilyen linkek egyszerhasználatosak, így ha valaki hozzáfér a postafiókomhoz akkor sem fogja tudni se használni se megváltoztatni a különböző weboldalakhoz használt jelszavaimat.
2. sok ember használ azonos jelszót különböző oldalakhoz, így ha egyhez megszerzik, jó eséllyel sok másik oldalhoz is megszerzik a hozzáférését.
32

re

Greg · 2009. Aug. 4. (K), 14.00
akkor eleg egy linket kikuldeni ahol megtudja egyszer nezni az regi jelszavat.
mivel az emailkuldessel mar a biztonsag ugrott (hacsak nem ssl titkositott emailt kuldessz,mert egyebkent egy sniffer-el el lehet kapni az adatokat), en hogy a felhasznalo is boldog legyen inkabb megmutatnam a regi jelszavat.
33

Alapból, kódoltan tárolsz

Tanul0 · 2009. Aug. 4. (K), 14.47
Alapból, kódoltan tárolsz jelszót, innentől kezdve, honnan szerzed meg, hogy mi az, dekódolod? mert ha igen, akkor azt más is dekódolni tudja. Szerintem mindig új jelszót kell generálni, vagy pedig amit előttem írtak
34

Valóban van ennek értelme?

nemopeti · 2009. Aug. 25. (K), 23.59
Mikor felvetődik ez a kérdés, akkor bennem mindig felmerül:
"Minek ez az egész?"

Vagyis mért biztonságosabb a kódolt jelszótárolás, mint a cleartext? (nem fájlban tárolásról beszélünk)

Ugyanis, ha adatbázisban van a jelszó, csak akkor férhet hozzá illetéktelen, ha feltörte az adatbázist. És ha bent van az adatbázisban a jelszó érdektelen. (eltekintve attól, hogy sokan ugyanazt a email/név/jelszó párost több oldalon is használják)

Számomra a biztonság 3 lépésből áll:
1. input ellenőrzés, goto 2
2. input újraellenőrzés, goto 3
3. input ismételt ellenőrzés, goto 1

:)

Esetleg valaki elmélkedett már ezen, meghallgatnám a véleményét.
35

Eltekinteni?

rockybro · 2009. Aug. 26. (Sze), 17.44
(eltekintve attól, hogy sokan ugyanazt a email/név/jelszó párost több oldalon is használják)
Pontosan erről van szó. Ettől nem lehet csak úgy eltekinteni...
Te mit szólnál, ha valamelyik oldal adatbázisát feltörnék, ahol regisztrálva vagy, és így megismernék az email címedet/felhasználónevedet, és hozzá a jelszavadat? Átvehetnék a hatalmat a közösségi oldali profiljaid, az email postafiókod és akármi fölött, ahol regisztrálva vagy. (kivéve persze, ha mindenhol különböző jelszót használsz).

egyébként szvsz érdemes a kisebb megbízhatóságú weboldalakon más jelszót használni, mert ki tudja, hogy kezelik a jelszót.
36

Ebben természetesen

nemopeti · 2009. Aug. 28. (P), 17.06
Ebben természetesen egyetértek veled, azért is írtam oda, hogy tisztában vagyok ezzel, és magam is használok azonos jelszót itt-ott.
37

nem feltétlenül

gex · 2009. Aug. 28. (P), 17.27
Ugyanis, ha adatbázisban van a jelszó, csak akkor férhet hozzá illetéktelen, ha feltörte az adatbázist.
vagy éppen ott dolgozik. kicsit lássunk tovább az egy fős fejlesztő "team"-eken. gmailen hányan dolgoznak szerinted?
38

nem lassít, de lehet másfajta hash is

ikblog · 2009. Szep. 11. (P), 10.31
Szerintem egy hashelés 0 lassító tényező. De minek ragadnál le az md5, meg sha1 cuccoknál, amikor még megbolondíthatod egy szolid base64 kódolással is mondjuk az md5-ös hasht? pl ilyesmi (php)

sha1(base64_encode(md5($pass).$salt))

És akkor még bármit ki lehet mellé találni, amitől nem mindenki által használt megoldás (tehát könnyen értelmezhető) lesz.

Vagy a hexa értékeket konvertálhatod még a base_convert() segítségével 36-os számrendszerbe. Stb.

Mellesleg nem kell feltétlenül 32 vagy 40 hosszúnak lennie a hashnek, mert akkor alapértelmezés, hogy előbbi md5, utóbbi sha1.

Azért túlbonyolítani sem érdemes.
39

sql injection

winston · 2009. Szep. 11. (P), 16.24
alapvetőleg nem csak az "adatbázis feltörésével" lehet hozzáférni adatbázisban tárolt adatokhoz. feltételezhetjük például, hogy az adatbázisok jogosultságai szerint még egy egyszerűbb rendszerben is csak az adott gépről, ip-tartományból van hozzáférés. viszont vannak mindenféle egyéb trükkös támadási módszerek, példának okáért az sql injection. emberünk -bizonyos rosszul kezelt inputok segítségével- akár sikeresen listázhatja egy tábla egy adott rekordját, vagy akár az egész táblát. na, ilyenkor felettébb jól jön, ha a jelszót nem, csak a hashet tudja listázni, mert azzal nem sokra megy. (nyilván, szivárványtáblák, itt lehet még keményíteni salt-al, akármi, tökéletes megoldás nincs)
43

jó tudni

Blackfire · 2009. Szep. 23. (Sze), 12.59
Jó tudni, hogy vannak oldalak, ahol a programozók nem kódolva tárolják a jelszavakat. Kiírhatnák az oldalakra, hogyan védik az adataim, hogy tudjam, hova ne regisztráljak.
40

Összefoglaló

janoszen · 2009. Szep. 22. (K), 22.28
Itt van egy tényleg jó írás a témáról: http://www.bigroom.co.uk/blog/php-password-security
42

köszi

Blackfire · 2009. Szep. 23. (Sze), 12.50
A substr -8 miért van benne? az str_pad eleve 8 karaktert csinál, nem?