Băm Là Gì? Giải thích Đầy đủ về Hàm Băm
Trả lời nhanh
Hashing chuyển bất kỳ input nào thành output kích thước cố định (hash) bằng hàm one-way. Cùng input luôn tạo cùng hash; input khác tạo hash khác (collision resistance). Dùng Hash Generator miễn phí để tính SHA-256, SHA-1 và MD5 trong trình duyệt.
Giới thiệu
Hashing là quá trình chuyển input dữ liệu kích thước bất kỳ thành output kích thước cố định gọi hash hoặc digest. Hàm hash là thuật toán thực hiện chuyển đổi. Hàm hash cryptographic có thuộc tính đặc biệt hữu ích cho integrity dữ liệu, lưu mật khẩu và chữ ký digital. Khác encryption, hashing là one-way —không thể phục hồi input từ hash.
Từng bước một
-
Hiểu các thuộc tính của hàm băm
Hàm băm mật mã có bốn thuộc tính chính: (1) Xác định - cùng một đầu vào luôn cho cùng một đầu ra. (2) Tính toán nhanh. (3) Một chiều - không thể khôi phục đầu vào từ hàm băm. (4) Chống va chạm - không thể tìm thấy hai đầu vào khác nhau có cùng hàm băm. (5) Hiệu ứng tuyết lở - thay đổi đầu vào nhỏ sẽ làm thay đổi mạnh mẽ đầu ra.
-
Tìm hiểu các thuật toán phổ biến
SHA-256 (đầu ra 256 bit, 64 ký tự hex) là tiêu chuẩn hiện đại — được sử dụng trong Bitcoin, TLS và chữ ký số. SHA-512 an toàn hơn nhưng chậm hơn. SHA-3 là họ mới nhất. MD5 (128-bit) và SHA-1 (160-bit) bị hỏng để chống va chạm và không nên sử dụng để bảo mật.
-
Phân biệt băm với mã hóa
Băm là một chiều - bạn không thể đảo ngược nó. Mã hóa là hai chiều - bạn có thể giải mã bằng khóa. Băm là để đảm bảo tính toàn vẹn và xác minh; mã hóa là để bảo mật. Không bao giờ sử dụng hàm băm để lưu trữ dữ liệu bạn cần khôi phục.
-
Sử dụng hàm băm chính xác
Để toàn vẹn dữ liệu, hãy băm dữ liệu và so sánh với hàm băm đã biết. Đối với mật khẩu, hãy sử dụng hàm băm kéo dài khóa chậm (bcrypt, scrypt, Argon2) với một loại muối duy nhất — không phải thô SHA-256, quá nhanh và dễ bị tấn công vũ phu.
Ví dụ
hàm băm SHA-256
đầu vào: Hello, World!
đầu ra: dffd6021bb2bd5b0af676290809ec008dfca50a8d29e6ac0a52c2d7e9f0a3b0c
Hiệu ứng tuyết lở
đầu vào: Xin chào Thế giới! (so với Xin chào, thế giới?)
đầu ra: Hàm băm hoàn toàn khác mặc dù thay đổi một ký tự
Hàm băm MD5 (bị hỏng, chỉ kế thừa)
đầu vào: Hello, World!
đầu ra: ed0760733d7505e9ceacf8af225020ac
Các vấn đề thường gặp
- Sử dụng MD5 hoặc SHA-1 để bảo mật —cả hai đều bị hỏng do khả năng chống va chạm. Sử dụng SHA-256 hoặc mạnh hơn cho bất kỳ mục đích bảo mật nào.
- Băm mật khẩu không có muối — mật khẩu giống hệt nhau sẽ tạo ra các giá trị băm giống hệt nhau, tạo điều kiện cho các cuộc tấn công bảng cầu vồng. Sử dụng bcrypt, scrypt hoặc Argon2 với một loại muối duy nhất.
- Nhầm lẫn giữa băm và mã hóa — băm là một chiều (không thể đảo ngược); mã hóa là hai chiều (có thể được giải mã bằng khóa).
- Yêu cầu các giá trị băm là duy nhất — về mặt lý thuyết có thể xảy ra xung đột nhưng thực tế không khả thi đối với các thuật toán bảo mật (SHA-256 có 2^256 kết quả đầu ra có thể có).
Mẹo
- Sử dụng SHA-256 để xác minh tính toàn vẹn dữ liệu, đánh địa chỉ nội dung và chữ ký số.
- Để lưu trữ mật khẩu, hãy sử dụng bcrypt, scrypt hoặc Argon2 —không phải thô SHA-256. Các thuật toán này có tính năng kéo dài khóa để chống lại lực lượng vũ phu.
- Băm là một chiều—không bao giờ sử dụng nó để lưu trữ dữ liệu bạn cần khôi phục. Sử dụng mã hóa cho dữ liệu bí mật.
- Sử dụng Trình tạo hàm băm của chúng tôi để tính toán SHA-256 và các hàm băm khác ngay trong trình duyệt của bạn.