Hash là gì và tại sao nó có mặt khắp nơi trong công nghệ?
Bạn có lẽ đã thấy chuỗi như thế này:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
Chúng xuất hiện trong trang tải phần mềm ("xác minh hash SHA-256"), trong cuộc trò chuyện về blockchain, trong thảo luận bảo mật mật khẩu và trong vô số công cụ lập trình. Nhưng thực sự hash là gì, và tại sao nó quan trọng đến vậy với công nghệ hiện đại?
Khái niệm bằng ngôn ngữ đơn giản
Hàm hash nhận bất kỳ đầu vào nào — một từ, một câu, toàn bộ tệp — và tạo đầu ra có độ dài cố định gọi là giá trị hash (cũng gọi là digest, checksum hay fingerprint). Các thuộc tính chính:
- Xác định. Cùng đầu vào luôn tạo cùng đầu ra.
- Độ dài cố định. Bất kể đầu vào lớn đến đâu, đầu ra luôn cùng kích thước.
- Một chiều. Bạn không thể tái tạo đầu vào gốc từ đầu ra hash.
- Hiệu ứng tuyết lở. Thay đổi nhỏ trong đầu vào tạo hash hoàn toàn khác.
Hãy nghĩ nó như dấu vân tay cho dữ liệu. Giống như vân tay xác định duy nhất bạn nhưng không thể dùng để tái tạo khuôn mặt, hash xác định duy nhất dữ liệu nhưng không thể dùng để tái tạo bản gốc.
Ví dụ đơn giản
Đây là hàm hash SHA-256 làm gì với hai đầu vào rất giống nhau:
| Đầu vào | Hash SHA-256 (16 ký tự đầu) |
|---|---|
| "Hello" | 185f8db32271fe25... |
| "hello" | 2cf24dba5fb0a30e... |
| "hello!" | ce06092fb948d9ff... |
Thay đổi một ký tự duy nhất (H hoa thành h thường) hoặc thêm dấu chấm than tạo hash hoàn toàn khác. Không có mẫu, không có mối quan hệ dự đoán được. Đây là hiệu ứng tuyết lở đang hoạt động.
Bạn có biết? Hash SHA-256 của đầu vào rỗng (không có gì cả) là e3b0c44298fc1c14.... Đây là hằng số nổi tiếng. Mọi triển khai SHA-256 trên thế giới đều tạo chính xác đầu ra này cho đầu vào rỗng.
Thuật toán hash phổ biến
MD5
- Đầu ra: 128 bit (32 ký tự thập lục phân)
- Trạng thái: Đã bị phá cho mục đích bảo mật. Collision có thể tạo trong vài giây.
- Vẫn dùng cho: Kiểm tra tính toàn vẹn tệp khi bảo mật không phải mối quan tâm.
SHA-1
- Đầu ra: 160 bit (40 ký tự thập lục phân)
- Trạng thái: Đã lỗi thời cho bảo mật. Collision đã được chứng minh.
- Vẫn dùng cho: Hệ thống cũ, mã commit Git.
SHA-256
- Đầu ra: 256 bit (64 ký tự thập lục phân)
- Trạng thái: Tiêu chuẩn hiện tại. Không có tấn công thực tế nào được biết.
- Dùng cho: Lưu trữ mật khẩu, chữ ký số, blockchain, xác minh tệp, chứng chỉ TLS.
SHA-512
- Đầu ra: 512 bit (128 ký tự thập lục phân)
- Trạng thái: Tiêu chuẩn hiện tại. Biên bảo mật lớn hơn SHA-256.
- Dùng cho: Ứng dụng bảo mật cao, một số sơ đồ hash mật khẩu.
Cảnh báo MD5 và SHA-1 không bao giờ nên dùng cho mục đích bảo mật (mật khẩu, chữ ký số, chứng chỉ). Chúng đã bị phá về mặt mật mã. Dùng SHA-256 hoặc SHA-512 cho bất cứ thứ gì liên quan đến bảo mật.
Nơi hash được sử dụng
Lưu trữ mật khẩu
Khi bạn tạo tài khoản, website không (hoặc không nên) lưu mật khẩu thực. Thay vào đó, nó lưu hash mật khẩu. Khi đăng nhập, hệ thống hash mật khẩu bạn nhập và so sánh với hash đã lưu. Nếu khớp, bạn được vào.
Xác minh tệp
Khi tải phần mềm, website thường cung cấp hash SHA-256 của tệp. Sau khi tải, bạn hash tệp và so sánh. Nếu hash khớp, tệp đúng như nhà phát hành dự định.
Blockchain và tiền mã hóa
Mỗi khối trong blockchain chứa hash của khối trước, tạo chuỗi không thể phá vỡ. Nếu ai đó thử thay đổi giao dịch quá khứ, hash của khối đó thay đổi, phá vỡ chuỗi và phát hiện ngay can thiệp.
Chữ ký số
Khi bạn ký số tài liệu, bạn không thực sự mã hóa toàn bộ tài liệu. Thay vào đó, tài liệu được hash và hash được mã hóa. Nhanh hơn nhiều và tạo chữ ký gọn.
Git Version Control
Mọi commit, tệp và tree trong Git được xác định bằng hash SHA-1. Đây là cách Git biết tệp có thay đổi không và theo dõi toàn bộ lịch sử dự án.
Tính không thể đảo ngược (và tại sao quan trọng)
Tính một chiều của hash vừa là thế mạnh lớn nhất vừa là nguồn nhầm lẫn thường xuyên.
Bạn không thể "giải mã" hash. Hash không phải mã hóa. Mã hóa là hai chiều: mã hóa bằng khóa, giải mã bằng khóa. Hash là một chiều: bạn có thể tính hash từ đầu vào, nhưng không thể tính đầu vào từ hash.
Cách duy nhất "đảo ngược" hash là đoán đầu vào gốc, hash phỏng đoán và kiểm tra khớp không. Cho đầu vào ngắn, đơn giản (như mật khẩu phổ biến), khả thi. Cho đầu vào dài, ngẫu nhiên, không thể về mặt tính toán.
Mẹo Tạo và xác minh hash cho bất kỳ văn bản hoặc tệp nào: Cách tạo và xác minh Hash. Thử SHA-256, MD5, SHA-512 và nhiều hơn — ngay lập tức, miễn phí, trong trình duyệt.
Khám phá hash thực hành:
Miễn phí, tức thì và không cần đăng ký.