암호화 식별자

데이터베이스 덤프를 수집하다 보면 $2y$10$...이나 5f4dcc3b5aa765d61d8327deb882cf99 같은 문자열을 발견하게 되는데, 크래킹이나 역변환을 시작하기 전에 그것이 무엇인지부터 파악해야 합니다. 이 식별자는 길이, 문자 집합, 구조, 접두사에 관한 휴리스틱을 적용하여 암호문 샘플 뒤에 있을 가능성이 가장 높은 알고리즘이나 인코딩 방식을 추정합니다.

암호문을 식별하는 방법

  1. 1

    샘플을 붙여넣으세요

    단일 해시값, 암호문 블롭, 토큰 또는 인코딩된 문자열.

  2. 2

    일치하는 형식 확인하기

    패턴이 샘플과 일치하는 모든 형식이 결과에 나열됩니다.

  3. 3

    교차 확인

    여러 형식이 일치하면 해시 크래커나 디코더로 어떤 것이 올바른지 확인하세요.

  4. 4

    불확실성 유의

    샘플 하나만으로는 식별이 거의 확실하지 않으며, 일치하는 항목이 없으면 도구에 그렇게 표시됩니다.

식별자가 사용하는 시그니처 패턴

길이 기반 (16진수로 인코딩된 해시의 경우):

길이(16진수 문자 수) 식별 결과
32 MD5
40 SHA-1
64 SHA-256
128 SHA-512

56자의 SHA-224나 96자의 SHA-384 같은 다른 길이는 해시로 인식되지 않습니다(56자 또는 96자의 16진 문자열은 대신 Base64로 분류됩니다).

접두사 기반 (인식되는 것은 bcrypt 접두사뿐입니다):

  • $2a$ $2b$ $2y$ bcrypt

그 밖의 crypt 형식 접두사($1$, $5$, $6$, $argon2i$, $argon2id$, $pbkdf2$)는 인식되지 않습니다.

인코딩 기반:

  • 모든 문자가 [A-Za-z0-9+/=]에 속하고 길이가 4의 배수인 경우: Base64일 가능성이 높습니다.
  • .로 구분된 세 개의 세그먼트로, 각 세그먼트가 [A-Za-z0-9_-] 문자로 구성된 경우: JWT.

PEM 래퍼, OpenSSH ssh-rsa/ssh-ed25519 블롭, -_가 포함된 Base64url 문자열은 감지되지 않습니다.

식별로 알 수 없는 것

  • 100% 확실한 정확한 알고리즘. 64자리 16진수 문자열은 SHA-256으로 표시되지만 SHA3-256이나 BLAKE2s일 수도 있으며, 이들은 암호문만으로는 구별할 수 없습니다. NTLM 해시(역시 32자 16진수)는 MD5와 똑같이 보입니다.
  • 키 강도. bcrypt 해시는 접두사에 코스트 팩터를 표시하지만($2y$10$ = 코스트 10), 실제 비밀번호 자체의 강도는 알려주지 않습니다.
  • 솔트 적용 여부. 최신 비밀번호 해시(bcrypt, Argon2)는 항상 솔트가 적용되지만, 구형 방식(원시 MD5/SHA)은 적용될 수도, 그렇지 않을 수도 있습니다.
  • 평문. 식별은 해시를 되돌리지 않습니다. 크래킹은 별도의 과정이며, 오직 자신의 데이터에 대해서만 합법적으로 수행할 수 있습니다.

식별자가 틀리는 경우

  • 사용자 지정 접두사가 붙은 토큰. 애플리케이션이 해시에 자체 접두사를 감싸 두는 경우가 있습니다. 먼저 그 래퍼를 제거하세요.
  • 이중 인코딩. 바이너리 해시를 16진수화한 뒤 다시 Base64로 감싼 값은 잘못 식별됩니다. 한 번 디코딩한 뒤 다시 실행해 보세요.
  • 비정상적인 길이. 잘린 해시(SHA-256의 앞 16자를 ID로 사용한 경우 등)는 문자와 길이 규칙이 겹치기 때문에 “Base64”로 표시됩니다.
  • 틀 안에 있거나 포장된 형식. PEM 블록, OpenSSH 키, Django의 pbkdf2_sha256$...는 인식되지 않습니다. 래퍼나 접두사를 제거하고 다시 시도하거나 전용 파서를 사용하세요.

사용 사례

  • 보안 감사: 암호화 방식 마이그레이션에 앞서 코드베이스 전반의 해시 유형을 목록화합니다.
  • CTF 챌린지: 알 수 없는 데이터에 대한 빠른 1차 점검.
  • 인시던트 대응: 유출된 자격 증명의 형식을 식별합니다.
  • 프레임워크 디버깅: 라이브러리가 어떤 인코딩을 생성하는지 파악합니다.

윤리적 유의 사항

해시 형식을 식별하는 것은 수동적인 조사에 불과합니다. 권한 없이 타인의 해시를 크래킹하는 행위는 대부분의 관할 지역에서 컴퓨터 오용 관련 법률을 위반합니다. 오직 자신이 소유하거나 분석 권한이 있는 해시만을 대상으로 하세요.

자주 묻는 질문

부분적으로는 가능합니다. MD5는 16진수 32자, SHA-1은 40자입니다. 다만 둘의 길이 범위가 같은 경우 해시만으로는 구별할 수 없습니다. 보통은 맥락(데이터베이스 열 이름, 프레임워크 기본값, 유출된 스키마 등)을 통해 판별할 수 있습니다.

아니요. 식별만 수행합니다. 해시를 역산하거나 암호문을 복호화하려면 별도의 도구(그리고 키 또는 크래킹에 필요한 계산 자원)가 필요하며, 이러한 작업은 오직 자신의 자료에 대해서만 합법적으로 수행할 수 있습니다.

Argon2id(또는 높은 코스트 팩터의 bcrypt)가 현재 권장되는 방법입니다. PBKDF2-SHA256과 scrypt도 여전히 허용됩니다. 반면 순수 MD5, SHA-1 또는 솔트 없는 SHA-256은 비밀번호 저장에 안전하지 않습니다.

아니요. 붙여넣은 값은 형식 확인을 위해 당사 서버로 전송되지만 데이터베이스에 저장되지 않으며 페이지 링크에도 추가되지 않습니다.

관련 도구

이 도구는 다른 언어로도 제공됩니다