🌐 VI

🔐 Trình tạo Hash

Chuyển văn bản sang nhiều thuật toán băm khác nhau. Dùng để kiểm tra tính toàn vẹn tệp, băm mật khẩu và xác thực dữ liệu.

Chọn một tệp để tạo hash từ nội dung tệp
HƯỚNG DẪN

Tìm hiểu thêm

01

1. Hàm băm là gì

Hàm băm là hàm một chiều chuyển dữ liệu có kích thước bất kỳ thành giá trị có kích thước cố định. Chúng có hiệu ứng thác lũ, tức chỉ cần thay đổi rất nhỏ ở đầu vào cũng tạo ra một hash hoàn toàn khác, và cùng một đầu vào luôn cho ra cùng một đầu ra. MD5 tạo hash 128-bit, SHA-1 tạo hash 160-bit, còn SHA-256 tạo hash 256-bit. Vì hash là hàm một chiều không thể giải mã ngược, chúng rất phù hợp để xác minh tính toàn vẹn trong khi vẫn che giấu dữ liệu gốc. Hash được dùng rộng rãi trong xác minh tải tệp, lưu trữ mật khẩu, blockchain, chữ ký số, v.v.

02

2. So sánh thuật toán MD5 và SHA

MD5 là hash 128-bit được phát triển năm 1991, rất nhanh nhưng dễ bị tấn công va chạm. Các lỗ hổng bảo mật nghiêm trọng được phát hiện vào năm 2004 khiến nó không phù hợp cho mục đích mật mã, chỉ còn được dùng cho checksum tệp. SHA-1 là hash 160-bit an toàn hơn MD5, nhưng thông báo của Google vào năm 2017 về các trường hợp va chạm thực tế đã khiến nó bị ngừng khuyến nghị. SHA-256 thuộc họ SHA-2, tạo hash 256-bit và hiện là tiêu chuẩn được dùng rộng rãi nhất. Bitcoin cũng sử dụng SHA-256. SHA-512 cung cấp mức bảo mật cao hơn với 512 bit nhưng chậm hơn. Hệ thống mới nên dùng SHA-256 hoặc cao hơn.

03

3. Bảo mật hash và các lỗ hổng

Hàm băm có ba yêu cầu bảo mật chính. Thứ nhất, khả năng chống tiền ảnh: phải khó tìm ra dữ liệu gốc từ giá trị hash. Thứ hai, khả năng chống tiền ảnh thứ hai: phải khó tìm một đầu vào khác tạo ra cùng hash. Thứ ba, khả năng chống va chạm: phải khó tìm hai đầu vào khác nhau tạo ra cùng một hash. MD5 và SHA-1 đã mất khả năng chống va chạm, cho phép kẻ tấn công cố ý tạo cùng một hash. Tấn công rainbow table dùng các bảng hash được tính sẵn để dò ngược, nhưng thêm salt có thể chống lại điều này.

04

4. Xác minh tính toàn vẹn tệp

Hash tệp là cách hiệu quả nhất để xác minh rằng tệp đã tải xuống không bị chỉnh sửa. Các trang phân phối phần mềm cung cấp giá trị hash chính thức kèm theo tệp. Người dùng tính hash của tệp sau khi tải về rồi so sánh với giá trị chính thức. Chỉ cần khác một bit là hash đã hoàn toàn khác, giúp phát hiện thay đổi ngay lập tức. Rất cần cho ảnh ISO Linux, phần mềm mã nguồn mở, giao dịch blockchain, v.v. Git cũng tạo hash SHA-1 cho từng commit để bảo đảm tính toàn vẹn của mã. Hash có thể phát hiện hỏng hóc do lỗi mạng khi truyền tệp lớn.

05

5. Thực hành tốt khi băm mật khẩu

Không bao giờ lưu mật khẩu ở dạng văn bản thuần trong cơ sở dữ liệu. Chúng nên được chuyển thành hash, nhưng MD5 hoặc SHA-256 đơn giản là không đủ. Chúng dễ bị tấn công rainbow table. Bạn phải thêm salt. Salt là một chuỗi ngẫu nhiên được thêm vào mật khẩu, khiến cùng một mật khẩu cho ra các hash khác nhau. Ngoài ra, hãy dùng các hàm băm chậm như bcrypt, scrypt hoặc Argon2. Những hàm này cố ý làm chậm tính toán để gây khó cho tấn công brute force. OWASP khuyến nghị Argon2 là ưu tiên hàng đầu cho băm mật khẩu.

06

6. Rainbow table và salt

Rainbow table là các cơ sở dữ liệu khổng lồ chứa giá trị hash được tính sẵn. Chúng lưu trước hash của hàng triệu mật khẩu phổ biến rồi đối chiếu với các hash bị đánh cắp để tìm ra mật khẩu gốc. Ví dụ, MD5 của "password123" luôn là "482c811da5d5b4bc6d497ffa98491e38", nên có thể được tìm thấy ngay trong bảng. Salt giúp chống lại điều này. Việc thêm một chuỗi ngẫu nhiên duy nhất cho mỗi người dùng khiến cùng một mật khẩu tạo ra các hash khác nhau. Băm "password123" + "x8k2m9" sẽ cho ra một giá trị không có trong rainbow table. Salt có thể được lưu dạng văn bản thuần trong DB, và mỗi mật khẩu phải dùng salt khác nhau thì mới hiệu quả.

Câu hỏi thường gặp

Văn bản hoặc tệp của tôi có được gửi lên máy chủ không?
Không. Toàn bộ quá trình băm diễn ra ngay trên trình duyệt của bạn bằng JavaScript, không có gì được tải lên. Văn bản và tệp của bạn luôn ở trên thiết bị.
Tôi có thể dùng công cụ này để băm mật khẩu lưu trữ không?
Chúng tôi không khuyến nghị. MD5 và SHA-256 là các hàm băm nhanh, dễ bị tấn công brute-force, nên mật khẩu cần dùng hàm chậm chuyên dụng như bcrypt, scrypt hoặc Argon2 thay thế. Công cụ này phù hợp hơn cho kiểm tra tính toàn vẹn tệp và checksum dữ liệu.
Tôi nên chọn thuật toán nào?
Hãy dùng SHA-256 hoặc cao hơn cho mọi trường hợp mới. MD5 và SHA-1 đã mất khả năng chống va chạm và không phù hợp cho mục đích bảo mật - chỉ nên giữ để tương thích với hệ thống cũ.
Khi nào nên dùng tùy chọn HMAC?
HMAC (băm có khóa) xác minh rằng một thông điệp đến từ bên giữ một khóa bí mật cụ thể. Dùng khi bạn cần cả xác thực lẫn toàn vẹn, như ký request API hoặc xác minh webhook.
Vì sao cùng một đầu vào đôi khi cho ra hash khác nhau?
Với cùng một thuật toán và đầu vào, hash luôn giống nhau trừ khi bạn đã dùng khóa HMAC hoặc tùy chọn chữ hoa. Nếu kết quả khác, hãy kiểm tra các khác biệt nhỏ trong đầu vào như khoảng trắng thừa hoặc ngắt dòng.