Giải Mã Hash MD5: Khi Nào Lookup Hoạt Động, Khi Nào Không
"Giải mã" là từ sai, nhưng câu hỏi thực tế đằng sau nó là thật: dán chuỗi hex 32 ký tự vào một bảng tra cứu ngược và đầu vào gốc đôi khi xuất hiện, đôi khi không. Sự khác biệt phụ thuộc vào việc bảng tính toán trước có biết đầu vào đó hay không.
FreetoolOnline editorial team| Thuộc tính | Giá trị |
|---|---|
| Thuật toán | MD5 (RFC 1321, 1992) |
| Đầu ra | Digest 128 bit, render thành 32 ký tự hex |
| Hướng ngược | KHÔNG được spec định nghĩa; tra cứu dùng bảng đặt trước, không phải toán học |
| Công cụ triển khai | https://freetoolonline.com/developer-tools/md5-converter.html (một chiều: text -> hash) |
Ba trường hợp quyết định xem tra cứu có hoạt động không
Trường hợp 1 - đầu vào từ điển phổ biến (tra cứu thường hoạt động). Nếu bản gốc là một từ tiếng Anh ngắn, một mật khẩu phổ biến ("123456", "qwerty"), một kết hợp tên-họ-công-năm thường gặp, hoặc bất kỳ giá trị nào mà người xây rainbow table đã hash trước, tra cứu tìm ra ngay lập tức. Rainbow table công khai cho top 10 triệu mật khẩu bị rò rỉ bao quát đa số các kiểm tra credential dựa trên sử dụng lại. Hash MD5 5f4dcc3b5aa765d61d8327deb882cf99 ngược lại thành "password" vì ai đó, ở đâu đó, đã hash và lưu cả hai phía.
Trường hợp 2 - đầu vào ngẫu nhiên ngắn (tra cứu cuối cùng hoạt động qua vũ lực). Một đầu vào chữ thường 8 ký tự có khoảng 208 tỷ khả năng (26 mũ 8). Trên một GPU tiêu dùng tầm trung chạy hashcat, throughput MD5 khoảng 50 tỷ lần thử mỗi giây trên phần cứng lớp 2026, nghĩa là toàn bộ không gian 8 ký tự quét trong khoảng 4 giây. Đầu vào ngắn trông như ngẫu nhiên (license key, token ngắn, OTP 6 chữ số đã được dùng) đều thua trước cách tiếp cận này không cần đặt trước. Đầu vào càng ngắn, vũ lực càng gần với tức thời.
Trường hợp 3 - đầu vào ngẫu nhiên dài (tra cứu KHÔNG hoạt động trong thực tế). Một đầu vào ngẫu nhiên 16 ký tự lấy từ dãy ASCII in được 95 ký tự có khoảng 5 * 10^31 khả năng. Ở 50 tỷ lần thử mỗi giây, quét toàn bộ không gian mất lâu hơn tuổi của vũ trụ. Bản thân hash vẫn có thể đảo ngược về mặt toán học (collisions tồn tại theo nguyên lý chim bồ câu), nhưng không bảng đặt trước nào bao quát không gian này và không run vũ lực nào kết thúc trong thời gian con người. Đây là trường hợp mà cộng đồng mật mã nói đến khi nói MD5 một chiều "trong thực tế".
Điều này có nghĩa gì cho hash bạn đang có
Hash một mình không cho bạn biết bạn ở trường hợp nào - 32 ký tự hex trông giống hệt nhau bất kể độ dài hay entropy của đầu vào. Ba kiểm tra nhanh thu hẹp câu hỏi khả thi trong thực tế:
- Thử một dịch vụ rainbow table công khai trước. Nếu câu trả lời trở về trong dưới một giây, đầu vào là Trường hợp 1 (từ điển). Kết quả tra cứu cho bạn biết đầu vào - và cho bạn biết đầu vào yếu đến mức bất kỳ ai có hash đó và kết nối mạng cũng có thể tìm được.
- Ước lượng độ dài đầu vào. Nếu bạn biết nguồn tạo khóa ngẫu nhiên 8 ký tự hoặc ngắn hơn, Trường hợp 2 áp dụng và một run vũ lực sẽ kết thúc trong giây đến giờ trên một GPU duy nhất. Nếu nguồn tạo 16+ ký tự ngẫu nhiên từ bảng chữ cái rộng, Trường hợp 3 áp dụng và câu trả lời thực tế là "không thể".
- Kiểm tra miền nguồn. Mật khẩu người dùng (đặc biệt là cũ, đặc biệt không có salt) thường là Trường hợp 1 hoặc 2. API token, session cookie, và byte ngẫu nhiên sinh từ library thường là Trường hợp 3. Hash có salt (nơi đầu vào là "salt + bí mật") chuyển toàn bộ câu hỏi sang Trường hợp 3 bất kể độ dài bí mật vì salt mở rộng đầu vào hiệu dụng.
Một điểm đặc biệt riêng của công cụ chuyển đổi trên site này: bảng "Text to MD5" ở https://freetoolonline.com/developer-tools/md5-converter.html thêm mọi hash nó tạo ra vào cùng cache mà bảng "MD5 to Text" tra cứu. Dán một chuỗi thử nghiệm vào đó và một độc giả sau này dán đúng hash của bạn vào bảng tra cứu ngược sẽ lấy lại được đầu vào gốc của bạn - hãy coi cache của trang đó như Trường hợp 1 ở trên, và không bao giờ hash một bí mật thật ở đó chỉ để xem đầu ra trông thế nào.
Tại sao "giải mã" là từ vựng sai
Mã hóa là hai chiều theo thiết kế - cùng một thuật toán chạy tiến (mã hóa) và ngược (giải mã) với một khóa mà người dùng hợp lệ giữ. Hashing là một chiều theo thiết kế - thuật toán chỉ chạy tiến, và không có hàm nghịch trong spec. Cái mà dịch vụ tra cứu công khai gọi là "giải mã MD5" là tra cứu ngược đặt trước: họ hash hàng tỷ đầu vào phổ biến trước và lưu cả hai phía, nên bước "giải mã" chỉ là một query database chống lại chỉ mục đặt trước đó. Toán học đằng sau MD5 không làm gì trong tra cứu; database làm việc. Tại sao MD5 không thể giải mã đi qua chi tiết mật mã cho độc giả tò mò về toán; Công cụ online giải mã MD5 giải thích tại sao các trang tuyên bố "giải mã" bất kỳ hash nào đang đặt tên sai cho thao tác.
Tra cứu bộ nhớ đệm và tấn công va chạm (collision) - hai việc khác nhau đều liên quan đến MD5
Mọi thứ ở trên đều là tra cứu bộ nhớ đệm: bảng tra cứu ngược chỉ trả về kết quả khi đúng chuỗi đó đã được hash và lưu trước đó, nên nó trả lại đầu vào gốc của BẠN. Tấn công va chạm là một thao tác hoàn toàn khác - nó tìm ra hai đầu vào KHÁC NHAU nhưng lại tạo ra cùng một digest MD5, mà không khôi phục được đầu vào nào từ hash. Các nhà nghiên cứu đã chứng minh điều này trên MD5 trong thực tế từ năm 2008, bằng một cuộc tấn công thông qua một tổ chức chứng thực giả mạo; từ đó khả năng chống va chạm của MD5 được coi là đã bị phá vỡ cho mục đích an toàn. Đó là cơ sở thực tế cho cảnh báo "MD5 có các cuộc tấn công va chạm đã biết", khác với câu hỏi tra cứu bộ nhớ đệm hàng ngày mà trang này trả lời.
| Thao tác | Kết quả tạo ra | Công cụ của trang này có làm việc này không? |
|---|---|---|
| Tra cứu bộ nhớ đệm (trang này) | Đúng đầu vào gốc, chỉ khi đã được hash và lưu trước đó | Có - bảng tra cứu ngược trên https://freetoolonline.com/developer-tools/md5-converter.html |
| Tấn công va chạm | Hai đầu vào khác nhau chung một hash; không đầu vào nào được "khôi phục" | Không - công cụ này không triển khai |
| Vét cạn (Trường hợp 2/3 ở trên) | Đầu vào gốc, tìm được bằng cách thử các khả năng cho đến khi một hash khớp | Không - công cụ chỉ tìm trong bộ nhớ đệm của riêng nó, không tính hash mới để thử |
Điểm thực tế: tấn công va chạm là lý do MD5 không phù hợp cho chữ ký số và chứng chỉ, không phải lý do khiến tra cứu bộ nhớ đệm trên trang này trả về nhiều kết quả hơn. Bộ nhớ đệm chỉ lớn lên khi ai đó dán một chuỗi mới vào bảng "Text to MD5"; nó không lớn lên vì ai đó tìm ra một va chạm.
Bài đọc liên quan trên site này
Bài đọc liên quan trên site này tiếp tục cùng câu hỏi về hash một chiều từ bốn góc nhìn khác nhau:
- MD5 decode - cùng sự thật một chiều được khung từ góc từ vựng "decode".
- Đọc và so sánh hash MD5 đúng cách - hoa thường, khoảng trắng, và định dạng hex khi xác minh hash với giá trị kỳ vọng.
- Các lựa chọn thay thế MD5 (bcrypt, Argon2id, SHA-256): khi nào mỗi cái phù hợp - nếu mục tiêu là một kho mật khẩu, không cái nào trong ba trường hợp này áp dụng và một thuật toán khác trả lời câu hỏi thật.
- https://freetoolonline.com/developer-tools/md5-converter.html - công cụ chạy hướng tiến (text vào, hash ra) khi bạn cần xác minh hash ai đó đưa cho bạn.
- MD5 decrypter - cách các dịch vụ "giải mã" trực tuyến thực sự hoạt động, nhưng đầu vào nào có thể xử lý và khi nào việc tra cứu không trả lại kết quả hữu ích.