ASN.1 데이터 구조 정의와 인코딩 규칙
ASN.1의 추상 구문과 인코딩 규칙, BER·DER·PER·XER·JER의 차이와 통신·보안 분야 활용을 정리한다.
2026-08-14 · 최초 발행 2025-06-15
표현 계층에서 데이터 구조와 전송 형식을 나누는 방식
ASN.1(Abstract Syntax Notation One)은 OSI 계층 모델의 표현 계층(Presentation Layer)에서 사용하는 데이터 구조 정의 언어다. 1984년 CCITT(현 ITU-T)에서 최초 표준화됐고, 현재는 ISO/IEC와 공동으로 유지 관리된다.
이 언어의 목적은 시스템이나 프로그래밍 언어가 달라도 동일한 데이터 구조를 명확하게 주고받도록 하는 데 있다. 네트워크 프로토콜, 보안 인증서, 통신 시스템에서 널리 쓰이며, 데이터 구조인 추상 구문과 실제 전송 방법인 전송 구문을 분리한다.
플랫폼이나 구현 언어에 종속되지 않고, 기존 정의를 확장해 새 데이터 타입을 추가할 수 있다. 엄격한 타입 정의를 요구하며, ITU-T X.680X.699 시리즈 및 ISO/IEC 88248825 시리즈로 표준화돼 있다.
타입으로 표현하는 데이터의 형태
ASN.1의 간단한 타입에는 BOOLEAN, INTEGER, REAL, NULL, ENUMERATED가 있다. BIT STRING은 비트 시퀀스, OCTET STRING은 8비트(바이트) 시퀀스를 표현하며, OBJECT IDENTIFIER는 객체 식별자(OID)를 다룬다. 시간 정보에는 UTCTime과 GeneralizedTime을 사용한다.
필드를 묶는 구조적 타입도 제공한다. SEQUENCE는 순서가 있는 필드 집합으로 C의 struct나 Java의 class와 유사하다. 같은 타입을 순서대로 나열할 때는 SEQUENCE OF, 순서를 두지 않는 집합에는 SET과 SET OF를 사용한다. 여러 타입 가운데 하나를 고르는 구조는 C의 union과 유사한 CHOICE로 나타낸다.
IMPLICIT와 EXPLICIT 태그는 데이터 요소를 식별하고 구분하기 위한 태그 지정 방식이다.
전송 환경에 맞춰 고르는 인코딩 규칙
ASN.1은 데이터 구조 정의 자체와 별개로 여러 인코딩 규칙을 지원한다.
BER(Basic Encoding Rules)은 최초의 ASN.1 인코딩 규칙이다. TLV(Type-Length-Value) 형식을 사용하고 다양한 길이 인코딩 옵션을 제공하지만, 인코딩 크기는 상대적으로 크다.
DER(Distinguished Encoding Rules)은 BER을 제한해 하나의 값에 정확히 하나의 인코딩만 허용한다. 정규화된 형식이므로 디지털 서명에 적합하며, X.509 인증서 같은 암호화 응용 프로그램에서 주로 사용된다.
PER(Packed Encoding Rules)은 공간 효율성을 목적으로 설계됐다. 대역폭이 제한된 무선 통신에서 자주 쓰이고, 기본적(aligned) 버전과 압축(unaligned) 버전이 있다.
XER(XML Encoding Rules)은 ASN.1 값을 XML 형식으로 표현해 사람이 읽기 쉬운 형태를 제공하며 웹 서비스 통합에 유용하다. JER(JSON Encoding Rules)은 ASN.1 값을 JSON 형식으로 인코딩해 최신 웹 애플리케이션과의 호환성을 제공한다.
데이터 정의가 코드로 드러나는 예
사용자 정보는 다음과 같이 이름, 식별자, 활성 상태, 이메일 목록, 역할을 하나의 구조로 정의할 수 있다.
UserInfo ::= SEQUENCE {
userName VisibleString,
userId INTEGER,
isActive BOOLEAN,
emailAddresses SEQUENCE OF VisibleString,
userRole ENUMERATED {
admin(0),
operator(1),
user(2)
}
}
X.509 인증서 구조는 인증서 본문, 서명 알고리즘, 서명 값을 분리해 표현한다.
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo
}
SNMP MIB에서는 관리 대상 객체의 타입, 접근 권한, 상태, 설명을 ASN.1 정의로 기술한다.
SNMPv2-MIB DEFINITIONS ::= BEGIN
sysDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A textual description of the entity."
::= { system 1 }
END
통신과 보안 인프라에서의 활용
네트워크 관리 정보 교환을 위한 SNMP, 디렉터리 서비스 접근을 위한 LDAP, 멀티미디어 통신 프로토콜인 H.323, 전화망 신호 프로토콜인 SS7(Signaling System No. 7)에서 ASN.1을 활용한다.
보안 영역에서는 공개키 인프라(PKI)의 디지털 인증서인 X.509, 암호화 메시지 구문인 CMS(Cryptographic Message Syntax), 공개키 암호화 표준인 PKCS(Public-Key Cryptography Standards)가 대표적이다.
무선 통신에서는 GSM, UMTS, LTE 프로토콜과 Bluetooth SDP(Service Discovery Protocol)에 사용된다. 이 밖에도 항공 교통 관리 시스템의 ASTERIX 프로토콜, 지능형 교통 시스템(ITS)의 차량 간 통신에 적용된다.
채택 전에 확인할 운영상 조건
ASN.1은 이기종 시스템 간 안정적인 데이터 교환을 지원하고 데이터 구조와 의미를 엄격하게 정의한다. 자동 코드 생성 도구가 다수 존재하며, 환경에 따라 인코딩 방식을 선택할 수 있다는 점도 장점이다.
반면 초기 학습과 적용은 복잡할 수 있다. 효율적으로 쓰려면 특수 도구가 필요하고, 바이너리 인코딩은 디버깅을 어렵게 만들 수 있다. JSON이나 XML과 비교하면 현대 웹 환경에 통합하는 과정도 복잡할 수 있다.
구현 단계에서는 사용하는 언어에 맞는 ASN.1 컴파일러를 선택하고, 지원 인코딩 규칙을 확인한다. 예로 asn1c, ASN1C, OSS Nokalva를 검토할 수 있다.
대역폭이 제한된 환경에서는 PER, 보안 중심 애플리케이션에서는 DER, 웹 통합에서는 XER 또는 JER을 고려한다. 후방 및 전방 호환성도 함께 설계해야 하며, OPTIONAL과 DEFAULT 값, 확장 마커(Extensibility Marker)를 활용할 수 있다. 인코딩·디코딩 성능과 메모리 사용량을 살피고 대용량 데이터 처리 전략을 마련하는 일도 필요하다.
ASN.1은 복잡한 데이터 구조를 정확히 정의하고 전송하기 위한 수단이다. 통신, 보안, 네트워킹 인프라에서 데이터 교환을 표준화하는 역할을 하며, 현대 웹 기술과 함께 사용할 때도 상호보완적으로 활용할 수 있다.