Хеші/крипто

Argon2 Hash + Verify

Хешування паролів через Argon2 (переможець Password Hashing Competition, RFC 9106) — варіанти d/i/id, з перевіркою пароля проти наявного хешу.


                    

Argon2 — переможець Password Hashing Competition і рекомендований у RFC 9106 алгоритм для хешування паролів. На відміну від bcrypt, він навмисно вимагає багато оперативної памʼяті, а не лише часу процесора, що ускладнює атаки на спеціалізованому обладнанні (GPU, ASIC).

Як користуватися

Типові сценарії

Що варто памʼятати

Параметр памʼяті — головний захист Argon2: чим більше памʼяті вимагає хешування, тим дорожче зловмиснику паралелити атаку на GPU з обмеженим обсягом швидкої памʼяті на чіп.

Argon2id рекомендують для більшості випадків: Argon2i стійкіший до side-channel атак, Argon2d — до GPU-атак, а id поєднує обидва підходи.

Стаття про цей інструмент: Argon2: чому цей алгоритм переміг конкурс на хешування паролів

Часті запитання

Чому Argon2 рекомендують замість старих хешів на кшталт MD5 чи SHA-256 для паролів?

Argon2 навмисно повільний і вимагає багато пам'яті, що робить перебір та зламування на GPU/ASIC значно дорожчими — на відміну від швидких загальних хешів MD5 чи SHA-256, непридатних для зберігання паролів.

За що відповідають параметри пам'яті, ітерацій і паралелізму?

Вартість пам'яті задає, скільки RAM потрібно для однієї спроби хешування, ітерації — кількість проходів, а паралелізм — кількість потоків; збільшення будь-якого з них підвищує вартість зламу, але сповільнює хешування.

Який варіант Argon2 обрати — d, i чи id?

Argon2id — рекомендований варіант за замовчуванням для хешування паролів, оскільки поєднує стійкість Argon2i до атак по бічних каналах зі стійкістю Argon2d до зламу на GPU.

Звідки взявся Argon2 як стандарт?

Argon2 переміг у Password Hashing Competition 2015 року — відкритому конкурсі криптографів, метою якого було знайти найкращий алгоритм для хешування паролів. Відтоді OWASP рекомендує його як пріоритетний вибір над bcrypt.

Чи параметр паралелізму лише прискорює хешування?

Ні, той самий параметр так само прискорює перебір для зловмисника з багатоядерним обладнанням, тому паралелізм варто підбирати відповідно до реальної кількості ядер сервера, а не збільшувати без потреби.

Статті: Хеші/крипто

Hash Generator: чим MD5, SHA-1 і SHA-256 відрізняються одна від одної

Чому MD5 досі використовують для перевірки цілісності файлів, але не для паролів.

Checksum Verifier: як перевірити, що файл не пошкоджено

Чому збіг контрольної суми підтверджує цілісність файлу, але не те, хто його створив.

HMAC: чим хеш з ключем відрізняється від звичайного хешу

Чому звичайний SHA-256 не захищає від підробки повідомлення, а HMAC — захищає.

Bcrypt: чому паролі хешують повільно, а не швидко

Чому швидкий SHA-256 — погана ідея для паролів, а повільний bcrypt — правильна.

UUID: як генерують ідентифікатори, що майже ніколи не повторюються

Чому UUID v4 можна генерувати незалежно на мільйонах машин без ризику колізій.

Генератор паролів: що насправді робить пароль стійким

Чому довгий пароль зі словника надійніший за короткий з символами й цифрами.

AES: як працює симетричне шифрування

Чому той самий ключ шифрує і розшифровує дані в AES, і чим це відрізняється від асиметричного шифрування.

Scrypt: навіщо алгоритму потрібно багато пам'яті

Чому scrypt навмисно вимагає багато пам'яті, щоб ускладнити перебір на ASIC-пристроях.

TOTP: як працюють одноразові коди в застосунках-автентифікаторах

Чому код у Google Authenticator працює без інтернету і синхронізується із сервером лише за часом.

PBKDF2: найстаріший стандарт розтягування ключів

Чому рекомендована кількість ітерацій PBKDF2 зростає з кожним роком.

X.509: що всередині SSL-сертифіката

Що саме браузер перевіряє в сертифікаті сайту, перш ніж показати зелений замочок.

PGP: як працює шифрування з відкритим і приватним ключем

Чому можна вільно ділитися публічним ключем PGP, але не приватним.