Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> An Ninh Mạng

Salt trong bảo mật mật khẩu: Định nghĩa, cách hoạt động và vai trò chống tấn công

Salt (Muối) trong mật mã học là gì?

Salt là một chuỗi dữ liệu ngẫu nhiên (random data) được thêm vào mật khẩu trước khi hash. Mỗi mật khẩu có một salt duy nhất.

Quy trình hash có salt:

hash = Hash_Function(password + salt)
Lưu trữ: salt + hash (không lưu password gốc)

Ví dụ minh họa

Mật khẩu: 123456

  • Không salt: MD5("123456") = e10adc3949ba59abbe56e057f20f883e (dễ tra bảng Rainbow Table)
  • Có salt: Salt = X7#kP2 → Hash("123456X7#kP2") = a1b2c3... (duy nhất cho user này)

Tại sao Salt quan trọng?

  1. Chống Rainbow Table: Bảng tra cứu hash có sẵn trở nên vô hiệu vì mỗi user có salt khác nhau
  2. Chống Brute-force: Tăng gấp N lần sức tính toán (N = số user) vì phải hash riêng cho từng salt
  3. Ngăn user trùng mật khẩu có hash giống nhau: User A và B cùng pass "123456" nhưng hash khác nhau nhờ salt khác
  4. Bảo vệ khi database bị rò rỉ: Tin tặc không thể dùng dictionary attack hiệu quả

Các thuật toán hash hiện đại tự động xử lý Salt

  • Bcrypt: Tự động tạo salt duy nhất cho mỗi hash (cost factor قابل điều chỉnh)
  • Argon2: Thuyết chiến Password Hashing Competition 2015, chống GPU/ASIC
  • PBKDF2: Lặp hash nhiều lần (iterations) + salt
  • scrypt: Tốn bộ nhớ (memory-hard), chống phần cứng chuyên dụng

Lưu ý quan trọng

  • Salt không cần giữ bí mật (có thể lưu công khai cùng hash)
  • Salt phải duy nhất cho mỗi mật khẩu (không dùng chung salt cho toàn hệ thống)
  • Salt phải đủ dài ngẫu nhiên (tối thiểu 16 bytes, khuyến nghị 32 bytes)
  • Không tự viết thuật toán hash → Dùng thư viện chuẩn: bcrypt, argon2, PBKDF2

Salt trong thực tế (khác với ẩm thực)

Trong ẩm thực: "Salting" = ủ muối để bảo quản thực phẩm (cá muối, dưa muối).
Trong bảo mật: "Salting" = thêm dữ liệu ngẫu nhiên để "bảo quản" mật khẩu an toàn hơn.