Cả ba đều là hàm hash chậm có tham số chi phí, khác nhau ở loại tài nguyên mà chúng bắt kẻ tấn công phải trả.
- Argon2id — lựa chọn mặc định cho hệ thống mới. Vừa tốn CPU vừa tốn bộ nhớ (memory-hard) nên GPU/ASIC mất lợi thế; biến thể
idkết hợp chống side-channel của Argon2i và chống GPU của Argon2d. Tham số:m(bộ nhớ),t(số vòng),p(song song). Điểm khởi đầu hợp lý: m=19 MiB, t=2, p=1, tăngmnếu server dư RAM. - scrypt — cũng memory-hard, dùng khi runtime không có Argon2. Tham số
N(chi phí CPU/bộ nhớ),r,p; ví dụ N=2^17, r=8, p=1. - bcrypt — chỉ tốn CPU, không memory-hard, nhưng đã được kiểm chứng lâu năm và có sẵn ở mọi ngôn ngữ. Đặt cost (work factor) ≥ 10, phổ biến 12. Hai bẫy riêng của bcrypt: giới hạn 72 byte đầu của mật khẩu (phần dư bị bỏ), và một số bản cài đặt có vấn đề với byte null. Muốn hỗ trợ mật khẩu dài thì pre-hash bằng SHA-256 rồi mã hoá base64 trước khi đưa vào bcrypt.
Cách chọn tham số thực tế: không copy con số cố định — đo trên chính phần cứng production, tăng dần chi phí cho tới khi một lần verify mất khoảng 0.5-1 giây ở mức tải chấp nhận được, rồi lùi lại một nấc. Nhớ rằng hash chậm cũng là tài nguyên bị tiêu tốn khi bị flood đăng nhập, nên phải đi kèm giới hạn tần suất.
PBKDF2 chỉ nên chọn khi có ràng buộc tuân thủ (FIPS) — nó chống GPU kém nhất trong nhóm.