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은 데이터 형식 선언 표기법이므로 변수 조작 방법을 정의하지 않는다. 변수 조작은 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을 사용하는 주요 프로토콜의 예시이다.
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].
이 외에도 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진수이다).
ASN.1 컴파일러를 사용하여 ASN.1 표기법으로 작성된 코드로부터 등가적인 데이터 구조를 표현하는 적절한 코드(C 언어 소스 코드 등)를 생성할 수 있다. 이 코드와 런타임 라이브러리를 통해 부호화된 데이터 구조와 언어가 이해할 수 있는 표현 사이에서 양방향 변환이 가능하다. 또는 사람이 직접 인코딩/디코딩 루틴을 작성하는 경우도 있다.[1]
ASN.1을 지원하는 도구 목록은 [https://www.itu.int/en/ITU-T/asn1/Pages/Tools.aspx ITU-T 도구 웹 페이지]에서 확인할 수 있다.
ASN.1은 구글 프로토콜 버퍼 및 아파치 스리프트와 같이 상호 플랫폼 데이터 직렬화를 위한 인터페이스 설명 언어라는 점에서 목적과 용도가 유사하다. ASN.1은 1984년에 정의되어 이들보다 훨씬 앞서 있으며, 더 다양한 기본 데이터 유형, 확장성 옵션, 내장 제약 조건 지원 등을 제공한다.[1]
ASN.1은 값 및 크기에 대한 제약 조건을 내장 지원한다. 예를 들어, 0에서 100 사이의 정수 필드를 지정하거나, 값 시퀀스(배열)의 길이를 고정 길이 또는 허용된 길이 범위로 지정할 수 있다. 제약 조건은 기본 제약 조건 집합의 논리적 조합으로 지정할 수도 있다.[1]XML 스키마와 JSON 스키마도 유사한 제약 조건 개념을 지원하지만, 도구 지원은 다양하다.[1]
ASN.1은 확장된 바쿠스-나우르 표기법(ABNF)과 시각적으로 유사하지만, 실제로는 상당히 다르다. ASN.1은 다양한 방식으로 인코딩될 수 있는 데이터 구조를 정의하는 반면, ABNF는 데이터 구조와 인코딩을 함께 정의한다. ABNF는 텍스트 형식의 사람이 읽을 수 있는 프로토콜을 정의하는 데 더 자주 사용된다.[1]
JSON 및 XML은 스키마가 필수는 아니지만, 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 웹사이트에서 무료 다운로드])
ITU-T Rec. X.680 | ISO/IEC 8824-1
ITU-T Rec. X.681 | ISO/IEC 8824-2
ITU-T Rec. X.682 | ISO/IEC 8824-3
ITU-T Rec. X.683 | ISO/IEC 8824-4
; ASN.1 부호화 규칙 표준 ([https://www.itu.int/ITU-T/studygroups/com17/languages/ ITU-T 웹사이트에서 무료 다운로드])
ITU-T Rec. X.690 | ISO/IEC 8825-1 (BER, CER 및 DER)
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.