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. 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. 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. 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. 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

Công cụ này có phiên bản bằng các ngôn ngữ khác