Encoder de Senha Nativo no Symfony 4.3

Hash de senhas é uma das partes mais críticas de um bom sistema de segurança. No Symfony 4.3, foi adicionado um encoder de senha Sodium para realizar o hash de senhas (ou como o Symfony chama: “encode”, por razões históricas) usando a biblioteca libsodium.

No entanto, devido a natureza evolutiva acelerada dos hashers, é cada vez menos recomendado selecionar um algoritmo de hash específico. Mesmo a função password_hash() do PHP define um valor especial PASSWORD_DEFAULT para auto-selecionar o melhor algoritmo de hash disponível (nas versões atuais do PHP ainda é Bcrypt, mas irá mudar no futuro).

É por isso que no Symfony 4.3 foram realizadas mais algumas mudanças relacionadas aos encoders de senhas. Primeiro, a nova recomendação para hash de senhas de usuários é contar com o valor 'auto':

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

Esse valor seleciona automaticamente o melhor algoritmo de hash, portanto, não refere-se a um algoritmo específico e será alterado no futuro. A implementação atual usa 'sodium' se possível e, caso contrário, volta para 'native'.

A opção de configuração 'native' está associada à classe NativePasswordEncoder, que é a outra mudança principal referente aos hashers de senha no Symfony 4.3. Este novo encoder depende tanto do Symfony quanto do PHP para selecionar o melhor algoritmo possível.

A implementação atual do NativePasswordEncoder tenta usar qualquer uma das variantes do Argon2 (Argon2i ou Argon2id) antes de retornar ao Bcrypt. No entanto, se a constante do PHPPASSWORD_DEFAULT mudar no futuro, aquele novo algoritmo será selecionado (se o PHP o definir como mais forte que Argon2).

Tradução de: New in Symfony 4.3: Native password encoder