Mã định danh mã hóa
Bạn đã thu thập dữ liệu từ bản sao lưu cơ sở dữ liệu và phát hiện các chuỗi như $2y$10$... hoặc 5f4dcc3b5aa765d61d8327deb882cf99; trước khi bắt đầu giải mã hoặc ngược mã, bạn cần xác định rõ những thông tin này là gì. Mã nhận dạng này áp dụng các tiêu chí về độ dài, bộ ký tự, cấu trúc và tiền tố để suy luận thuật toán hoặc phương thức mã hóa có khả năng cao nhất đằng sau mẫu văn bản mã hóa.
Cách nhận diện văn bản mã hóa
-
1
Dán mẫu
Một giá trị hash đơn lẻ, khối văn bản mã hóa, token hoặc chuỗi đã được mã hóa.
-
2
Xem các định dạng khớp
Tất cả định dạng có đặc điểm khớp với mẫu của bạn sẽ được liệt kê trong kết quả.
-
3
So sánh chéo
Nếu có nhiều định dạng khớp, hãy dùng công cụ phá mã hash hoặc giải mã để xác nhận định dạng đúng.
-
4
Lưu ý sự không chắc chắn
Việc xác định chỉ dựa trên một mẫu hiếm khi chắc chắn; nếu không có gì khớp, công cụ sẽ thông báo điều đó.
Các mẫu chữ ký mà bộ định danh sử dụng
Dựa trên độ dài (đối với các giá trị hash được mã hóa theo chuẩn hex):
| Chiều dài (ký tự hex) | Được xác định là |
|---|---|
| 32 | MD5 |
| 40 | SHA-1 |
| 64 | SHA-256 |
| 128 | SHA-512 |
Các độ dài khác, chẳng hạn SHA-224 với 56 ký tự hex hoặc SHA-384 với 96, không được nhận dạng là hash (chuỗi hex 56 hoặc 96 ký tự sẽ được phân loại là Base64).
Dựa trên tiền tố (chỉ nhận dạng các tiền tố bcrypt):
$2a$$2b$$2y$bcrypt
Các tiền tố kiểu crypt khác ($1$, $5$, $6$, $argon2i$, $argon2id$, $pbkdf2$) không được nhận dạng.
Dựa trên mã hóa:
- Tất cả ký tự nằm trong
[A-Za-z0-9+/=]và độ dài là bội số của 4: rất có thể là Base64. - Ba đoạn được phân tách bằng
., mỗi đoạn gồm các ký tự[A-Za-z0-9_-]: JWT.
Khung PEM, khối OpenSSH ssh-rsa/ssh-ed25519 và chuỗi Base64url chứa - hoặc _ không được phát hiện.
Những gì việc nhận dạng không thể cho bạn biết
- Thuật toán chính xác với độ chắc chắn 100%. Một chuỗi 64 ký tự hex được báo là SHA-256, nhưng cũng có thể là SHA3-256 hoặc BLAKE2s; chỉ dựa vào văn bản mã hóa thì không thể phân biệt được. Hash NTLM (cũng 32 ký tự hex) trông giống hệt MD5.
- Độ mạnh của khóa. Giá trị hash bcrypt hiển thị hệ số chi phí trong tiền tố (
$2y$10$= chi phí 10), nhưng không cho biết độ mạnh thực sự của mật khẩu. - Có được thêm salt hay không. Các hàm băm mật khẩu hiện đại (bcrypt, Argon2) luôn dùng salt; còn các phương pháp cũ (MD5/SHA thô) có thể có hoặc không.
- Văn bản gốc. Việc nhận dạng không đảo ngược được giá trị hash; bẻ khóa là một quá trình riêng biệt và chỉ hợp pháp trên dữ liệu của chính bạn.
Khi bộ nhận dạng cho kết quả sai
- Token có tiền tố tùy chỉnh. Đôi khi các ứng dụng bọc giá trị hash bằng tiền tố riêng của mình; hãy loại bỏ phần bọc đó trước.
- Mã hóa hai lần. Giá trị hash nhị phân được biểu diễn dạng hex rồi bọc thêm Base64 sẽ bị nhận dạng nhầm. Hãy thử giải mã một lần rồi chạy lại.
- Độ dài bất thường. Các giá trị hash bị cắt ngắn (ví dụ 16 ký tự đầu của SHA-256 dùng làm ID) sẽ hiển thị là “Base64” vì quy tắc ký tự và độ dài trùng lặp nhau.
- Định dạng có khung hoặc bị bọc. Khối PEM, khóa OpenSSH và định dạng
pbkdf2_sha256$...của Django không được nhận dạng; hãy bỏ khung hoặc tiền tố rồi thử lại, hoặc dùng trình phân tích chuyên dụng.
Các trường hợp sử dụng
- Kiểm toán bảo mật: lập danh mục các loại hash trên toàn bộ mã nguồn trước khi chuyển đổi thuật toán mã hóa.
- Các thách thức CTF: lần kiểm tra đầu tiên nhanh chóng đối với một khối dữ liệu chưa biết.
- Phản ứng sự cố: xác định định dạng thông tin đăng nhập bị rò rỉ.
- Sửa lỗi framework: xác định cách mã hóa mà một thư viện tạo ra.
Ghi nhớ về đạo đức nghiên cứu
Việc xác định định dạng hash thuộc loại nghiên cứu thụ động. Việc phá khóa hash của người khác mà không được phép sẽ vi phạm các quy định về sử dụng máy tính trái phép tại hầu hết các khu vực pháp lý. Chỉ nên thực hiện phân tích đối với những hash do bạn sở hữu hoặc được ủy quyền phân tích.
Câu hỏi thường gặp
Một phần: MD5 gồm 32 ký tự hex, còn SHA-1 gồm 40 ký tự. Nếu cả hai cùng nằm trong một khoảng độ dài, bạn không thể phân biệt chỉ bằng giá trị hash. Thông thường, bối cảnh (tên cột trong cơ sở dữ liệu, thiết lập mặc định của framework hoặc lược đồ bị rò rỉ) sẽ giúp xác định.
Không. Phương pháp này chỉ có khả năng xác định thông tin. Việc đảo ngược giá trị hash hoặc giải mã văn bản mã hóa đòi hỏi các công cụ riêng biệt (cùng với khóa hoặc nguồn lực tính toán cần thiết để phá khóa), và chỉ được phép thực hiện trên dữ liệu do chính bạn sở hữu.
Argon2id (hoặc bcrypt với hệ số chi phí cao) là khuyến nghị hiện hành. PBKDF2-SHA256 và scrypt vẫn được chấp nhận. Còn MD5 thuần, SHA-1 hoặc SHA-256 không thêm salt thì không an toàn để lưu trữ mật khẩu.
Không. Giá trị bạn dán được gửi đến máy chủ của chúng tôi để kiểm tra định dạng, nhưng không được lưu trong bất kỳ cơ sở dữ liệu nào và không được thêm vào liên kết trang.
Công cụ liên quan
Bộ mã hóa và giải mã Base58
Mã hóa văn bản UTF-8 hoặc byte thập lục phân và giải mã Base58 an toàn bằng bảng chữ cái Bitcoin, Ripple hoặc Flickr.
Bộ mã hóa mật mã Caesar
Mã hóa và giải mã văn bản bằng mật mã Caesar. Hỗ trợ mọi độ dịch 1-25, có ROT13 như một trường hợp đặc biệt, giữ nguyên dấu câu và chữ hoa/thường.
Bộ mã hóa tệp Base64
Mã hóa mọi tệp (PDF, ZIP, ảnh, tệp thực thi) thành văn bản Base64 để nhúng vào JSON, email, YAML hoặc data URI. Chạy cục bộ, không tải lên.
Mã hóa / giải mã AES
Mã hóa và giải mã văn bản rủi ro thấp bằng các cipher AES của OpenSSL. Cụm mật khẩu được băm SHA-256 và đầu ra Base64 gồm IV cộng bản mã.
Trình tạo hash bcrypt
Tạo hash bcrypt hoặc verify mật khẩu plaintext với hash bcrypt hiện có. Chế độ tạo và verify đặt cạnh nhau trong một công cụ.
Trình tạo CSR
Tạo Yêu cầu ký chứng chỉ dạng PEM và private key RSA tương ứng. Chỉ định common name, các trường tổ chức và kích thước khóa (2048, 3072 hoặc 4096 bit).
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Identificador de Cifrado [ES]
- ตัวระบุการเข้ารหัส [TH]
- Versleutelingsidentifier [NL]
- 加密标识符 [ZH]
- 암호화 식별자 [KO]
- Identificateur de chiffrement [FR]
- Krypteringsidentifierare [SV]
- Identifikasi Enkripsi [ID]
- Identificador de Criptografia [PT]
- Verschlüsselungs-Identifikator [DE]
- Şifreleme Tanımlayıcısı [TR]
- Identyfikator szyfrowania [PL]
- Encryption Identifier [EN]
- 暗号化識別子 [JA]
- معرّف التشفير [AR]
- Identificatore di Crittografia [IT]
- Идентификатор шифрования [RU]