Новое в Symfony 4.3: Собственный кодировщик паролей

Хеширование паролей является одной из важнейших частей хорошей системы безопасности. В Symfony 4.3 добавили кодировщик паролей Sodium для хеширования (или «кодирования», как Symfony называет это по историческим причинам) паролей с использованием библиотеки libsodium.

Однако, учитывая быстро развивающуюся природу хэшей, все меньше и меньше рекомендуется выбирать конкретный алгоритм хэширования. Даже функция PHP password_hash() определяет специальное значение PASSWORD_DEFAULT для автоматического выбора наилучшего из доступных алгоритмов хеширования (в текущих версиях PHP это все еще Bcrypt, но в будущем он изменится).

Вот почему в Symfony 4.3 сделали еще несколько изменений, связанных с кодировщиками паролей. Во-первых, новая рекомендация для хеширования пользовательских паролей – полагаться на значение 'auto':

# config/packages/security.yaml
security:
    # ...
    encoders:
        App\Entity\User:
-            algorithm: 'bcrypt'
-            algorithm: 'argon2i'
-            algorithm: 'sodium'
+            algorithm: 'auto'

Это значение автоматически выбирает наилучший из возможных алгоритмов хеширования, поэтому оно не относится к конкретному алгоритму и изменится в будущем. Текущая реализация использует 'sodium', если это возможно, в противном случае он возвращается к 'native'.

Параметр 'native' конфигурации связан с классом NativePasswordEncoder, который является другим основным изменением хэшей паролей в Symfony 4.3. Этот новый кодировщик использует как Symfony, так и PHP для выбора наилучшего алгоритма.

Текущая реализация NativePasswordEncoder пытается использовать любой из вариантов Argon2 (Argon2i или Argon2id), прежде чем вернуться к Bcrypt. Однако, если в будущем константа PHP PASSWORD_DEFAULT изменится, будет выбран этот новый алгоритм (если PHP определяет его как более сильный, чем Argon2).