Tất cả bài viết

Argon2: vì sao thuật toán này giành chiến thắng cuộc thi băm mật khẩu

Nghị định 13/2023 về bảo vệ dữ liệu cá nhân của Việt Nam yêu cầu bên kiểm soát dữ liệu áp dụng "biện pháp bảo vệ phù hợp" mà không chỉ định thuật toán cụ thể — quyết định kỹ thuật vẫn thuộc về đội ngũ phát triển. Với sự bùng nổ của ví điện tử như MoMo và VNPay, nơi một cơ sở dữ liệu mật khẩu rò rỉ có thể ảnh hưởng đến hàng triệu tài khoản, Argon2 — người chiến thắng Password Hashing Competition 2015 và được OWASP khuyến nghị ưu tiên hơn bcrypt — đã trở thành lựa chọn mặc định hợp lý cho các hệ thống xác thực mới.

Vì sao bộ nhớ quan trọng ngang thời gian

Bcrypt và PBKDF2 chỉ làm chậm phép tính. Argon2 còn buộc mỗi lần thử phải cấp phát một lượng RAM có thể cấu hình — đây gọi là hàm memory-hard. Một farm GPU thuê trên cloud có thể song song hóa các phép tính đơn giản với chi phí rẻ, nhưng song song hóa việc truy cập đồng thời vào nhiều bộ nhớ thì đắt đỏ hơn nhiều: bộ nhớ, khác với lõi tính toán, bị giới hạn vật lý trên mỗi card.

Ba biến thể: d, i, id

  • Argon2d — truy cập bộ nhớ phụ thuộc vào chính mật khẩu, cho khả năng chống GPU tối đa nhưng về lý thuyết có thể bị tấn công kênh phụ.
  • Argon2i — truy cập bộ nhớ không phụ thuộc mật khẩu, đóng lỗ hổng đó nhưng đánh đổi một chút khả năng chống GPU.
  • Argon2id — kết hợp cả hai chiến lược ở các giai đoạn tính toán khác nhau. Đây là biến thể được RFC 9106 khuyến nghị và là mặc định ở hầu hết các framework.

Ba tham số độc lập

Khác với "cost factor" duy nhất của bcrypt, Argon2 cho phép điều chỉnh bộ nhớ, số vòng lặp và mức song song một cách độc lập. Điều này hữu ích trong thực tế: một hàm serverless với bộ nhớ hạn chế có thể bù lại bằng cách tăng số vòng lặp, trong khi một máy chủ xác thực chuyên dụng với RAM dư dả có thể làm ngược lại.

Vì sao cần điều này

  • Chọn thuật toán hiện đại cho hệ thống xác thực mới thay vì MD5 hay SHA-256 đơn thuần.
  • Hiểu vì sao Argon2 làm cho các cuộc tấn công bằng GPU thuê hoặc phần cứng đào tiền mã hóa trở nên đặc biệt tốn kém.
  • Lập kế hoạch di chuyển khỏi bcrypt hoặc PBKDF2 như một phần của đánh giá bảo mật.

Cái bẫy của tham số song song

Song song hóa trông như một lợi ích miễn phí — nhiều luồng hơn, băm nhanh hơn trên máy chủ nhiều lõi. Nhưng kẻ tấn công sở hữu phần cứng nhiều lõi tương tự cũng nhận được đúng mức tăng tốc đó ở mỗi lần thử. Đặt mức song song bằng số lõi thực tế của máy chủ là an toàn; tăng lên "để phòng ngừa" chỉ cho kẻ tấn công một khoản giảm giá tương ứng.

Dùng thử công cụ