2013-06-20 14 views
9

czytanie dokumentacji o nowej password_hash funkcji dla PHP 5.5, zastanawiam się, co to domyślny algorytm:Jaki jest algorytm domyślny w password_hash

password_hash("rasmuslerdorf", PASSWORD_DEFAULT); 

Dokumentacja o tym nie wyjaśnia to: http://www.php.net/manual/en/password.constants.php

+1

wygląda jak wewnętrzny hasz. – DevZer0

+0

Patrząc na docs dla http://us2.php.net/password_hash, wygląda BCrypt. Odwołują się do niego w danych wejściowych, a dane wyjściowe przypominają wyjście BCrypt, ale nie mogę na pewno powiedzieć. –

+0

Może się to zmienić w nowszych wersjach PHP, gdy są obsługiwane nowsze, silniejsze algorytmy haszowania. – hjpotter92

Odpowiedz

8

Zostało to zaktualizowane w dokumentacji pod numerem password_hash() i będzie wkrótce aktualizowane na stronie stałych (właśnie zmieniłem dokumentację około godziny temu).

To będzie na żywo dzisiaj na password.constants

ze strony zaktualizowanego stałych (który nie przeszedł jeszcze na żywo, ale będzie później dzisiaj):

Dostępne algorytmy:

  • PASSWORD_BCRYPT (integer)

    PASSWORD_BCRYPT służy do c powracaj do nowych skrótów haseł za pomocą algorytmu CRYPT_BLOWFISH.

    Spowoduje to zawsze użycie skrótu przy użyciu formatu krypty "2 $ $", który ma zawsze szerokość 60 znaków.

    Obsługiwane Opcje:

    • Salt - ręcznie wytworzeniem soli używanej podczas mieszania hasło. Zauważ, że to zastąpi i uniemożliwi automatyczne generowanie soli.

      Jeśli zostanie pominięty, losowa sól zostanie wygenerowana przez password_hash() dla każdego skrótu hasła. Jest to zamierzony tryb działania.

    • koszt - co oznacza koszt algorytmu, który należy zastosować. Przykłady tych wartości można znaleźć na stronie crypt().

      Jeśli pominięta, zostanie wykorzystana domyślna wartość 10. Jest to dobry koszt bazowy, ale możesz rozważyć zwiększenie go w zależności od sprzętu.

  • PASSWORD_DEFAULT (integer)

    Algorytm domyślny używać do mieszania, jeśli algorytm nie jest przewidziane. Może się to zmienić w nowszych wersjach PHP, gdy są obsługiwane nowsze, silniejsze algorytmy haszowania.

    Warto zauważyć, że z biegiem czasu stała ta może (i prawdopodobnie będzie) zmianę. Dlatego należy pamiętać, że długość wynikowego hasha może się zmienić. Dlatego, jeśli używasz PASSWORD_DEFAULT, powinieneś przechowywać wynikowy hash w sposób, który może przechowywać więcej niż 60 znaków (255 to zalecana szerokość).

    Wartości dla tej stałej:

    • PHP 5.5.0 - PASSWORD_BCRYPT

O ile, kiedy i jak PASSWORD_DEFAULT zostaną zaktualizowane, to na password_hash() documentation page:

UWAGA: Aktualizacje obsługiwanych algorytmów za pomocą tej funkcji (lub zmiany domyślnego) muszą przestrzegać następujących zasad:

  • Każdy nowy algorytm musi być w rdzeniu przez co najmniej 1 pełny wersjach PHP przed coraz domyślna. Jeśli więc np. Nowy algorytm zostanie dodany w 5.5.5, nie będzie on uprawniony do domyślnego zakończenia do 5.7 (ponieważ 5.6 będzie pierwszym pełnym wydaniem). Ale jeśli w 5.6.0 zostałby dodany inny algorytm, byłby on również domyślny na 5.7.0.

  • Domyślnym należy zmienić tylko w pełnej wersji (5.6.0, 6.0.0, etc), a nie na wydaniu wersji. Jedynym wyjątkiem jest sytuacja awaryjna, gdy krytyczna luka w zabezpieczeniach zostanie znaleziona w bieżącym stanie domyślnym.

+0

zaktualizowana dokumentacja potwierdzona! hehe :) czy mogę zapytać, czy jesteś członkiem zespołu php dev? Albo skąd możesz to wiedzieć? – hek2mgl

+0

@ hek2mgl: Tak, jestem. I [ta konkretna funkcja] (https://wiki.php.net/rfc/password_hash) była moją propozycją i wdrożeniem. Tak więc mam częściową odpowiedzialność za aktualizację dokumentów (i pomaganie innym za pomocą nowej funkcji) ;-) – ircmaxell

9

Zajrzałem do kodu źródłowego PHP. Domyślnie jest to bcrypt w PHP5.5.

Od ext/standard/php_password.h line 31:

#define PHP_PASSWORD_DEFAULT PHP_PASSWORD_BCRYPT 
+0

tak, to jest to! po prostu 'wget' źródła i' rgrep' ... Spróbuj tego z zamkniętym źródłem! ;) – hek2mgl

+3

Albo użyj [LXR] (http://lxr.php.net), również można zobaczyć, [to] (http://blog.ircmaxell.com/2012/03/phps-source-code-for- php-developers.html) dla zrozumienia kodu źródłowego PHP. – Paul

2

Dokumentacja jest rzeczywiście dość specyficzny, jeśli trochę źle sformułowane; hash jest najsilniejszy, jaki PHP uważa za dostępny w danym momencie i może ulec zmianie w dowolnym momencie. Hasła generowane przez password_hash zawierają trochę danych na początku, które wskazują, które zostały początkowo użyte do ich wytworzenia, pozwalając na takie aktualizacje, które pojawią się automatycznie wraz z pojawieniem się nowych algorytmów mieszania, bez łamania jakichkolwiek skrótów, które już zostały zapisane w bazie danych.

Ponieważ bcrypt jest jedynym obecnie zdefiniowanym algorytmem, najprawdopodobniej można założyć, że jest to ustawienie domyślne, ale szybką metodą weryfikacji byłoby utworzenie prostego skryptu PHP, który dwukrotnie użyje tego samego ciągu znaków, raz z każdą opcją i naprawiono sól i drukuje wynikowe skróty; prawdopodobnie będą pasować.

Oryginalna specyfikacja password_hash również może być pomocna. https://wiki.php.net/rfc/password_hash

Powiązane problemy