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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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ż (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował piotrek_ka 30.10.2007, 23:27:14
Go to the top of the page
+Quote Post
Spawnm
post
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
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
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
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
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
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
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
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
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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ])

Ten post edytował drPayton 2.11.2007, 09:13:48
Go to the top of the page
+Quote Post
nrm
post
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
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
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
vokiel
post
Post #21





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Dołączę się do tematu, trochę z innej strony.
Zwykle w skryptach logowania podaje się coś takiego:
  1. <?php
  2. if (isset($_POST['login']) && isset($_POST['haslo'])){
  3. $login = str_replace("'", '', $_POST['login']); // oczysczenie loginu
  4. $haslo = md5 ($_POST['haslo']); // md5 na hasło, tak jak jest przechowywane w bazie
  5. // [...] ciąg dalszy skryptu
  6. ?>

Ale tu moim zdaniem te md5 nie jest tak bardzo dobre. Bo jest hashowane dopiero na serwerze przez interpreter php. A do serwera jest przesyłane otwartym tekstem, zatem istnieje możliwość podsłuchania (chociażby jakimś snifferem po LANie). Czyli wnioskując dalej md5 powinno być użyte po stronie przeglądarki (javascript).
Jak sądzicie? Może się mylę, ale tak mi się wydaje na logikę.
Go to the top of the page
+Quote Post
drPayton
post
Post #22





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

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


Dlatego w systemach, w których wymagane jest wysokie bezpieczeństwo stosuje się SSL poprzez https

A tak przy okazji: http://md5.rednoize.com/
Spora baza... Naprawdę spora
Go to the top of the page
+Quote Post
tsharek
post
Post #23





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

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


Cytat(drPayton @ 3.11.2007, 11:41:02 ) *
A tak przy okazji: <a href="http://md5.rednoize.com/" target="_blank">http://md5.rednoize.com/</a>
Spora baza... Naprawdę spora


kolejny dowód że "sól" jest niezastąpiona:)
Go to the top of the page
+Quote Post
Gigakomputer
post
Post #24





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 9.11.2007
Skąd: Gliwice

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


Mówiliśmy już na temat "soli" i kodowania... pozdrowiania "tsharek" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Masz oczywiście rację co do tematu wykładu z md5. Ja osobiście używam kodowania na "podwójnej soli":
Kod
<?php
//Załóżmy ze mamy juz zdefiniowaną zmienną wyjściową z hasłem o nazwie: $pass
$ip = $HTTP_SERVER_VARS['REMOTE_ADDR']; //Pobiera adres IP komputera
$today = date("m.d.Y, H:i:s");//Pobiera aktualną datę i czas np. 01.02.03, 13:12:59
$pass="supertajne_hasło";

$wynik=md5(sha1($pass.$ip.$today)); //generuje wynik "podwójnej soli"
echo $wynik;
?>


To tyle... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Powodzenia !
Go to the top of the page
+Quote Post
b_chmura
post
Post #25





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Cytat(Gigakomputer @ 9.11.2007, 17:44:37 ) *
Mówiliśmy już na temat "soli" i kodowania... pozdrowiania "tsharek" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Masz oczywiście rację co do tematu wykładu z md5. Ja osobiście używam kodowania na "podwójnej soli":
Kod
<?php
//Załóżmy ze mamy juz zdefiniowaną zmienną wyjściową z hasłem o nazwie: $pass
$ip = $HTTP_SERVER_VARS['REMOTE_ADDR']; //Pobiera adres IP komputera
$today = date("m.d.Y, H:i:s");//Pobiera aktualną datę i czas np. 01.02.03, 13:12:59
$pass="supertajne_hasło";

$wynik=md5(sha1($pass.$ip.$today)); //generuje wynik "podwójnej soli"
echo $wynik;
?>


To tyle... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Powodzenia !



Pobierasz aktualny czas i ip komputera, a jeśli ktoś korzysta z komputera o innym ip i w innym czasie? hasła nie będą sie zgadzały
Go to the top of the page
+Quote Post
phpion
post
Post #26





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(b_chmura @ 9.11.2007, 20:11:00 ) *
Pobierasz aktualny czas i ip komputera, a jeśli ktoś korzysta z komputera o innym ip i w innym czasie? hasła nie będą sie zgadzały

Chyba nie rozumiesz idei soli... tworzysz klucz (wolę takie określenie) w momencie zapisu danych do bazy. Podczas logowania pobierasz hasło od usera, po czym pobierasz klucz (na podstawie loginu) i kodujesz podane hasło tymże kluczem, po czym porównujesz wynik z hasłem z bazy. Tyle.
Go to the top of the page
+Quote Post
b_chmura
post
Post #27





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


z kodu powyżej całkiem co innego wynika
  1. <?php
  2. $wynik=md5(sha1($pass.$ip.$today))
  3. ?>

domyślam sie ze
$pass - hasło podane w formularzu
$wynik - wartość którą porównam z hasłem w bazie
Go to the top of the page
+Quote Post
phpion
post
Post #28





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytuj całość:
  1. <?php
  2. $wynik=md5(sha1($pass.$ip.$today)); //generuje wynik "podwójnej soli"
  3. ?>

Konkretnie chodzi mi o komentarz. Ta linijka po prostu generuje klucz (sól).
Go to the top of the page
+Quote Post
drPayton
post
Post #29





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

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


Ale przecież potem, kodując wpisane hasło (przy logowaniu), dla porównania z hasłem z bazy zakodować je z użyciem tej samej "soli" vel klucza. Jak, skoro przy zapisie to była tamta data? No, chyba że została ona zapisana również do bazy...

Ten post edytował drPayton 9.11.2007, 20:02:37
Go to the top of the page
+Quote Post
phpion
post
Post #30





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nie rozumiem problemu...

Rejestracja:
- user wypełnia formularz
- skrypt pobiera login i hasło z formularza
- pobiera ip, date i co tam trzeba
- tworzy klucz na podstawie tych danych
- zapisuje do bazy login, zakodowane kluczem haslo, klucz

Logowanie:
- user podaje login oraz haslo
- z bazy wyciągany jest klucz oraz zakodowane hasło dla usera o podanym loginie
- za pomocą klucza z bazy kodowane jest hasło podane przez usera
- powyższe hasło porównywane jest tym z bazy

(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował phpion.com 9.11.2007, 20:11:40
Go to the top of the page
+Quote Post
drPayton
post
Post #31





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

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


Aaa, czyli klucz jest przechowywany, to zmienia postać rzeczy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
phpion
post
Post #32





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Gigakomputer
post
Post #33





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 9.11.2007
Skąd: Gliwice

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


Metoda która tu opisałem ( metoda podwójnej soli ) ma na celu jakby podwojne zabezpieczenie dowolnego ciągu znaków (string), które z kolei przesyłane są przez formularz podczas próby zalogowania uzytkownika do serwisu. Dokładniej opisując temat...
Cytat
1. Podczas rejestracji użytkowników, pewien człowiek podaje login, hasło i jakieś inne dane kontaktowe lub identyfikujące daną osobę w systemie.
1a. Jeśli proces rejestracji przebiegł pomyślnie, użytkownik kierowany jest na stronę logowania.
2. Po wprowadzeniu do pół (login i hasło) odpowiednich danych następuje proces logowania... czyli:
2a. Po kliknięciu przycisku "loguj" zostaje wysłane do serwera zapytanie czy wprowadzone dane zgadzają się z tymi które wprowadził użytkownik podczas logowania.
2b. Jednocześnie podczas kliknięcia w w/w przycisk skrypt umieszczony na stronie logowania pobiera adres IP uzytkownika który zarejestrował sie pod danym nickiem, czas w którym się to stało prosto z bazy danych, oraz wpisane niedawno hasło, które przekazuje do zmiennej $pass.Te 3 zmienne miesza ze sobą, a następnie koduje w następujący sposób
Kod
$wynik=md5(sha1($pass.$ip.$today));
Jak widzisz, całość zwraca w postaci zmiennej $wynik.
3. Następuje sprawdzenie hasła w bazie danych, i określenie czy pasuje do wpisanego loginu [(...)WHERE 'user_name'=$login;]
3a. Jesli tak, to gratuluję jesteś zalogowany ( nooo może jeszcze ustawić ciastka i sesje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )
3b. Jesli nie, użytkownik jest kierowany ponownie na stronę logowania lub rejestracji

UFFFFF (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) To tak w wielkim skrócie i uproszczeniu... heheh (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) POZDRAWIAM !
Go to the top of the page
+Quote Post
k3nsei
post
Post #34





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 25.06.2008

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


Cytat(Black-Berry @ 2.11.2007, 13: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.

Jak by się tak dało to z hashu mógł byś rozkodować pliki np. 1 GB w parę sekund wyobraź to sobie przecież to nie możliwe.

Mógł by ktoś dać jakiś example jak korzystać z salt ziarna czy jak tam to zwą?
I bezpieczniejsze jest używanie tego z md5 czy sha1?

Ten post edytował k3nsei 25.06.2008, 18:44:12
Go to the top of the page
+Quote Post
mike
post
Post #35





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~k3nsei starszych kotletów do odgrzania nie było?
Go to the top of the page
+Quote Post
k3nsei
post
Post #36





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 25.06.2008

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


Po prostu szukałem w wyszukiwarce, chcę wiedzieć jak korzystać z tych salt ziarno czy jak tam to się zwie.
Go to the top of the page
+Quote Post
.radex
post
Post #37





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat(k3nsei @ 25.06.2008, 19:43:19 ) *
Jak by się tak dało to z hashu mógł byś rozkodować pliki np. 1 GB w parę sekund wyobraź to sobie przecież to nie możliwe.


A bo istnieje jeszcze coś takiego jak kolizja.
Go to the top of the page
+Quote Post
marcio
post
Post #38





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Hehe takich tematow bylo 100tki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a co powiecie o http://www.php.net/crypt(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
mike
post
Post #39





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(k3nsei @ 25.06.2008, 19:52:41 ) *
Po prostu szukałem w wyszukiwarce, chcę wiedzieć jak korzystać z tych salt ziarno czy jak tam to się zwie.
Chodzi o to by nie korzystać z funkcji skrótu dla samego gasła tylko "doklejać" coś jeszcze. Na przykład pierwszą literę loginu. Lub cały login.
Wtedy kiedy atakujący znajdzie kolizję dla naszego skrótu to i tak nie będzie mógł posłużyć się nim jako hasłem.
Go to the top of the page
+Quote Post
maziak
post
Post #40





Grupa: Zarejestrowani
Postów: 155
Pomógł: 17
Dołączył: 9.07.2007

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


EDIT :
<zawartosc usunąłem>
Jasna cholercia, tożto temat sprzed pół roku, a ja juz sie za odpowiadanie na jedne z pierwszych postow zabralem.

Ten post edytował maziak 26.06.2008, 00:21:01
Go to the top of the page
+Quote Post
nrm
post
Post #41





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

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


Cytat(mike @ 25.06.2008, 23:09:57 ) *
Chodzi o to by nie korzystać z funkcji skrótu dla samego gasła tylko "doklejać" coś jeszcze. Na przykład pierwszą literę loginu. Lub cały login.
Wtedy kiedy atakujący znajdzie kolizję dla naszego skrótu to i tak nie będzie mógł posłużyć się nim jako hasłem.

lepiej nie uczyć złych nawyków. jeżeli już doklejać to konkretne unikalne wartości, a nie ogólnie dostępne dane, bo potem skutkuje to podobnymi sytuacjami jak ta: http://sf.jogger.pl/2007/10/27/przejecie-k...enia-przez-net/
Go to the top of the page
+Quote Post
mike
post
Post #42





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~normanos podaj przykład takiej unikalnej rzeczy, która nigdy się nie zmieni w kontekście danego konta.
Atakujący nie wie czy doklejasz pierwszą literę, czy dwie ostatnie, czy doklejasz skrót z loginu.

Sytuacja, którą podałeś w linku nie ma żadnego związku z tym o czym piszę.
Go to the top of the page
+Quote Post
nrm
post
Post #43





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

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


Ano nie wie, ale tamten przykład pokazuje, że człowiek sprytna bestia i zawsze kombinuje. Po co doklejać login skoro można np. "Bh%^#%$hgJH_?"? Jest to zdecydowanie lepsze rozwiązanie.
Go to the top of the page
+Quote Post
mike
post
Post #44





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(normanos @ 26.06.2008, 10:06:33 ) *
Ano nie wie, ale tamten przykład pokazuje, że człowiek sprytna bestia i zawsze kombinuje. Po co doklejać login skoro można np. "Bh%^#%$hgJH_?"? Jest to zdecydowanie lepsze rozwiązanie.
No właśnie, sprytna. Na tyle że jak zgadnie to to ma wjazd na wszystkie konta bo doklejasz to samo każdemu.
Moim zdaniem lepiej doklejać coś mniej wymyślnego bo to i tak nic nie zmiania w trudności skrótu a jest losowa w kontekście wszystkich użytkowników i jednocześnie stałe da każdego z osobna.

Twoja propozycja też naturalnie ma plusy. WIększość tablic tęczowych nastawia się na znaki alfanumeryczne więc doklejenie śmiecia ma swoją wartość.
Go to the top of the page
+Quote Post
Spykaj
post
Post #45





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 30.05.2008
Skąd: Białystok

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


No to można połączyć (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

np. md5(md5($smieci.$nick.$hasło));

nie do złamania :]
Go to the top of the page
+Quote Post
Pilsener
post
Post #46





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Lepiej tak:

  1. <?php
  2. sha1(md5($smieci.$hasło));
  3. ?>
- $smieci to klucz, może być stały (np. imię cioci webmastera) lub zmienny (np. suma aktualnego dnia tygodnia i miesiąca podzielona przez datę urodzenia webmastera zaokrąglona do drugiego miejsca przed przecinkiem - tu tylko wyobraźnia nas ogranicza).

Co więcej, hasz można CIĄĆ na dwa - ja np. sha1 ciacham na dwie części tak, żeby ta trzymana w bazie users wyglądała jak md5 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Resztę trzymam gdzie indziej i sklejam do kupy kiedy sprawdzam hasło.

Oczywiście te wszystkie machinacje nic nie dadzą, jeśli hakier ma kod źródłowy. Jednak warto to robić, aby hakier nie mógł wyciągnąć UNIONEM kaszy i skorzystać z gotowej bazy, lub zrobić sobie bazę haszy na podstawie słownika haseł, tym bardziej, że takie zabezpieczenia nie są zbyt trudne do zastosowania.
Go to the top of the page
+Quote Post
nrm
post
Post #47





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

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


Cytat(mike @ 26.06.2008, 08:16:26 ) *
Na tyle że jak zgadnie to to ma wjazd na wszystkie konta bo doklejasz to samo każdemu.

jakie każdemu? przecież to bezsensu jest, co pisałem już kilka postów wyżej. Nie wiem skąd taki pomysł.

- SALT MUSI BYĆ UNIKALNY DLA DANEGO USERA,

- SALT POWINIEN BYĆ stringiem niezwiązanym z innymi dostępnymi lub pośrednio dostępnymi zmiennymi z konta usera

- SALT POWINIEN składać się ze znaków specjalnych !@#$%^&*(etc. aby narobić jaknajwięcej problemów np. wielbicielom "brute force" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten temat wraca i wraca, jak znajdę chwilkę wolnego to postaram się zebrać temat w kupę i wrzucić na bloga.

edit: nie chciałem się wydzierać tylko podkreślić składowe zagadnienia (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) nadinterpretacja (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował normanos 26.06.2008, 10:19:39
Go to the top of the page
+Quote Post
mike
post
Post #48





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Ok, teraz się zgadzam. Nie ma sensu się wydzierać.
Go to the top of the page
+Quote Post
bumfank
post
Post #49





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 29.02.2004
Skąd: /dev/null

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


Odgrzewam ten kotlet bo mam kilka mysli nt. soli

Z jednej strony dobrze jest jesli sol jest unikalna dla kazdego z uzytkownikow bo wtedy jest pewnosc, ze cracker bedzie mial duzy problem ze zlamaniem hasla, ale z drugiej strony trzeba jakos ta sol trzymac np w bazie danych. Jesli cracker zdobedzie hashe to jest to praktycznie 100% pewnosc ze wyciagnal je z bazy danych i nie jeden hash tylko wszystkich userow (wlamka do bazy), bo nie mysle tutaj o przypadku trzymania hasla w cookies bo to zbyt idiotyczne ;P Wiec jest w stanie przejrzec rozne mozliwosci w jaki sposob hash byl tworzony, np polaczenie timestamp z 2 literka loginu, troche to trwa ale przy kradziezy takiej bazy danych np wykopu sie to oplaca.

Moze dobrym pomyslem jest jednak trzymac sol jako stale smieci nie w bazie danych a w pliku, calkowicie oddzielonym od public_html, gdzies powyzej zeby nie mozna go bylo tak latwo znalezc, przy kradziezy bazy danych nie ma zadnej mozliwosci zlamania soli bo nigdzie jej w bazie nie znajdzie i jesli sol jest zaawansowana (jak pisal bodajze normanos ze znakami specjalnymi). Aby pobrac sol musialby wlamac sie na serwer a to troche trudniejsza sprawa niz wyciagniecie bazy danych.

Mysle ze sposob nr 2 jest jednak bezpieczniejszy, moge sie oczywiscie bardzo mylic i ochrzancie mnie troche jesli tak jest ;-)

Ten post edytował bumfank 31.10.2009, 17:29:34
Go to the top of the page
+Quote Post
-Azamarn-
post
Post #50





Goście







Najlepiej zrobić dwie 'sole' - nazwijmy je 'sól' i 'pieprz' (IMG:style_emoticons/default/wink.gif)

W tabelce users mamy kolumny: login, haslo, salt, etc. - czyli salt dla każdego usera jest inny.

A gdzieś w kodzie mamy swój 'pieprz' - taki sam dla każdego usera.

Więc haszowanie wygląda na przykład tak: md5($pieprz.$haslo.$sol);

NAWET jeśli ktoś pozna hasz posolonego hasła i sól, to gdy będzie próbował złamać hasz dodając sól na końcu/na początku, i tak mu się to nie uda, bo nie wie o naszym 'pieprzu' - jeśli nie wykradnie plików źródłowych. A nawet wtedy może to przeoczyć.
Go to the top of the page
+Quote Post
tolomei
post
Post #51





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Polecam lekturę: Slow Hashing.

Podejście do haszowania z innej strony.

Pozdrawiam.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 30.11.2025 - 20:28