Hãy tưởng tượng bạn có thể lấy bất kỳ mẩu dữ liệu nào — một từ, một cuốn tiểu thuyết, một video 4 GB — và rút gọn nó thành một chuỗi ký tự ngắn, có độ dài cố định, nhận dạng duy nhất dữ liệu đó. Thay đổi một dấu phẩy trong bản gốc và chuỗi trở nên hoàn toàn khác. Và không có cách nào đảo ngược quá trình để khôi phục dữ liệu gốc.
Đó chính xác là những gì một hàm băm mật mã làm. Nó là một trong những khối xây dựng cơ bản nhất của bảo mật hiện đại, và nó âm thầm bảo vệ gần như mọi thứ bạn làm trực tuyến.
Ẩn dụ dấu vân tay
Hàm băm hoạt động như một dấu vân tay số. Dấu vân tay của bạn nhận dạng duy nhất bạn, nhưng không ai có thể tái tạo khuôn mặt bạn từ nó. Tương tự, băm mật mã nhận dạng duy nhất một mẩu dữ liệu mà không tiết lộ dữ liệu đó là gì.
Đưa bất kỳ đầu vào nào vào hàm băm và bạn nhận được một digest (còn gọi là giá trị băm hoặc checksum) — một chuỗi ký tự thập lục phân có độ dài cố định. SHA-256, một trong những thuật toán phổ biến nhất, luôn tạo ra đầu ra 64 ký tự bất kể kích thước đầu vào.
| Đầu vào | Digest SHA-256 (16 ký tự đầu) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Toàn bộ kho dữ liệu Wikipedia | (vẫn 64 ký tự) |
Bốn thuộc tính thiết yếu
Một hàm đủ tiêu chuẩn là băm mật mã chỉ khi thỏa mãn các thuộc tính sau:
- Tất định. Cùng một đầu vào luôn tạo ra cùng một đầu ra, trên bất kỳ máy nào, vào bất kỳ lúc nào.
- Một chiều (kháng tiền ảnh). Cho một giá trị băm, về mặt tính toán không thể tìm ra đầu vào gốc. Bạn không thể "giải băm" dữ liệu.
- Kháng va chạm. Thực tế không thể tìm hai đầu vào khác nhau tạo ra cùng một digest. Với SHA-256, xác suất va chạm ngẫu nhiên là khoảng 1 trên 2^128 — một con số lớn hơn số nguyên tử trong vũ trụ quan sát được.
- Hiệu ứng tuyết lở. Thay đổi một bit trong đầu vào sẽ đảo khoảng một nửa số bit trong đầu ra. Không có mẫu hoặc mối quan hệ phát hiện được giữa các đầu vào tương tự.
Phân biệt quan trọng: Băm không phải là mã hóa. Mã hóa có thể đảo ngược với khóa; băm cố ý không thể đảo ngược. Bạn mã hóa dữ liệu để bảo vệ nó trong quá trình truyền. Bạn băm dữ liệu để xác minh tính toàn vẹn hoặc lưu bằng chứng mà không giữ bản gốc.
Các thuật toán băm phổ biến
MD5 (1991)
- Đầu ra: 128 bit (32 ký tự hex)
- Trạng thái: Bị phá vỡ về mặt mật mã. Các nhà nghiên cứu có thể tạo va chạm trong vài giây trên laptop.
- Vẫn thấy trong: Checksum không liên quan bảo mật cho tải xuống tệp và hệ thống cũ.
SHA-1 (1995)
- Đầu ra: 160 bit (40 ký tự hex)
- Trạng thái: Không còn được khuyến nghị cho bảo mật. Google đã chứng minh va chạm thực tế vào năm 2017 (cuộc tấn công "SHAttered").
- Vẫn thấy trong: Kho Git cũ, một số chứng chỉ cũ.
SHA-256 (2001)
- Đầu ra: 256 bit (64 ký tự hex)
- Trạng thái: Tiêu chuẩn hiện tại. Không có cuộc tấn công thực tế đã biết.
- Sử dụng trong: Chứng chỉ TLS, Bitcoin, băm mật khẩu, chữ ký số, xác minh tính toàn vẹn tệp.
SHA-3 (2015)
- Đầu ra: Thay đổi (thường 256 bit)
- Trạng thái: Tiêu chuẩn mới nhất, dựa trên thiết kế nội bộ hoàn toàn khác (cấu trúc bọt biển Keccak) so với họ SHA-2.
- Sử dụng trong: Hệ thống hướng tương lai, Ethereum, tình huống cần đa dạng thuật toán.
| Thuật toán | Kích thước đầu ra | An toàn? | Tốc độ |
|---|---|---|---|
| MD5 | 128 bit | Không | Rất nhanh |
| SHA-1 | 160 bit | Không | Nhanh |
| SHA-256 | 256 bit | Có | Trung bình |
| SHA-3-256 | 256 bit | Có | Trung bình |
Băm mật mã được sử dụng ở đâu
Lưu trữ mật khẩu
Khi bạn tạo tài khoản, một hệ thống được thiết kế tốt không bao giờ lưu trữ mật khẩu dưới dạng văn bản thuần. Nó lưu trữ giá trị băm. Khi bạn đăng nhập, hệ thống băm những gì bạn gõ và so sánh với giá trị đã lưu. Ngay cả khi cơ sở dữ liệu bị xâm phạm, kẻ tấn công chỉ nhận được giá trị băm — không phải mật khẩu.
Các hệ thống hiện đại đi xa hơn bằng cách thêm salt ngẫu nhiên (dữ liệu bổ sung được thêm trước khi băm) và sử dụng các thuật toán cố ý chậm như bcrypt, scrypt hoặc Argon2 để làm cho việc dò tìm brute-force trở nên không khả thi.
Xác minh tính toàn vẹn tệp
Nhà phân phối phần mềm công bố checksum SHA-256 cùng với bản tải xuống. Sau khi tải, bạn tính giá trị băm của tệp trên máy và so sánh. Kết quả khớp chứng minh tệp không bị hỏng hoặc bị can thiệp trong quá trình truyền.
Chữ ký số
Khi bạn ký số một tài liệu, hệ thống băm tài liệu trước, sau đó mã hóa giá trị băm bằng khóa riêng của bạn. Người nhận giải mã bằng khóa công khai của bạn và so sánh với giá trị băm riêng của họ về tài liệu. Điều này hiệu quả hơn nhiều so với mã hóa toàn bộ tài liệu và chứng minh cả quyền tác giả lẫn tính toàn vẹn.
Blockchain
Mỗi khối trong blockchain chứa giá trị băm của khối trước đó, tạo thành một chuỗi bất biến. Thay đổi bất kỳ giao dịch nào trong quá khứ sẽ thay đổi giá trị băm của khối đó, phá vỡ chuỗi từ điểm đó trở đi, khiến việc can thiệp trở nên hiển nhiên ngay lập tức.
Tại sao MD5 và SHA-1 bị coi là đã bị phá
Một thuật toán băm bị "phá" khi ai đó có thể cố tình tạo hai đầu vào khác nhau tạo ra cùng một giá trị băm (một va chạm). Điều này phá hoại mọi trường hợp sử dụng dựa vào tính duy nhất.
- MD5: Va chạm có thể được tạo trong vài giây. Các nhà nghiên cứu đã tạo hai tệp PDF khác nhau có cùng giá trị băm MD5.
- SHA-1: Cuộc tấn công SHAttered năm 2017 tạo ra hai tệp PDF khác nhau có cùng giá trị băm SHA-1, cần khoảng 6.500 năm tính toán đơn CPU (khả thi với tài nguyên đám mây).
Quy tắc thực tế: Không bao giờ sử dụng MD5 hoặc SHA-1 cho bất kỳ mục đích liên quan đến bảo mật — mật khẩu, chứng chỉ, chữ ký số, hoặc kiểm tra tính toàn vẹn khi có đối thủ. Hãy dùng SHA-256 hoặc SHA-3 thay thế.
Tìm hiểu thêm
Băm là một trong những khái niệm trở nên trực quan khi bạn thử nghiệm. Hãy thử băm một câu, sau đó thay đổi một ký tự và quan sát hiệu ứng tuyết lở trực tiếp.
- Cách tạo và xác minh giá trị băm — hướng dẫn từng bước
- Trình tạo băm — tính SHA-256, MD5, SHA-512 và hơn thế nữa ngay trong trình duyệt
- Nhận dạng giá trị băm — dán giá trị băm chưa biết và nhận dạng thuật toán
