Autor | Zpráva | ||
---|---|---|---|
Josef Tlapač Profil * |
#1 · Zasláno: 20. 5. 2009, 19:30:32
Dobrý den, v čem je prosím nejlepší ukládat heslo do mysql? Děkuji
|
||
tiso Profil |
#2 · Zasláno: 20. 5. 2009, 19:34:15
Josef Tlapač
1. pridáš k heslu salt (=náhodný reťazec, na začiatok, do stredu, ...) 2. z výsledného reťazca spravíš hash (pomocou funkcií md5(), sha1(), ...) 3. hash a salt uložíš do databázy. |
||
Josef Tlapač Profil * |
#3 · Zasláno: 20. 5. 2009, 19:47:32
Dobrý den, děkuji za info, takto nějak?
$salt = random(5); $heslo = "wer54w6r46w5e"; k_ulozeni_do_db = md5($salt . $heslo); a prosím v mysql mám zvolit jako TYP sloupce co? děkuji |
||
tiso Profil |
#4 · Zasláno: 20. 5. 2009, 19:50:13
Josef Tlapač - pre md5 varchar(32) not null
|
||
Josef Tlapač Profil * |
#5 · Zasláno: 20. 5. 2009, 19:54:26
a je lepsi tedy md5 nebo sha1 ?
|
||
srigi Profil |
#6 · Zasláno: 20. 5. 2009, 19:58:13 · Upravil/a: srigi
tiso
Ukladat salt do DB nie je velmi napadite. Viem, ze utocnik nema ako zistit algorytmus, ale ak raz ziska pristup k DB, ziska ku kazdemu zaznamu aj jeho salt a to nie je chvalihodne. Ja osobne salt ukladam ako string do PHP skriptu. Sice je pre kazdy zaznam rovnaky, ale nie je v databaze. |
||
tiso Profil |
#7 · Zasláno: 20. 5. 2009, 20:00:28
srigi - to je síce pekné, ale tým si práve zrušil dôvod prečo sa salt k heslu pridáva.
|
||
srigi Profil |
#8 · Zasláno: 20. 5. 2009, 20:26:21
tiso
„tým si práve zrušil dôvod prečo sa salt k heslu pridáva.“ Preco si myslis, ze tym ze je salt staticky, saltovanie straca vyznam? Sry, toto si neviem zdovodnit. Ziskat salt z PHP skriptu je takmer nemozne, leda by admin webservara vypol PHP engine (prva volba v php.ini), co je uplne nepravdepodobne. Naopak, tym ze sa "criepky", z ktorych heslo pozostava, rozhodia do dvoch odlisnych technolgii, bezpecnost zvysuje (utocnik musi napdnut viac miest). |
||
tiso Profil |
#9 · Zasláno: 20. 5. 2009, 20:37:55
srigi - ach jaj, sladká nevedomosť... Ak prídeš na to aký dôvod som mal na mysli, tak sa máme o čom baviť ďalej. Google ti pomôže...
|
||
JanJanuska Profil |
#10 · Zasláno: 20. 5. 2009, 21:19:22
srigi: a prečo tam ten salt teda vôbec pridávaš? :)
|
||
Nox Profil |
#11 · Zasláno: 20. 5. 2009, 21:58:14
JanJanuska
Imho 1) V podstatě není šance na rozluštění původního hesla...ikdyby došel na řetězec, který odpovídá hashi (kolize), který našel, tak nebude odpovídat po přidání saltu...teoreticky by mohl zkusit brát postupně jen část toho řetězce, ale to by fungovalo jen tehdy, kdyby při tom hledání narazil na původní heslo, což jednak nezjistí, že to je zrovna ono a jednak ta šance je šíleně malá 2) Dva uživatelé se stejným hashem nemají stejné heslo, pokud je hash dynamický, ale šance na stejné heslo imho není velká, takže bych v tom asi neviděl zásadní význam |
||
srigi Profil |
#12 · Zasláno: 20. 5. 2009, 23:24:12
tiso
„Dva uživatelé se stejným hashem mají stejné heslo“ Jaj o toto ide. Toto by mi vadilo asi iba z 50%. Pre mna osobne je dolezitejsie, ze nad ukradnutou databazou hesiel nejdu vyuzit rainbowtables ci jak sa to vola a rozne tie webove "dehash" stranky. |
||
tiso Profil |
#13 · Zasláno: 21. 5. 2009, 00:38:28
|
||
AM_ Profil |
#14 · Zasláno: 21. 5. 2009, 09:41:08
A proč tedy nevytáhnout salt nějakým způsobem z databáze (např. první, třetí a šesté písmeno přezdívky)? salt se pak nemusí nikam ukládat, pouze se algoritmem z něčeho vytvoří (pak je ale nutné jej aktualizovat při změně přezdívky)
|
||
nightfish Profil |
#15 · Zasláno: 21. 5. 2009, 10:50:14
„A proč tedy nevytáhnout salt nějakým způsobem z databáze (např. první, třetí a šesté písmeno přezdívky)? salt se pak nemusí nikam ukládat, pouze se algoritmem z něčeho vytvoří (pak je ale nutné jej aktualizovat při změně přezdívky)“
při změně přezdívky se změní salt, a tedy i hash (který je na saltu založen) jenomže pro výpočet hashe je kromě saltu potřeba i plaintext hesla, který nemáme... takže tudy cesta nevede |
||
JanJanuska Profil |
#16 · Zasláno: 21. 5. 2009, 10:54:01
Nox
No tak kolíziu 2 reťazcov by nájsť nemal, to by bola zrejme chyba (nedokonalosť?) hashovacej funkcie. Skôr by som sa obával toho, že dva účty môžu mať rovnaké heslo a teda aj hash. Ak si nejaký "v práci nespokojný" zamestnanec s prístupom k DB "všimne", že má rovnaký hash dajme tomu šéf s rozsiahlymi právami a zamestnanec, stačí získať heslo od zamestnanca (pozvanie na pár pív? :)). AM_ Veľmi dobrá idea (a jednoduchá)... |
||
JanJanuska Profil |
#17 · Zasláno: 21. 5. 2009, 10:57:26 · Upravil/a: JanJanuska
nightfish
je kromě saltu potřeba i plaintext hesla, který nemáme... Užívateľ zadá heslo, funkcia vytvorí salt, zahashuje sa salt spolu s pôvodným heslom... edit aha, asi som ťa zle pochopil... No ak si môže užívateľ meniť užívateľské meno, tak salt sa môže vygenerovať z iného (stáleho) údaja, napr. z ID. |
||
amon Profil |
#18 · Zasláno: 21. 5. 2009, 11:54:50
A co tak vytvorit salt z pouzivatelskeho mena? To by sa este mohlo prevratit naopak, alebo nahodne poprehadzovat, pripadne z neho urobit hash a pouzit napr. prvych 5 znakov hashu... Moznosti na upravu mena je vela...
|
||
Timy Profil |
#19 · Zasláno: 21. 5. 2009, 13:14:12
AM_
Proč rovnou nevzít celou přezdívku? nightfish „jenomže pro výpočet hashe je kromě saltu potřeba i plaintext hesla, který nemáme... takže tudy cesta nevede“ Nemohli bychom to heslo nechat uživatele znova zadat? Bude to podle mě i bezpečnější, protože tak nebude moci změnit přezdívku (= případný login) někdo, kdo se zrovna jen na chvilku dostal k počítači, kde je nějaký uživatel přihlášený. |
||
Nox Profil |
#20 · Zasláno: 21. 5. 2009, 13:35:09
JanJanuska
1) Kolize je standardně u hashů nevyhnutelný jev, hashů je konstatní počet, zdrojů nekonečný, nedávno o tom bylo rozsáhlá diskuse 2) Jednak šance na stejné heslo je naprosto minimální a jednak tomuto právě má zabránit dynamické saltování |
||
Timy Profil |
#21 · Zasláno: 21. 5. 2009, 13:42:08
Nox
„2) Jednak šance na stejné heslo je naprosto minimální“ Nejsem si jistý, jestli to chápu správně, ale jestli to má být myšleno tak, že je nepravděpodobné, že by dva různí uživatelé měli stejné heslo, tak je to IMHO velice nesprávný předpoklad. Existují i statistiky nejpoužívanějších hesel. |
||
Nox Profil |
#22 · Zasláno: 21. 5. 2009, 13:46:53
Timy
J, tak jsem to myslel...no, to bylo asi naivní si myslet, že lidi používají u výběru hesla mozek :/ ... jen nechápu "blink182" (narozdíl od "password" třeba) |
||
Timy Profil |
#23 · Zasláno: 21. 5. 2009, 14:04:10
|
||
JanJanuska Profil |
#24 · Zasláno: 21. 5. 2009, 14:08:53
Nox
ad 1) Aj práve preto sa teraz vyberá nová hashovacia funkcia. Akonáhle sa začnú objavovať kolízie(čo sa v md5 aj začali), bezpečnosť ide dolu vodou. ad 2) Predtým sme diskutovali o jednom salte pre všetky heslá, práve preto som so srigim nesúhlasil. |
||
Nox Profil |
#25 · Zasláno: 21. 5. 2009, 14:17:48
Timy
eh :) díky JanJanuska 1) a) podle mě to u ne-perfektního hashování bez saltu z principu bez kolizí nejde, nemůžeš unikátně spojit celou nekonečnou množinu s konečnou množinou ale opravte mě, jestli se pletu b) je spousta hashovacích funkcí kromě md5, ta je jen nejobyklejší...tady jich máš kvanta http://en.wikipedia.org/wiki/List_of_hash_functions |
||
Timy Profil |
#26 · Zasláno: 21. 5. 2009, 14:46:20
JanJanuska
„ad 1) Aj práve preto sa teraz vyberá nová hashovacia funkcia. Akonáhle sa začnú objavovať kolízie(čo sa v md5 aj začali), bezpečnosť ide dolu vodou. “ Kolize jsou přirozenou součástí hashovacích algoritmů. Dával jsem tady příklad triviální hashovací funkce. Složitější postupují „podobně“, jen je těch daleko kolizí méně apod. Není možné zobrazit do 128 bitů všechny možné řetězce tak, aby nevznikla žádná kolize. Když máš k dispozici 128 bitů, můžeš z toho vytvořit celkem 2^128 různých hashů. Jenže řetězců je teoreticky nekonečně mnoho. I kdybychom brali třeba jen řetězce o délce 160 bitů, tak to máš celkem 2^160 variací, což už je desetkrát více, než kolik prostoru ti poskytuje MD5. Ve chvíli, kdy probíhá zobrazení M -> N, kde M > N, tak není možné to udělat bez kolizí. V případě MD5 je M = všechny reálné řetězce světa, N = všechny řetězce o délce 128 bitů. |
||
JanJanuska Profil |
#27 · Zasláno: 21. 5. 2009, 14:47:52 · Upravil/a: JanJanuska
Nox
Tak kolízie vždy existovali aj existovať budú, nech je to akákoľvek hashovacia funkcia. Myslím, že tam nie je viac o čom diskutovať, ale ide o to, aby bolo veľmi nepravdepodobné, až (takmer) nemožné nájsť takúto kolíziu. Skrátka musí (mala by) vydržať tak dlho, kým budú zahashované dáta na toľko dôležité, aby ich chcel potencionálny útočník získať. Je mi jasné, že md5 nie je jediná hashovacia funkcia, to bol len príklad. A ani by som nepovedal, že md5ka je (bola) najobvyklejšia. edit Timy No ak by bolo jednoduché nájsť kolíziu, potom by hashovacie funkcie nemali vôbec zmysel a práve o to ide. Môže to byť hoci aj 512 bitová, ale kolízie môžu byť oveľa častejšie ako v inej, 128 bitovej. |
||
Nox Profil |
#28 · Zasláno: 21. 5. 2009, 14:54:25
JanJanuska
Myslel jsem v tomto konkrétním kontextu, z ostatních ji v něm vídávám nejvíc, i když není nejlepší |
||
nightfish Profil |
#29 · Zasláno: 21. 5. 2009, 15:19:46
ad hashovací funkce - http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=94401&forum=3&page=-1#8 (sem to kopírovat nebudu)
|
||
Timy Profil |
#30 · Zasláno: 21. 5. 2009, 15:22:25
JanJanuska
„No ak by bolo jednoduché nájsť kolíziu, potom by hashovacie funkcie nemali vôbec zmysel a práve o to ide.“ Nechápu na co reaguješ nebo kde říkám opak. Neříkal jsem nic o složitosti nalezení kolize, jen to, že není možné udělat hashovací funkci bez kolizí, když je M > N. |
||
Téma pokračuje na další straně.
|
0