Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [PHP] md5 czy sha1 ?
wiciu010
post 30.10.2007, 22:18:37
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


Które hashowanie wybrać? Za pomocą md5 czy sha1? I dlaczego?
Jak obydwa zaimplementować do php, jeśli przez formularz rejestracyjny podaje hasło i zapisuje je do bazy mysql?
Go to the top of the page
+Quote Post
drPayton
post 30.10.2007, 22:26:03
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Sha1 zostało złamane kilka lat później winksmiley.jpg Jest trochę mocniejsze, ale tak naprawdę do prostych serwisów to bez znaczenia, a w przypadku gdy wymagane jest wysokie bezpieczeństwo stosuje się funkcje hash'ujące oparte na algorytmach z kluczem (np AES)

Dla ciekawostki: TU o złamaniu SHA1

Jak zaimplementować?
  1. <?php
  2. $pass= md5($_POST['haslo']);
  3. ?>

Przy odbiorze danych zformularza. (Pole w bazie typu varchar (32))

Ten post edytował drPayton 30.10.2007, 22:31:01
Go to the top of the page
+Quote Post
wiciu010
post 30.10.2007, 22:30:04
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


A może jest jakieś inne bezpieczniejsze hashowanie oprócz tych dwóch?
I jeszcze jedno, jak mam zakodowane hasła w bazie to przy logowaniu jak je odkodować żeby sprawdzić czy użytkownik dobre hasło podał?

Ten post edytował wiciu010 30.10.2007, 22:32:14
Go to the top of the page
+Quote Post
graft
post 30.10.2007, 23:09:10
Post #4





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

Ostrzeżenie: (0%)
-----


nie "odkodowujesz" tylko hashujesz przy pomocy tego samego (zdefiniowanego) klucza i wtedy porównujesz czy zakodowane hasło jest poprawne...
Go to the top of the page
+Quote Post
wiciu010
post 30.10.2007, 23:12:28
Post #5





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


Cytat(graft @ 30.10.2007, 23:09:10 ) *
nie "odkodowujesz" tylko hashujesz przy pomocy tego samego (zdefiniowanego) klucza i wtedy porównujesz czy zakodowane hasło jest poprawne...


A jak zdefiniować ten klucz?
Możecie podać jakis przykład, np. przy rejestracji podano hasło "mojehaslo" i jak je zakodować i przy logowaniu sprawdzić poprawność?
Go to the top of the page
+Quote Post
piotrek_ka
post 30.10.2007, 23:23:23
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 13.10.2007

Ostrzeżenie: (0%)
-----


no jeżeli chodzi o md5() to porównujesz w ten sposób
  1. <?php
  2. $wpisane_haslo_md5 =md5($_POST['haslo']); //albo zamiast $_POST['haslo'] jakakolwiek inna zmienna z "czystym" hasłem biggrin.gif
  3. $haslo_do_porownania = md5("mojehaslo");  //jeżeli pobierasz z mysql to odrazu miej w bazie w formie zaszyfrowanej 
  4. if($wpisane_haslo_md5 == $haslo_do_porownania)
  5. {
  6. echo "hasła zgodne";
  7. }
  8. else 
  9. {
  10. echo "hasła niezgodne";
  11. }
  12. ?>

i już biggrin.gif

Ten post edytował piotrek_ka 30.10.2007, 23:27:14
Go to the top of the page
+Quote Post
Spawnm
post 31.10.2007, 15:20:35
Post #7





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




a jak odkodować md5() ?
Go to the top of the page
+Quote Post
drPayton
post 31.10.2007, 17:39:54
Post #8





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Funkcje hash'ujące (np md5 czy sha1) tworzą skróty danych. Są one z definicji jednokierunkowe tzn można obliczyć hash (czyli skrót) ale na podstawie skrótu nie da się poznać treści wiadomości (teoretycznie oczywiście, bo de facto zostały już złamane dość dawno).
Go to the top of the page
+Quote Post
qqrq
post 1.11.2007, 01:00:00
Post #9





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(drPayton @ 31.10.2007, 17:39:54 ) *
teoretycznie oczywiście, bo de facto zostały już złamane dość dawno


No tak, tęczowe tablice... Ale to nie do końca znaczy "złamane". Podał ktoś kiedyś jakąś kolizję?
Swoją drogą ponoć dobrym wyjściem z tej sytuacji jest używanie czynnika losowego ("soli") - jak np. w osCommerce.


--------------------
Go to the top of the page
+Quote Post
nrm
post 1.11.2007, 12:03:05
Post #10





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

Ostrzeżenie: (0%)
-----


uzywaj md5 w połączeniu z "ziarnem" (solą czy jak tam kto zwie). to juz jest super bezpieczny sposób.


--------------------
Go to the top of the page
+Quote Post
drPayton
post 1.11.2007, 12:10:45
Post #11





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Cytat
Podał ktoś kiedyś jakąś kolizję?

Ba, podano algorytm do jej generowania! Oczywiście potrzebna do tego moc obliczeniowa jest nie do osiągnięcia dla przeciętnego użytkownika.
Go to the top of the page
+Quote Post
wiciu010
post 1.11.2007, 21:17:14
Post #12





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


A co to jest to "ziarno" (sól) ? I jak tego użyć?
Go to the top of the page
+Quote Post
nrm
post 1.11.2007, 21:48:31
Post #13





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

Ostrzeżenie: (0%)
-----


to jakiś dowolny hash. generujesz dla każdego usera osobno i zapisujesz. i teraz pass to np. md5(md5($userPass).md5($salt));


--------------------
Go to the top of the page
+Quote Post
drPayton
post 1.11.2007, 23:41:20
Post #14





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Dokładnie, dodam jeszcze jedną rzecz: Ta "sól" czyli czynnik losowy musi być określona (by potem w trakcie sprawdzania hash'y móc ją dodać ponownie). Nie wnikałem w to tak głęboko, ale wydaje mi się, że najprostszym sposobem byłoby, gdyby był to timestamp (np rejestracji użytkownika). Czyli w momencie rejestracji (przykładowo) przypisujemy aktualny timestamp do jakiejś zmiennej i potem:

1. Zapisujemy go do bazy jako data rejestracji
2. Dodajemy jako "sól" do obliczenia skrótu hasła

Chociaż ja akurat rozwiązuje to tak, że obliczam hash z tiemestampa (np rejestracji) i ID użytkownika (czyli dodanie usera to de facto dwa zapytania insert i update [hasła])

A jak Wy to rozwiązujecie? Ciekaw jestem Waszych opinii...

Ten post edytował drPayton 1.11.2007, 23:41:57
Go to the top of the page
+Quote Post
Black-Berry
post 1.11.2007, 23:52:44
Post #15





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Sorry, ze sie wtrącę do dyskusji nie mając za duzo wiedzy na ten temat ale intryguje mnie jedna rzecz. Sprawdzałem na róznych komputerach funkcje md5 i otrzymałem takie cos

SERWER 1
  1. <?php
  2. echo md5("jakis ciag"); // wyswietla np "99887766"
  3. ?>


SERWER 2
  1. <?php
  2. echo md5("jakis ciag"); // wyswietla dokładnie to samo "99887766"
  3. ?>


Jak na mój łeb to kazdy serwer powinien dawac inne wyniki zeby nie mozna było bez klucza złamac md5 prostym skryptem postawionym na serwerze lokalnym. Czy istnieje jakis klucz losowy dzieki któremu md5 daje rozne wyniki na roznychj serwerach? Czy mozna go podać?


--------------------
Go to the top of the page
+Quote Post
qqrq
post 2.11.2007, 01:00:25
Post #16





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Nie no, md5 to funkcja hashująca dane wejściowe, a nie dane serwera. Żeby zależało to także od serwera musisz jako sól dodać np. IP, z którego wysłano rządanie.


--------------------
Go to the top of the page
+Quote Post
drPayton
post 2.11.2007, 09:13:27
Post #17





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Cytat
Jak na mój łeb to kazdy serwer powinien dawac inne wyniki

To jaki sens by to wtedy miało? Każda informacja (powiedzmy, że string) ma swój odpowiednik w postaci skrótu md5.
Każdy string ma inny hash (tzw bezkolizyjność, czyli skrajnie małe prawdopodobieństwo wystąpienia takich samych hash'y dla różnych wiadomości).

Cytat
zeby nie mozna było bez klucza złamac md5 prostym skryptem postawionym na serwerze lokalnym.

Powodzenia w łamaniu! Wprawdzie postęp w mocy obliczeniowej domowych komputerów jest szybki, ale jeszcze sporo czasu upłynie zanim da się na domowym sprzęcie "łamać" md5 czy sha1. Do tego celu używa się superkomputerów lub klastrów sieciowych (realizowanych najczęściej [w przypadku potencjalnych włamywaczy] poprzez wspólne działanie domowych maszyn w internecie - tak działał np program SETI@Home [oczywiście w innym celu winksmiley.jpg])

Ten post edytował drPayton 2.11.2007, 09:13:48
Go to the top of the page
+Quote Post
nrm
post 2.11.2007, 10:52:46
Post #18





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(drPayton @ 1.11.2007, 23:41:20 ) *
A jak Wy to rozwiązujecie? Ciekaw jestem Waszych opinii...

tak jak napisałem wyżej - osobno generowany hash. korzystanie z wszelkich stałych danych (w sensie: dostępnych dla usera) jest potencjalnie niebezpieczne, choćby:
http://sf.jogger.pl/2007/10/27/przejecie-k...enia-przez-net/


--------------------
Go to the top of the page
+Quote Post
Black-Berry
post 2.11.2007, 12:19:02
Post #19





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@drPayton Naprawdę nie wiem za wiele o funkcji md5 ale inho... jesli jakaś algorytm daje ciągle te same wyniki dla tych samych danych to znając ten algorytm (ktos go przecież musi znać bo go napisał ) jest w stanie napisać algorytm odwrotny. Tak więc algorytm odwrotny teoretycznie może istnieć lub też istnieje. No i teraz jeśli nie używamy "soli" to jeśli ktoś opublikuje algorytm odwrotny dla md5 to bedzie mógł odkodować wszystkie zahashowane klucze.


--------------------
Go to the top of the page
+Quote Post
tsharek
post 2.11.2007, 12:46:36
Post #20





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

Ostrzeżenie: (0%)
-----


Cytat(Black-Berry @ 2.11.2007, 12:19:02 ) *
@drPayton Naprawdę nie wiem za wiele o funkcji md5 ale inho... jesli jakaś algorytm daje ciągle te same wyniki dla tych samych danych to znając ten algorytm (ktos go przecież musi znać bo go napisał ) jest w stanie napisać algorytm odwrotny. Tak więc algorytm odwrotny teoretycznie może istnieć lub też istnieje. No i teraz jeśli nie używamy "soli" to jeśli ktoś opublikuje algorytm odwrotny dla md5 to bedzie mógł odkodować wszystkie zahashowane klucze.


Algorym md5 jest wykładany na prawie każdej uczelni wyższej w kierunku informatyka. Jest on szeroko dostępny i isnieją jego implementacje np. w javascripcie. A na pewno z tego nie wynika fakt że isnieje "algorytm odwrotny" (poczytaj o Funkcji skrótu - jak sama nazwa wskazuje skraca (bezpowrotnie) przetważaną informajcę), gdyż nawet takiego pojęcia nie ma w matematyce


--------------------
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 06:55