본문 바로가기

삽질 삽질 스마트 워크 구축

[ASN.1] ASN.1 Reference Sites

ASN.1에 대한 내용을 구글에서 검색한 결과 개념에 대한 내용이 쉽게 잘 설명된 사이트가 있어서 전체의 내용을 인용한다.

출처는 하단에 기재함. - 마이크로소프트 지원센터 XGEN 파트에서 발췌함

ASN.1

ASN.1(Abstract Syntax Notation One)은 구현에 관계없이 표준을 정의하는 언어이며 표준 작성자가 사용하는 언어입니다. CalTech의 John Smith는 한 구성 요소가 다른 구성 요소와 의사 소통하는 데 필요한 절차를 표준화하는 권고안을 만들기 위해 ASN.1 표기법으로 권고안을 작성하여 ITU 같은 표준 기구에 권고안을 제출합니다. ASN.1은 표준을 설명하는 공용 언어를 제공하여 전문가와 위원회 회원 간의 의사 소통을 원활하게 합니다. ASN.1은 ITU-T 권고안 X.209 및 X.690에 정의되어 있습니다.


예를 들어, ASN.1은 다음을 정의합니다.

  • "형식" 정의
  • "모듈" 정의 및 표시 방법
  • INTEGER 정의
  • BOOLEAN 정의
  • "구조체 형식" 정의
  • 특정 키워드(예: BEGIN, END, IMPORT, EXPORT, EXTERNAL 등)의 의미
  • 적절히 인코딩할 수 있도록 형식을 "태그"하는 방법

ASN.1은 특정 표준, 인코딩 방법, 프로그래밍 언어 또는 하드웨어 플랫폼에 관계없이 적용되며, 단순히 표준을 정의하는 언어입니다. 즉, 표준이 ASN.1로 작성됩니다.

BER

BER("버르"로 발음)는 ASN.1의 기본 인코딩 규칙(Basic Encoding Rules)을 나타내는 일반적인 이름입니다. BER는 ITU-T 권고안 X.209 및 X.690에 정의되어 있습니다. BER는 통신 링크를 통해 전송할 수 있는 옥텟의 스트림으로 ASN.1 데이터를 인코딩하는 하나의 규칙 집합입니다. ASN.1 데이터를 인코딩하는 다른 방법으로는 DER(Distinguished Encoding Rules), CER(Canonical Encoding Rules) 및 PER(Packing Encoding Rules)가 있습니다. 각 인코딩 방법마다 해당 응용 프로그램이 있지만 BER는 가장 일반적으로 사용되고 가장 일반적으로 거론되는 인코딩 방법입니다.

BER는 다음을 정의합니다.

  • ASN.1 값을 인코딩하는 방법
  • 특정 방법을 사용할 때를 결정하는 규칙
  • 데이터에 있는 특정 옥텟의 형식

ASN.1과 BER의 비교

ASN.1은 프로그래밍 언어(예: C)와 비슷한 반면, BER는 해당 언어의 컴파일러와 비슷합니다. 컴파일러는 플랫폼마다 다르지만 대부분의 고수준 프로그래밍 언어는 플랫폼에 독립적입니다. C는 프로그램 작성 규칙과 언어를 정의합니다. 프로그램은 C가 아니며 C로 작성된 것입니다. 프로그램은 특정 플랫폼(예: Intel x86)에서 컴파일될 때까지는 유용하지 않습니다. ASN.1과 BER의 관계도 이와 비슷합니다. ASN.1은 표준을 작성하는 언어입니다. 표준은 ASN.1이 아니며 ASN.1로 작성된 것입니다. 표준으로 컴파일되는 프로그램에서 생성된 데이터는 넓은 의미에서 "ASN.1 데이터"라고 할 수 있습니다. ASN.1 데이터는 대상에서 쉽게 해독할 수 있는 옥텟의 스트림으로 인코딩될 때까지 유용하지 않습니다. 즉, LAN을 통해 전송할 수 없습니다. 다음은 이러한 개념을 설명하기 위해 ITU-T 권고안 X.209, 부록 I에서 가져온 예제입니다. 이 예제는 직원 데이터 레코드에 대한 비공식적 설명입니다.

   Name:             John P Smith
   Date of Birth:    17 July 1959
   (other data)
					

직원 레코드에 대한 ASN.1 설명(표준)은 다음과 같을 수 있습니다.

   PersonnelRecord ::= [APPLICATION 0] IMPLICIT SET {
       Name,
       title [0]       VisibleString,
       dateOfBirth [1]          Date,
       (other types defined)          }

   Name ::= [APPLICATION 1] IMPLICIT SEQUENCE {
       givenName       VisibleString,
       initial         VisibleString, 
       familyName      VisibleString  }
					

이 ASN.1 설명은 PersonnelRecord가 표시되는 방법을 설명합니다. 그러나 더 중요한 것은 인코딩이 이루어지기 전에 ASN.1 데이터가 되도록 응용 프로그램 데이터의 형식을 지정하는 방법을 설명합니다.

다음에 응용 프로그램은 직원 데이터를 직원 레코드 구조(ASN.1 데이터 형식)에 매핑한 다음 ASN.1 데이터에 BER(Basic Encoding Rules)를 적용합니다. 이름이 ASCII로 변환된다는 것을 제외하고 다음과 같이 표시될 수 있습니다.

  Personnel
  Record     Length   Contents
  60         8185
                      Name     Length  Contents
                      61       10
                                       VisibleString  Length  Contents
                                       1A             04      "John"
                                       VisibleString  Length  Contents
                                       1A             01      "P"
                                       VisibleString  Length  Contents
                                       1A             05      "Smith"

                       DateofBirth     Length  Contents
                       A0              0A
                                               Date    Length  Contents
                                               43      08      "19590717"
					

모든 것이 표현되고 완료되면 실제로 전송되는 것, 또는 보다 엄밀하게 표현하여 다음 하위 계층에서 패킷의 데이터 부분이 되는 것은 아래와 같습니다.

60 81 85 61 10 1A 04 ....
....  0A 43 08 19 59 07 17

 

Microsoft - XGEN: ASN.1 및 BER에 대한 간단한 소개- http://support.microsoft.com/kb/252648/ko

Microsoft - DER Encoding of ASN.1 Types - http://msdn.microsoft.com/en-us/library/windows/desktop/bb648640(v=vs.85).aspx

ASN.1 오타와대학교 강의 자료 - http://www.site.uottawa.ca/~shervin/courses/ceg4395/lectures/Lecture06.pdf

 

 

10.ppt

 

ASN.docx

 

asn1-ber.ppt

 

asn1.pdf

 

c04_JSE_NetCentric_Summary.pdf

 

ch5.pdf

 

KSy_ASN1.pdf

 

larmouth-asn1-book.pdf

 

Lecture06.pdf

 

x208.pdf

 

통신 규격 ASN.1 프로그램 제작 안내서_Ver1.0.pdf

 

ASN.1에 대한 강의 자료와 참고자료를 업로드 해두었다.