암호 식별기
CTF 문제나 로그 파일, 오래된 문서에서 수상한 문자열을 발견했는데 Base64인지, hex인지, 이진수인지, 모스 부호인지 알 수 없을 때가 있습니다. 텍스트를 붙여 넣으면 식별기가 문자 집합과 구조를 검사해 가능성이 높은 인코딩/암호를 순위로 제시합니다. 전용 디코더를 쓰기 전에 거치는 좋은 첫 단계입니다.
암호 식별기 동작 방식
-
1
암호문 붙여넣기
길이는 자유. 매우 짧은 문자열(20자 미만)은 신호가 약하고, 길수록 더 강한 분류가 가능합니다.
-
2
문자 집합 분석
글자, 숫자, 기호의 분포로 후보를 좁힙니다(전부 hex, 전부 base64 알파벳, 전부 대문자 라틴 등).
-
3
시그니처 매칭
길이 규칙(짝수 hex, 4의 배수 base64 블록, 해시의 32/40/64자 hex), 구분자(JWT의 점, 모스의 점과 대시), 잘 알려진 접두사(eyJ, $2b$)를 알려진 시그니처와 대조합니다.
-
4
순위가 매겨진 후보
일치하는 모든 후보를 신뢰도 순으로 나열하고 백분율로 표시하므로 어떤 디코더를 먼저 시도할지 알 수 있습니다.
식별 휴리스틱
| 단서 | 가능성 높은 암호/인코딩 |
|---|---|
A-Z a-z 0-9 + / =만 있고 길이가 4의 배수 |
Base64 |
0-9 a-f만 있고 짝수 길이 |
Hex |
0-1만 있고 8자리 이상 |
이진수 |
| 점, 대시, 슬래시, 공백만 있음 | 모스 부호 |
| 대문자 라틴 문자만, 5자 이상 | 시저 또는 치환 암호 |
| 라틴 문자 20자 이상, 공백 없음 | 단일 치환 암호 |
| 대소문자 혼합 라틴 문자 | 평문, 암호가 아닐 가능성이 높음 |
점으로 구분된 3개 세그먼트, eyJ로 시작 |
JWT 토큰 |
$2a$, $2b$, $2y$로 시작 |
bcrypt 해시 |
| 정확히 32자 hex | MD5 해시 |
| 정확히 40자 hex | SHA-1 해시 |
| 정확히 64자 hex | SHA-256 해시 |
문자 외의 단서
- Base64: 4글자 블록, 끝에
=패딩,+와/포함. - 시저 또는 치환: 대문자 라틴 문자만, 숫자 없음. 빈도는 평문과 동일하고 단순히 이동된 것입니다.
- 모스: 점, 대시, 슬래시, 공백만 사용.
- JWT: 점으로 구분된 3개 세그먼트, 보통
eyJ로 시작합니다. - 해시(MD5/SHA): 고정 길이 hex(MD5 32자, SHA-1 40자, SHA-256 64자). 역연산이 불가하므로 식별기가 이를 표시해 “디코드”를 시도하지 않도록 합니다.
- 이진수: 0과 1의 긴 나열, 보통 8개씩 묶여 있습니다.
자동 식별의 한계
- 짧은 입력(10자 미만): 전반적으로 신뢰도가 낮으며 무엇이든 될 수 있습니다.
- 일회용 패드를 사용한 사용자 정의 XOR: 키 없이는 무작위와 구분할 수 없습니다. 식별기는 일치 항목이 없다고 표시합니다.
- 다중 계층: 흔한 CTF 트릭은 Base64 → 뒤집기 → 시저 → hex 같은 다중 계층입니다. 한 겹씩 벗겨내세요.
- 영어가 아닌 원어: 라틴 문자 검사는 계속 유효하지만, “평문”은 추측일 뿐입니다. 식별기는 언어 감지를 하지 않습니다.
신뢰도 점수
각 후보는 시그니처가 얼마나 구체적인지에 따라 고정 신뢰도를 가집니다. 80% 이상은 유력, 50~80%는 가능성 있음, 50% 미만은 가능성 낮음입니다. 여러 개가 일치하면 입력이 짧거나 혼합 암호일 가능성이 높습니다.
자주 묻는 질문
모든 암호 식별 기법은 통계적 규칙성에 의존하고, 통계는 충분한 데이터가 있어야 신뢰할 수 있습니다. 20자 미만에서는 많은 암호가 비슷해 보이며, 50자 이상부터 안정적인 신호가 나옵니다.
가장 가능성 높은 방식만 제안합니다. 디코딩은 전용 디코더 도구에서 이루어지며, 일부 디코딩은 직접 키를 제공해야 합니다.
먼저 문자 집합(어떤 글자/기호가 나오는지)을 확인하고, 길이와 구조를 살펴보세요. 그래도 불분명하면 흔히 의심되는 디코더(Base64, hex, 시저)를 차례로 시도해 보세요. CTF에서는 빈도 + 추측으로 보통 몇 번 안에 풀립니다.
이름이 있는 방식으로는 매칭되지 않을 가능성이 높습니다. 일치 항목이 없거나 낮은 신뢰도의 추측을 반환합니다. 위의 휴리스틱 표와 암호문의 알파벳·구조를 비교하면 간단한 자체 제작 방식을 역공학할 수 있습니다.
관련 도구
Base85 인코더 및 디코더
PostScript와 PDF 파일 안에서 쓰는 Adobe Ascii85 방식으로 Base85를 인코딩하고 디코딩하세요. 이진 데이터에서는 Base64보다 더 작습니다.
bcrypt 생성기
plaintext password에서 bcrypt hash를 생성합니다. cost factor 4부터 13까지 조정 가능하며 Laravel, Django, Node, PHP와 호환됩니다.
Base32 인코더 및 디코더
RFC 4648 알파벳으로 Base32 문자열을 인코딩하고 디코딩하세요. TOTP 시크릿, 대소문자를 구분하지 않는 토큰, 사람이 입력하는 식별자에 유용합니다.
카이사르 암호 인코더
카이사르 암호로 텍스트를 암호화하고 복호화하세요. 1-25 사이의 모든 이동값을 지원하고, 특수한 경우인 ROT13을 처리하며, 문장 부호와 대소문자를 그대로 유지합니다.
A1Z26 암호 인코더
A1Z26 암호(A=1, B=2, ... Z=26)로 텍스트를 인코딩하거나 숫자열을 다시 글자로 디코딩합니다. 구분자도 사용자 지정할 수 있습니다.
AES 암호화 / 복호화
OpenSSL의 AES cipher로 낮은 위험의 텍스트를 암호화하고 복호화합니다. passphrase는 SHA-256으로 해시되며 Base64 출력은 IV와 암호문을 담습니다.