Szyfrowanie haseł za pomocą Argon2

szyfr argon2

Argon2 jest nowoczesnym algorytmem szyfrowania jednostronnego. Jest on zalecany do szyfrowania haseł po tym jak wygrał konkurs Password Hashing Competition w Lipcu 2015

Algorytm został zaprojektowany w taki sposób, aby optymalnie wykorzystać dostępną pamięć oraz dostępne jednostki obliczeniowe, zapewniając jednocześnie ochronę przed atakami.

W przeciwieństwie do Bcrypt, który mógł być parametryzowany tylko jednym czynnikiem -“koszt”, Argon2 jest parametryzowany przez trzy różne czynniki: 

  •  Koszt pamięci, który określa użycie pamięci przez algorytm.
  •  Koszt czasu, który określa czas wykonania algorytmu i liczbę iteracji.
  •  Współczynnik równoległości, który określa liczbę równoległych wątków.

Argon2 występuje w dwóch wariantach: Argon2i i Argon2d. Argon2i lepiej nadaje się do szyfrowania haseł i uzyskiwania kluczy na podstawie haseł, natomiast Argon2d jest szybszy i wysoce odporny na ataki polegające na łamaniu GPU.

Jak skorzystać z Argon2 w php

Algorytm szyfrowania Argon2 został dodany do języka PHP w wersji 7.2 Bez instalacji dodatkowych modułów możemy skorzystać z jego możliwości.

Od jakiegoś czasu twórcy PHP zalecają funkcje password_hash() do szyfrowania haseł. Jeżeli chcesz użyć w procesie szyfrowania tytułowego algorytmu, wystarczy że podasz jako drugi parametr PASSWORD_ARGON2I lub PASSWORD_ARGON2ID – są to stałe określające typ algorytmu kryptograficznego.

<?php
$pass = 'hasło'; 
$hash = password_hash($pass, PASSWORD_ARGON2I); 
var_dump($hash);

Funkcja zwraca string z hashem hasła wykonanym za pomocą wybranej opcji.

Tak jak wspomniałem powyżej, algorytm można parametryzować. Trzecim argumentem funkcji password_hash jest tablica z parametrami.

Dla Argon2 konfiguracja będzie wyglądać następująco:

<?php
$params = [
    'memory_cost' => //(integer) Maksymalna wartość wykorzystywanej 
        //pamięci w kb. Domyślnie ASSWORD_ARGON2_DEFAULT_MEMORY_COST
    'time_cost' => //(integer) Maksymalna wartość czasu jaką może zabrać
        //algorytm. Domyślnie PASSWORD_ARGON2_DEFAULT_TIME_COST
    'threads' => //(integer) Ilość wątków dostępnych do obliczeń. 
        //Domyślnie PASSWORD_ARGON2_DEFAULT_THREADS
];

Szyfrowanie Argon2 w Symfony

Argon2 w Symfony pojawił się już w wersji 3.4. Nie był jednak to domyślny sposób szyfrowania, pozostał nim bcrypt. Nie było też możliwości ustawienia algorytmu zgodnie z naszymi wymaganiami. 

W symfony 4.1 w komponencie `securit-bundle` została dodana konfiguracja. Od tego momentu można wybrać jako encoder haseł argon2 i sparametryzować go. 

Przykładowa konfiguracja:

# config/packages/security.yaml
security: encoders:
    App\Entity\User:
        algorithm: 'argon2i'
        memory_cost: 1024
        time_cost: 3

	

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *