2013-02-10 4 views
3

Согласно http://php.net/manual/en/function.hash.php, существует способ хэширования php: hash(). Он поддерживает все приведенные ниже методы, но мне интересно, что является самым безопасным методом для хэширования паролей.Какой алгоритм хэша наиболее безопасен для паролей?

Results: (in microseconds) 
    1. md4       5307.912 
    2. md5       6890.058 
    3. crc32b      7298.946 
    4. crc32       7561.922 
    5. sha1       8886.098 
    6. tiger128,3     11054.992 
    7. haval192,3     11132.955 
    8. haval224,3     11160.135 
    9. tiger160,3     11162.996 
    10. haval160,3     11242.151 
    11. haval256,3     11327.981 
    12. tiger192,3     11630.058 
    13. haval128,3     11880.874 
    14. tiger192,4     14776.945 
    15. tiger128,4     14871.12 
    16. tiger160,4     14946.937 
    17. haval160,4     15661.954 
    18. haval192,4     15717.029 
    19. haval256,4     15759.944 
    20. adler32      15796.184 
    21. haval128,4     15887.022 
    22. haval224,4     16047.954 
    23. ripemd256      16245.126 
    24. haval160,5     17818.927 
    25. haval128,5     17887.115 
    26. haval224,5     18085.002 
    27. haval192,5     18135.07 
    28. haval256,5     18678.903 
    29. sha256      19020.08 
    30. ripemd128      20671.844 
    31. ripemd160      21853.923 
    32. ripemd320      22425.889 
    33. sha384      45102.119 
    34. sha512      45655.965 
    35. gost       57237.148 
    36. whirlpool      64682.96 
    37. snefru      80352.783 
    38. md2       705397.844 
+2

Основная проблема с * всеми * приведенными выше для паролей они * предназначены для быстрого * (или, скорее, не разработаны иначе). Для паролей и такая хэш-функция должна быть «относительно вычислительно дорогой» и «непараллелизуема». (Я бы предложил ** не ** писать свою собственную библиотеку паролей, трудно получить право, и это только совет.) – 2013-02-10 03:22:40

ответ

6

Ничего из перечисленного.

Вы должны use bcrypt.

+0

Если я прав, это только один файл include? – user2058041

+0

@ user2058041: Звучит правильно. (Я не использую PHP, поэтому я не уверен) – SLaks

+1

+1 хотя есть альтернативы, такие как 'scrypt' (не уверены в привязках PHP) – 2013-02-10 03:21:16

0

что является абсолютным наиболее безопасный метод хеширования паролей

Чтобы ответить на предпосылке вопрос: Абсолютный самый безопасный, вероятно, композиция:

  1. Сначала Hardware Security Module , используя HMAC с секретным ключом, управляемым HSM,
  2. , за которым следует хеширование with the winner of the Password Hashing Competition, как только этот победитель был найден, и имел 5-10 лет воздействия на r мир и рецензии.

До этого времени, самый безопасный, вероятно:

  1. HSM, как описано выше, и
  2. Один из хороших вариантов от canonical answer on password hashing.

Однако реалистичное хеширование пароля не является серьезной проблемой, и просто хэширование с помощью любого из «хороших» решений будет более чем достаточно. Хорошие решения являются:

  1. BCrypt,
  2. PBKDF2 с HMAC с SHA256 (или 512).
  3. И многие люди также считают SCrypt сильным выбором, хотя некоторые считают его немного молодым.

Для обоих вышеизложенных вы не должны откатывать свою собственную композицию. Вы всегда должны использовать зрелую, хорошо протестированную и проверенную библиотеку, предназначенную для долговременного хранения паролей. Хеширование паролей связано не только с использованием BCrypt или PBKDF2, вам нужна композиция с разумными значениями по умолчанию для кодировок символов, солей, коэффициентов итераций и факторов стоимости и т. Д.

Смежные вопросы