맨위로가기

ASN.1

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

ASN.1은 데이터 형식 선언을 위한 표기법으로, 통신, 암호화, 생체 인식 등 다양한 분야의 프로토콜 정의에 사용된다. SDL, TTCN-3과 같은 언어에서 ASN.1 선언을 지원하며, X.500, LDAP, PKCS, SNMP 등 주요 프로토콜에서 활용된다. ASN.1은 여러 인코딩 규칙을 제공하며, BER, DER, PER, XER, OER, JER 등이 있다. 구글 프로토콜 버퍼, 아파치 스리프트와 유사한 데이터 직렬화 기능을 제공하며, 값 및 크기에 대한 제약 조건과 확장을 지원한다. ASN.1은 ITU-T Rec. X.680, X.690 등 국제 표준에 의해 정의된다.

더 읽어볼만한 페이지

  • ITU-T X 시리즈 권고 - X.25
    X.25는 CCITT가 1970년대 중반에 개발한 패킷 교환 데이터 통신 표준으로, 가상 회선 서비스 기반의 3계층 구조를 가지며 공중 데이터망의 기반이 되었으나 1990년대 초부터 프레임 릴레이와 TCP/IP로 대체되기 시작하여 현재는 일부 시스템 및 아마추어 무선 분야에서 사용된다.
  • ITU-T X 시리즈 권고 - X.400
    X.400은 국제 전기 통신 연합에서 개발한 전자 메시지 교환을 위한 OSI 표준 프로토콜로, 메시지 처리 시스템의 기술적 측면을 정의하며 구조적 주소 지정, 멀티미디어 콘텐츠, 보안 기능 등을 제공한다.
  • 데이터 모델링 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 데이터 모델링 언어 - 데이터 정의 언어
    데이터 정의 언어(DDL)는 SQL에서 테이블, 열, 데이터 형식 등을 정의하고 데이터베이스 스키마를 수정하는 데 사용되는 명령어 집합이며, `CREATE`, `DROP`, `ALTER`, `TRUNCATE` 등의 명령어를 포함하고 데이터 구조를 정의하는 다양한 형식 언어들을 포괄하는 의미로도 사용된다.
  • 데이터 직렬화 포맷 - XML
    XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다.
  • 데이터 직렬화 포맷 - S-표현식
    S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다.
ASN.1
ASN.1
개요
종류데이터 인터페이스 기술 언어
개발 시작1984년
최신 버전2021년 2월 (02/21)
관련 표준X.208
X.209
X.409
X.509
X.680
X.681
X.682
X.683
단체ITU-T
위원회Study Group 17
웹사이트ASN.1 웹사이트

2. 언어 지원

ASN.1은 데이터 형식 선언 표기법이므로 변수 조작 방법을 정의하지 않는다. 변수 조작은 SDL, TTCN-3 등 다른 언어로 정의된다. 이 두 언어는 모두 기본적으로 ASN.1 선언을 지원한다. ASN.1 모듈을 가져와 모듈에 선언된 모든 ASN.1 형식의 변수를 선언할 수 있다.[1]

3. 응용 분야

ASN.1은 통신, 암호화, 생체 인식 등 매우 다양한 분야의 프로토콜을 정의하는 데 사용된다.[1] 특히 대한민국GSM, GPRS/EDGE, UMTS, LTE, 5G 이동통신 표준에서 널리 사용된다.[1]

ASN.1이 활용되는 주요 프로토콜과 그 사용 분야는 '주요 프로토콜' 하위 섹션을 참조하라.

3. 1. 주요 프로토콜

ASN.1은 통신, 암호화, 생체 인식 등 다양한 분야에서 사용되는 프로토콜을 정의하는 데 사용된다. 다음은 ASN.1을 사용하는 주요 프로토콜의 예시이다.

ASN.1을 사용하는 주요 프로토콜
프로토콜사용 분야비고
인터레저 프로토콜옥텟 인코딩 규칙 사용
NTCIP 1103교통, 운송 및 인프라 관리옥텟 인코딩 규칙 사용
X.500 디렉터리 서비스LDAP, TLS (X.509) 인증서, 인증기본 인코딩 규칙, 고유 인코딩 규칙 사용
LDAP기본 인코딩 규칙 사용
PKCS 암호화 표준비대칭 키, 인증서 번들기본 인코딩 규칙 및 고유 인코딩 규칙 사용
X.400 메시지 처리이메일초기 이메일 표준
EMV결제 카드
T.120 멀티미디어 회의마이크로소프트 원격 데스크톱 프로토콜(RDP)기본 인코딩 규칙, 팩 인코딩 규칙 사용
SNMP네트워크 및 컴퓨터 관리 및 모니터링기본 인코딩 규칙 사용
CMIPSNMP의 경쟁 프로토콜
SS7공중 전화 교환망(PSTN)을 통한 전화 연결 관리
ITU H-시리즈 멀티미디어 프로토콜음성 over 인터넷 프로토콜(VOIP)
BioAPI 상호 운용 프로토콜 (BIP)
공통 생체 인식 교환 형식 프레임워크 (CBEFF)기본 인코딩 규칙 사용
생체 인식에 대한 인증 컨텍스트 (ACBio)
CSTA기본 인코딩 규칙 사용
DSRC차량 통신팩 인코딩 규칙 사용
IEEE 802.11p (IEEE WAVE)차량 통신
ETSI ITS차량 통신정렬되지 않은 팩 인코딩 규칙 사용
GSM2G 모바일 폰 통신
GPRS / EDGE2.5G 모바일 폰 통신
UMTS3G 모바일 폰 통신
LTE4G 모바일 폰 통신
5G5G 모바일 폰 통신
CAP앰버 경고와 같은 경고 정보 교환XML 인코딩 규칙 사용
CPDLC항공 통신
우주 링크 확장 서비스 (SLE)우주 시스템 통신
MMS제조
파일 전송, 액세스 및 관리 (FTAM)파일 전송초기 파일 전송 프로토콜
ROSE원격 프로시저 호출(RPC)
ACSE
빌딩 자동화 및 제어 네트워크 프로토콜 (BACnet)건물 자동화 및 제어 (화재 경보, 엘리베이터, HVAC 시스템 등)BACnet 인코딩 규칙 사용
Kerberos보안 인증기본 인코딩 규칙 사용
WiMAX 2광대역 네트워크
지능형 네트워크통신 및 컴퓨터 네트워킹
X2AP기본 정렬된 팩 인코딩 규칙 사용
합법적 감청 (LI) 핸드오버 인터페이스합법적 감청


4. 인코딩 규칙

인코딩된 요소 파악 가능 여부옥텟 정렬설명기본 인코딩 규칙(BER)[5]2.1.1/ASN.1/Basic-EncodingITU X.690옥텟예예최초로 지정된 인코딩 규칙으로, 요소를 태그-길이-값(TLV) 시퀀스로 인코딩한다.구별 인코딩 규칙(DER)[6]2.1.2.1/ASN.1/BERDerived/DistinguishedEncodingITU X.690옥텟예예디지털 서명에 주로 사용된다.정규 인코딩 규칙(CER)[7]2.1.2.0/ASN.1/BERDerived/CanonicalEncodingITU X.690옥텟예예CER은 큰 값(특히 문자열)을 데이터 유형에 따라 1000바이트 또는 1000자 단위로 분할한다.기본 압축 인코딩 규칙(PER) 정렬[8]2.1.3.0.0/ASN.1/PackedEncoding/Basic/AlignedITU X.691비트아니요예매우 압축된 인코딩을 생성한다.기본 압축 인코딩 규칙(PER) 비정렬[8]2.1.3.0.1/ASN.1/PackedEncoding/Basic/UnalignedITU X.691비트아니요아니요정렬된 PER의 변형이다.정규 압축 인코딩 규칙(CPER) 정렬[8]2.1.3.1.0/ASN.1/PackedEncoding/Canonical/AlignedITU X.691비트아니요예값을 인코딩하는 단일 방법을 지정하는 PER의 변형이다.정규 압축 인코딩 규칙(CPER) 비정렬[8]2.1.3.1.1/ASN.1/PackedEncoding/Canonical/UnalignedITU X.691비트아니요아니요정렬된 CPER의 변형이다.기본 XML 인코딩 규칙(XER)[9]2.1.5.0/ASN.1/XMLEncoding/BasicITU X.693문자예예ASN.1 데이터를 XML로 인코딩한다.정규 XML 인코딩 규칙(CXER)[9]2.1.5.1/ASN.1/XMLEncoding/CanonicalITU X.693문자예예확장 XML 인코딩 규칙(EXER)[9]2.1.5.2/ASN.1/XMLEncoding/ExtendedITU X.693문자예예옥텟 인코딩 규칙(OER)[10]2.1.6.0ITU X.696옥텟아니요예BER처럼 태그나 길이 결정자를 인코딩하지 않는다.정규 옥텟 인코딩 규칙(COER)[10]2.1.6.1ITU X.696옥텟아니요예JSON 인코딩 규칙(JER)[11]ITU X.697문자예예ASN.1 데이터를 JSON으로 인코딩한다.일반 문자열 인코딩 규칙(GSER)[12]1.2.36.79672281.0.0문자예GSER의 목적은 사용자에게 데이터를 표시하거나 사용자 데이터를 간단한 형식으로 입력하는 것이다.BACnet 인코딩 규칙ASHRAE 135옥텟예예BER과 같이 요소를 TLV 시퀀스로 인코딩한다.신호 특정 인코딩 규칙(SER)프랑스 텔레콤 R&D 내부 문서옥텟예예GSM 및 SS7과 같은 통신 프로토콜에서 주로 사용된다.경량 인코딩 규칙(LWER)INRIA의 내부 문서.메모리 워드예INRIA에서 생성된 "플랫 트리 경량 구문"(FTLWS)을 설명한다.최소 비트 인코딩 규칙(MBER)비트1980년대에 제안되었다.NEMA 압축 인코딩 규칙비트NEMA에서 생성한 불완전한 인코딩 규칙 사양이다.고속 코딩 규칙"고속 네트워크를 위한 코딩 규칙"INRIA의 FTLWS 작업의 부산물이다.



ASN.1 표기법과 특정 ASN.1 부호화 규칙을 사용하면, 머신 아키텍처나 구현 언어에 의존하지 않는 형식으로 네트워크 상의 애플리케이션 간 데이터 구조를 정의할 수 있다.

X.400 전자 메일, X.500 또는 LDAP 디렉터리 서비스, H.323 (VoIP), SNMP, BACnet과 같은 애플리케이션 계층 프로토콜은 ASN.1을 사용하여 프로토콜 데이터 유닛을 규정한다. UMTS에서도 사용되며, 그 외 다양한 분야에서 활용된다[https://www.itu.int/en/ITU-T/asn1/Pages/Application-fields-of-ASN-1.aspx].

통신 프로토콜 메시지 정의에는 주로 ASN.1 바이너리 부호화 규칙이 사용된다.

HTTP나 SMTP와 같은 다른 인터넷 애플리케이션 계층 프로토콜은 메시지 정의에 태그와 값을 사용하며, ABNF 표기법을 사용하기도 한다.

ASN.1의 XML Encoding Rules (XER)는 ASN.1 표기법으로 정의된 구조를 텍스트로 부호화하는 방법을 제공하여 이러한 간극을 메운다.

4. 1. 주요 인코딩 규칙

ASN.1은 데이터 구조를 표현하기 위한 다양한 인코딩 규칙을 제공한다. 주요 인코딩 규칙은 다음과 같다:[5][6][7][8][9][10][11][12]

ASN.1 주요 인코딩 규칙
인코딩 규칙설명
기본 인코딩 규칙 (BER)가장 유연하며, 요소를 태그-길이-값(TLV) 시퀀스로 인코딩한다.
구별 인코딩 규칙 (DER)BER의 제한된 하위 집합으로, 디지털 서명에 주로 사용된다.
정규 인코딩 규칙 (CER)BER의 제한된 하위 집합으로, DER과 유사하지만 큰 값 처리에 차이가 있다.
압축 인코딩 규칙 (PER)매우 압축된 인코딩을 생성하며, 정렬(Aligned) 및 비정렬(Unaligned) 버전이 있다.
정규 압축 인코딩 규칙 (CPER)PER의 변형으로, 단일 인코딩 방법을 지정한다.
XML 인코딩 규칙 (XER)ASN.1 데이터를 XML로 인코딩한다.
정규 XML 인코딩 규칙 (CXER)XER의 변형.
확장 XML 인코딩 규칙 (EXER)XER의 확장 버전.
옥텟 인코딩 규칙 (OER)BER처럼 태그나 길이 결정자를 인코딩하지 않아 압축된 인코딩을 생성한다.
정규 옥텟 인코딩 규칙 (COER)OER의 변형.
JSON 인코딩 규칙 (JER)ASN.1 데이터를 JSON으로 인코딩한다.
일반 문자열 인코딩 규칙 (GSER)사람이 읽을 수 있는 값을 생성하지만, 제한적인 사용 범위를 가진다.



이 외에도 BACnet 인코딩 규칙, SER, LWER, MBER, NEMA 압축 인코딩 규칙, 고속 코딩 규칙 등 다양한 인코딩 규칙이 존재한다.

4. 2. 인코딩 제어 표기법 (ECN)

인코딩 제어 표기법(ECN)을 통해 사용자는 자신만의 맞춤형 인코딩 규칙을 정의할 수 있다.

5. 예제

가상의 Foo 프로토콜 메시지(데이터 구조)를 정의하는 ASN.1 모듈의 예시는 다음과 같다.

```asn1

FooProtocol DEFINITIONS ::= BEGIN

FooQuestion ::= SEQUENCE {

trackingNumber INTEGER,

question VisibleString

}

FooAnswer ::= SEQUENCE {

questionNumber INTEGER,

answer BOOLEAN

}

END

```

이는 Foo 프로토콜 제작자가 공개하는 사양이 된다. ASN.1은 프로토콜의 절차(흐름)를 정의하지 않으며, 해당 부분은 문장으로 설명된다.

Foo 프로토콜을 준수하는 메시지를 다른 사람에게 전송한다고 가정할 때, 이 메시지(PDU)는 다음과 같다.

```asn1

myQuestion FooQuestion ::= {

trackingNumber 5,

question "Anybody there?"

}

```

ASN.1은 값과 크기의 제한 및 확장성을 지원한다. 위 사양은 다음과 같이 변경 가능하다.

```asn1

FooProtocol DEFINITIONS ::= BEGIN

FooQuestion ::= SEQUENCE {

trackingNumber INTEGER(0..199),

question IA5String

}

FooAnswer ::= SEQUENCE {

questionNumber INTEGER(10..20),

answer BOOLEAN

}

FooHistory ::= SEQUENCE {

questions SEQUENCE(SIZE(0..10)) OF FooQuestion,

answers SEQUENCE(SIZE(1..10)) OF FooAnswer,

anArray SEQUENCE(SIZE(100)) OF INTEGER(0..1000),

...

}

END

```

이 변경은 trackingNumber가 갖는 값을 0에서 199까지, questionNumbers가 갖는 값을 10에서 20까지로 제한한다. questions 배열의 크기는 0개에서 10개이며, answers 배열의 수는 1개에서 10개이다. anArray 필드는 0에서 1000까지의 범위의 정수가 항상 100개이다. 위의 '...'은 확장성 마커로, 미래 버전의 FooHistory 메시지 사양에 필드가 추가될 가능성이 있음을 나타낸다. 이 버전을 준수하는 시스템은 처리 대상이 이 버전의 필드뿐이라도 미래 버전의 트랜잭션을 수신 및 전송할 수 있어야 한다.

뛰어난 ASN.1 컴파일러는 트랜잭션이 이러한 제약 조건을 따르는지 자동으로 검사하는 소스 코드(C, C++, Java 등)를 생성한다. 제약 조건을 위반하는 트랜잭션은 애플리케이션에서 수락되지 않으며 전송되지도 않는다. 이 계층에서의 제약 관리는 애플리케이션을 제약 위반으로부터 보호하고 프로토콜 사양을 매우 단순하게 만든다. 이로 인해 위험과 비용이 감소한다.

이 메시지를 네트워크를 통해 전송하려면 이를 비트열로 부호화해야 한다. ASN.1에는 이를 위한 알고리즘이 다양하게 준비되어 있으며, "부호화 규칙(encoding rule)"이라고 한다. Foo 프로토콜 사양에서는 어떤 부호화 규칙을 채택할지 명확하게 결정해야 한다. 이를 통해 Foo 프로토콜 사용자 간에 공통된 인식을 가질 수 있다.

5. 1. DER 인코딩 예시

다음은 위에 표시된 데이터 구조 `myQuestion`을 DER 형식으로 인코딩한 예시이다(모든 숫자는 16진수이다).

: 30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

DER은 타입-길이-값 인코딩 형식을 사용하므로, 위의 시퀀스는 SEQUENCE, INTEGER 및 IA5String 타입을 참조하여 다음과 같이 해석할 수 있다.

상기 데이터 구조(제약 및 확장성이 없는 것)를 DER 형식으로 부호화하면 다음과 같다.

설명
30태그 SEQUENCE
13옥텟 길이
02태그 INTEGER
01옥텟 길이
05
16태그 VisibleString
0e옥텟 길이
41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f값 (ASCII의 "Anybody there?")



즉, DER에서의 부호화 패턴은 "타입-길이-값"의 조합의 나열이다. 따라서 부호화를 통해 얻을 수 있는 것은 다음과 같은 21 옥텟의 데이터 열이다.

5. 2. XER 인코딩 예시

xml



5

Anybody there?



```

`myQuestion` 메시지를 XML 인코딩 규칙(XER)로 부호화하면 위와 같이 표현된다. 이는 사람이 읽을 수 있는 형태이며, 108 옥텟으로 구성된다.

5. 3. PER (Unaligned) 인코딩 예시

`myQuestion` 메시지를 압축 인코딩 규칙 (Unaligned) 형식으로 인코딩하면 다음과 같이 16진수로 표현된다.[1]

: 01 05 0e 83 bb ce 2d f9 3c a0 e9 a3 2f 2c af c0

이 표현은 122비트로 구성되며, 16옥텟(128비트) 중 122비트만 실제 정보를 담고 있고 마지막 6비트는 0으로 채워져(패딩) 있다.[1]

6. 도구

ASN.1 지원 도구는 대부분 다음 기능을 수행한다.[1]



ASN.1 컴파일러를 사용하여 ASN.1 표기법으로 작성된 코드로부터 등가적인 데이터 구조를 표현하는 적절한 코드(C 언어 소스 코드 등)를 생성할 수 있다. 이 코드와 런타임 라이브러리를 통해 부호화된 데이터 구조와 언어가 이해할 수 있는 표현 사이에서 양방향 변환이 가능하다. 또는 사람이 직접 인코딩/디코딩 루틴을 작성하는 경우도 있다.[1]

ASN.1을 지원하는 도구 목록은 [https://www.itu.int/en/ITU-T/asn1/Pages/Tools.aspx ITU-T 도구 웹 페이지]에서 확인할 수 있다.

6. 1. 온라인 도구

7. 유사 스키마와의 비교

ASN.1은 구글 프로토콜 버퍼아파치 스리프트와 같이 상호 플랫폼 데이터 직렬화를 위한 인터페이스 설명 언어라는 점에서 목적과 용도가 유사하다. ASN.1은 1984년에 정의되어 이들보다 훨씬 앞서 있으며, 더 다양한 기본 데이터 유형, 확장성 옵션, 내장 제약 조건 지원 등을 제공한다.[1]

ASN.1은 값 및 크기에 대한 제약 조건을 내장 지원한다. 예를 들어, 0에서 100 사이의 정수 필드를 지정하거나, 값 시퀀스(배열)의 길이를 고정 길이 또는 허용된 길이 범위로 지정할 수 있다. 제약 조건은 기본 제약 조건 집합의 논리적 조합으로 지정할 수도 있다.[1] XML 스키마와 JSON 스키마도 유사한 제약 조건 개념을 지원하지만, 도구 지원은 다양하다.[1]

ASN.1은 확장된 바쿠스-나우르 표기법(ABNF)과 시각적으로 유사하지만, 실제로는 상당히 다르다. ASN.1은 다양한 방식으로 인코딩될 수 있는 데이터 구조를 정의하는 반면, ABNF는 데이터 구조와 인코딩을 함께 정의한다. ABNF는 텍스트 형식의 사람이 읽을 수 있는 프로토콜을 정의하는 데 더 자주 사용된다.[1]

JSONXML은 스키마가 필수는 아니지만, JSON 스키마 또는 XML 스키마와 함께 사용될 때 통신 프로토콜에 널리 사용되는 상호 플랫폼 표준이다.[1]

일부 ASN.1 도구는 ASN.1과 XML 스키마(XSD) 간 변환을 지원하며, 이는 ITU에서 표준화되어 있다.[1]

자세한 내용은 데이터 직렬화 형식 비교를 참조할 수 있다.[1]

8. 표준

ASN.1 표기법 및 부호화 규칙과 관련된 국제 표준은 다음과 같다.

; ASN.1 표기법 표준 ([https://www.itu.int/ITU-T/studygroups/com17/languages/ ITU-T 웹사이트에서 무료 다운로드])



; ASN.1 부호화 규칙 표준 ([https://www.itu.int/ITU-T/studygroups/com17/languages/ ITU-T 웹사이트에서 무료 다운로드])

이에 대응하는 일본 산업 규격은 다음과 같다.

참조

[1] 웹사이트 Introduction to ASN.1 https://www.itu.int:[...] 2021-04-09
[2] 웹사이트 ITU-T Recommendation database https://www.itu.int/[...] 2017-03-06
[3] 문서 ITU-T X.680 - Specification of basic notation https://www.itu.int/[...]
[4] FOLDOC ASN.1
[5] 문서 ITU-T X.690 - Basic Encoding Rules (BER) https://www.itu.int/[...]
[6] 문서 ITU-T X.690 - Distinguished Encoding Rules (DER) https://www.itu.int/[...]
[7] 문서 ITU-T X.690 - Canonical Encoding Rules (CER) https://www.itu.int/[...]
[8] 문서 ITU-T X.691 - Packed Encoding Rules (PER) https://www.itu.int/[...]
[9] 문서 ITU-T X.693 - XML Encoding Rules (XER) https://www.itu.int/[...]
[10] 문서 ITU-T X.696 - Octet Encoding Rules (OER) https://www.itu.int/[...]
[11] 문서 ITU-T X.697 - JavaScript Object Notation Encoding Rules (JER) https://www.itu.int/[...]
[12] IETF RFC Generic String Encoding Rules (GSER)



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com