ASN.1, DER 및 PKCS 형식 디코딩 기술 가이드
보안 및 암호화 분야에서는 데이터가 JSON이나 XML처럼 사람이 읽을 수 있는 형식으로 저장되는 경우가 드뭅니다. 대신 수십 년 전에 확립된 표준에 따라 고밀도 바이너리 구조로 패킹됩니다. .der, .p12 또는 .csr 파일을 접하고 그 안에 무엇이 들어 있는지 궁금해한 적이 있다면 ASN.1 제품군을 만난 것입니다.
이 가이드에서는 이러한 바이너리 형식의 작동 방식과 디코딩 방법을 설명합니다.
1. ASN.1이란 무엇인가요?
**ASN.1 (Abstract Syntax Notation One)**은 플랫폼 간에 직렬화 및 역직렬화할 수 있는 데이터 구조를 정의하기 위한 표준 인터페이스 기술 언어입니다. 보안 데이터의 "소스 코드"와 같습니다.
DER 인코딩
ASN.1이 '구조'를 정의한다면, **DER (Distinguished Encoding Rules)**은 해당 구조가 바이너리로 변환되는 방식을 정의합니다. DER은 태그-길이-값(TLV) 인코딩으로, 모든 데이터 조각은 유형(태그)을 식별하는 바이트로 시작하고 그 뒤에 길이, 실제 데이터가 옵니다.
2. 일반적인 바이너리 형식 디코딩
CSR (인증서 서명 요청) 디코더
CSR에는 공개 키와 ID 정보가 포함되어 있습니다. 일반적으로 Base64(PEM 형식)로 인코딩되지만 내부적으로는 DER로 인코딩된 ASN.1 구조입니다.
- 디코딩 방법: OpenSSL(
openssl req -in request.csr -noout -text) 또는 온라인 CSR 디코더를 사용하여 제목(Subject), 조직 및 공개 키를 확인할 수 있습니다.
PKCS#7 (P7B) 디코더
PKCS#7은 인증서 체인을 배포하는 데 자주 사용됩니다. 일반적으로 인증서와 해당 인증서를 확인하는 데 필요한 모든 중간 인증서가 포함되어 있습니다.
- 디코딩 방법: 단순한 인증서와 달리 PKCS#7 파일에는 여러 객체가 포함될 수 있습니다. 이를 디코딩하면 내부의 인증서 "가방(bag)"이 드러납니다.
PKCS#12 (P12/PFX) 디코더
PKCS#12는 개인 키와 해당 인증서를 저장할 수 있는 비밀번호로 보호된 아카이브입니다.
- 디코딩 방법: 암호화되어 있으므로 비밀번호가 있어야 합니다. 디코딩하면 개인 키와 인증서를 별도의 PEM 파일로 추출할 수 있습니다.
3. ASN.1 및 DER: "트리" 보기
원시 DER 파일(예: X.509 인증서)을 디코딩하면 트리와 같은 구조가 나타납니다.
- SEQUENCE: 항목 목록입니다.
- OBJECT IDENTIFIER (OID): 특정 필드(예: "Common Name")를 나타내는 일련의 숫자(예:
2.5.4.3)입니다. - BIT STRING / OCTET STRING: 원시 바이너리 데이터로, 공개 키나 서명을 포함하는 경우가 많습니다.
4. PGP 및 GPG 키 보기
PGP (Pretty Good Privacy)는 고유한 패킷 기반 형식(RFC 4880)을 사용하지만 ID를 공개 키에 바인딩한다는 점에서는 X.509와 동일한 목표를 공유합니다.
- PGP 키 뷰어: PGP 키를 검사하면 사용자 ID, 생성 날짜, 서명 및 암호화에 사용되는 하위 키가 드러납니다.
디코더 도구 요약
| 형식 | 확장자 | 콘텐츠 유형 | 내부를 "보는" 방법 |
|---|---|---|---|
| X.509 | .der, .crt |
공개 인증서 | openssl x509 -inform der -text |
| CSR | .csr |
서명 요청 | openssl req -text -noout |
| PKCS#12 | .p12, .pfx |
인증서 + 개인 키 | openssl pkcs12 -info |
| PGP | .asc, .gpg |
PGP 키/메시지 | gpg --list-packets |
결론
바이너리 보안 형식을 디코딩하는 것은 퍼즐을 푸는 것과 같습니다. 현대 PKI의 거의 모든 것이 ASN.1과 DER의 기초 위에 구축되어 있다는 점을 이해하면 "무작위" 바이트가 의미를 갖기 시작합니다. OpenSSL과 같은 명령줄 도구를 사용하든 웹 기반 디코더를 사용하든, 인증서나 요청의 원시 구조를 검사할 수 있는 능력은 보안을 중시하는 개발자에게 필수적인 기술입니다.
파일 무결성을 확인하는 방법을 찾고 계신가요? 해시 생성기를 사용하여 보안 파일의 체크섬을 계산해 보세요.