Šifrovací algoritmus pro hesla

m

Re:šifrování hesla
« Odpověď #15 kdy: 18. 09. 2013, 19:11:50 »
(upřesnění.. já jsem to tedy taky pochopil tak, že heslo má být z nějakého důvodu pokaždé u stejného uživatele "zašifrováno" pokaždé s jiným výsledkem)


m

Re:šifrování hesla
« Odpověď #16 kdy: 18. 09. 2013, 19:13:50 »
.. na server se k ověření pošle výsledný hash a ta tajná sůl..

oprava: "tajná sůl" -> "náhodná sůl"

(pozn: taky jsem to pochopil tak, že z nějakého důvodu chcete, aby výsledek "zašifrování" byl pokaždé jiný pro stejného uživatele)

krypt

Re:Šifrovací algoritmus pro hesla
« Odpověď #17 kdy: 18. 09. 2013, 22:28:13 »
No, vize byla taková, že by se při každém požadavku nebo úvodní autentizaci (třeba startu session) z klíče - hesla/hashe podle určitého algoritmu z hesla vygeneroval kód, který by byl zčásti náhodný, ale spadal by do určité množiny, což by se na straně serveru podle toho klíče ověřovalo.

Nemusel bych se tedy bát o to, že mi heslo/hash někdo cestou ukradne nebo někde přečte a později použije, to je vlastně to, a co mi šlo.

Existovala by tedy určitá množina kódů, které by 'odpovídaly', která by měla být:
- tak velká, aby stačila kapacitně
- tak malá vůči všem možnostem, aby i pravděpodobnost uhodnutí jednoho z nich byla dostatečně malá
- taková, aby z určité její části nebylo snadné podle nějakých společných znaků jednotlivých řetězců vyhodnout klíč, ze kterého byly kódy vygenerovány

Nicméně možná je to trochu utopie.   :-\

krypt

Re:Šifrovací algoritmus pro hesla
« Odpověď #18 kdy: 18. 09. 2013, 22:30:25 »
edit:
řetězec -> kód
když teda píšu o binárních datech


krypt

Re:Šifrovací algoritmus pro hesla
« Odpověď #19 kdy: 18. 09. 2013, 23:18:36 »
omluva, vypadla mi z toho ta základní myšlenka, že by každý vygenerovaný kód byl použitelný jen jednou
(teoreticky by tedy mohl být občas vygenerován už použitý kód, což by však tolik nevadilo)


Re:Šifrovací algoritmus pro hesla
« Odpověď #20 kdy: 19. 09. 2013, 08:25:40 »
Požadavek na to, aby se nedalo znovu přihlásit odposlechnutím přihlášení jste na začátku nenapsal…

V takovém případě je potřeba určitá spolupráce klienta. Server vygeneruje náhodná data (výzvu) a zašle ji klientovi. Klient vytvoří hash hesla a výzvy a výsledek odešle serveru. Ten z uloženého hesla a výzvy vytvoří také hash a porovná jej s tím, který dostal od klienta.

Místo otevřeného hesla (aby je server nemusel znát) je možné použít osolený hash hesla. Pokud by byla sůl pro každého uživatele jiná, musel by klient nejprve požádat server o sůl + výzvu pro konkrétního uživatele, a na základě toho vypočítat odpověď. Nebo je možné použít jednu sůl pro celý server – pak klient posílá přihlašovací jméno a hash najednou. Nevýhoda takového řešení je v tom, že pokud budou mít dva uživatelé stejné heslo, na serveru bude uložen i stejný hash. Tenhle způsob autentizace se používá např. v přihlašování přes HTTP metodou Digest: http://en.wikipedia.org/wiki/Digest_access_authentication

rejnok

Re:Šifrovací algoritmus pro hesla
« Odpověď #21 kdy: 19. 09. 2013, 10:59:37 »

krypt

Re:Šifrovací algoritmus pro hesla
« Odpověď #22 kdy: 19. 09. 2013, 14:00:02 »
nenapsal jsem to asi moc srozumitelně
nicméně snad už zhruba tuším řešení

Dragonsoul

Re:Šifrovací algoritmus pro hesla
« Odpověď #23 kdy: 13. 11. 2013, 13:07:47 »
to Filip Jirsak
Take se tim zabyvam, a stale to nechapu
Na serveru je zahashovane heslo 'hello' -> aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Server posle klientovi sul '1'
klient popta po uzivateli heslo ktere je hello a k tomu prida sul '1' a vznikne 88fdd585121a4ccb3d1540527aee53a77c77abb8
Server ma hash aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d a sul '1' a co s tim dal?
Dekuji moc

Dragonsoul

Re:Šifrovací algoritmus pro hesla
« Odpověď #24 kdy: 13. 11. 2013, 13:29:51 »
Tak už jsem asi na to přišel
Server ma uložený hash hesla 'hello' -> aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Posle klientovi sul '1' ktere se zobrazi na obrazovce.
Klient pozada uzivatele o heslo ktere zahasuje a k tomu prida hash soli a to cele zahasuje a odesle servru
('hello' sha1 + '1' sha1)sha1 = sendString;
Server vezme z databaze zahashovane heslo prida k tomu hash soli a cele to zahashuje a melo by to sedet...

Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re:Šifrovací algoritmus pro hesla
« Odpověď #25 kdy: 13. 11. 2013, 13:33:56 »
Tak nevím, jestli jsi to pochopil dobře. Např. rozhodně nemá smysl hašovat sůl zvlášť, myslím, že směšuješ sůl (sloužící k rozrůznění v db uložených haší stejných hesel a prevenci slovníkového útoku) a výzvu (sloužící k tomu, aby nešlo odchytit pomocí MIM heslo a později znovu použít).

1) Princip VÝZVY je ten, že klient zahašuje heslo s něčím, co mu pošle server (to něco může být pokaždé jiné).
Server provede stejnou hash a porovná.

2) Pokud není záhodno, aby server znal heslo uživatele, tak může server znát pouze hash uživatele. Pak je postup stejný, akorát klient před algoritmem 1) heslo zahašuje. Pak server potřebuje znát pouze hash toho hesla.

3) Pokud není záhodno, aby šla hesla na serveru prolomit pomocí slovníku, je třeba hesla hašovat se solí. Tuto sůl buď klient zná (pak je postup stejný jako v 2, akorát se při hašování přidá sůl), nebo nezná (např. proto, že je pro každého uživatele jiná, což je bezpečnější). V tom případě musí klient o sůl požádat server. Komunikace je tedy takováto

K: Ahoj, tady uzivatel UZIVATEL, chci se prihlásit
S: Ok, sůl uzivatele UZIVATEL je SUL, náhodná vyzva je VYZVA
K: Ok, autentizuji se pomoci hash(VYZVA+hash(SUL+HESLO))
S: Zkontroluje hash(VYZVA + HASHOVANE_OSOLENE_HESLO)

To, že komunikace probíhá v jedné session, tzn. server musí vědět, že přihlašovanému poslal tu a tu výzvu a on se chce přihlásit jako ten a ten uživatel je doufám jasné.

All clear?

PS: ?ožnost, jak zjednodušit solení a zachovat unikátní sůl je nastavit sůl jako USERNAME+nějakáblbostprovšechnystejná.




ryder

Re:Šifrovací algoritmus pro hesla
« Odpověď #26 kdy: 13. 11. 2013, 13:45:19 »
pozor na použitý algoritmus, sha1 není určený pro šifrování a ukládání hesel, ale pro výpočet kontrolních součtů souborů - proto je poměrně rychlý. pro hesla doporučuji bcrypt - je to "pomalý" algoritmus, který znemožní použití bruteforce útoku pro lámání hesel z hashů