티스토리 뷰

이 글을 읽고 있는 독자중에 ASN.1 이라는 것에 대해서 알고 있는 분이 얼마나 될까를 생각해봅니다.

물론 잘 알고 계시는 분도 있겠지만.. 잘 모르는 분들에게 도움이 될까 연재를 해보려구요..

얼마나 오래 할지.. 저도 잘 모르겠지만.. 제 글을 보면서 많은 도움이 되었으면 좋겠네요..


시작에 앞서 본 연재는 기본사항을 배제하고 연재를 해볼까 합니다.

기본적인 사항은 인터넷 어디를 찾아봐도 볼수가 있기 때문에.. 제가 또 그것에 대해

장왕하게 설명하는 것은 시간 낭비이기도 하니까.. 제외하겠습니다.


기본적인 사항을 보시고 싶으시면 아래의 하얀하늘 님의 블로그를 보시는 것도 도움이 될 듯 합니다.

http://blog.naver.com/gldmsl?Redirect=Log&logNo=20102620


또한 ASN.1 과 관련되어 도움이 될만한 사이트는 아래와 같습니다.


http://www.itu.int/ITU-T/asn1/ [ITU-T의 ASN.1 프로젝트를 진행하는 곳]

http://asn1.elibel.tm.fr/en/standards/index.htm#x680 [ASN.1 에 관한 표준문서를 받을수 있는 곳]

http://asn1.elibel.tm.fr/introduction/index.htm [ASN.1 에 관한 기본적인 설명이 되어 있는 곳]

http://lionet.info/asn1c/ [OpenSource 형태로 ASN.1 Compiler 개발이 진행되는 곳]


그리고 ASN.1 과 관련된 e-book을 꽁자로 구할수 있는 곳은 다음과 같습니다.

http://www.oss.com/asn1/dubuisson.html  [ ASN.1 Reference Book]

http://www.oss.com/asn1/larmouth.html  [ASN.1 Complete]


마지막으로 ASN.1 과 관련되어 도움이 될만한 유틸이 있는 곳은 다음과 같습니다.

http://www.oss.com/products/syntax1.html  [ASN.1 Syntax Checker 프로그램]

http://homepage.mac.com/aramperez/berviewer.html [BER 인코딩 파일 뷰어 프로그램]

http://www.codeproject.com/csharp/Asn1Editor.asp [DER 인코딩 파일 뷰어 프로그램]

http://www.obj-sys.com/products_asn1ve.php [ASN.1 Viewer/Editor 프로그램]


이상입니다.

이 정도의 정보면 ASN.1 의 정보를 상당히 많이 얻을수 있을 것으로 판단됩니다.


자... 이제 시작해 봅시다.


=================================================================================


ASN.1 는?


ASN.1 은 Abstract Syntax Notation number One 의 약자이며 ITU-T를 통해서 표준화가 되었고, 네트워크 분야, 정보보호 분야, 모바일 분야 및 기타 다양한 분야에서 사용되고 있습니다.


ASN.1 의 필요성은 ?


우리는 인터넷을 통해서 다양한 시스템을 접속할 수 있게되었습니다. 그 시스템들은 MS Windows  계열에서 부터, Sun Solaris, IBM AIX, HP-UX, Mac OS X, Linux, FreeBSD 등등 수없이 많은 운영체제하에 운영되고 있습니다.

이러한 이기종 시스템들이 혼재한 환경에서는 상호간에 까다로운 구조의 데이터를 전송하면서 대화하기에 상당한 문제점을 가집니다.(물론 우리가 많이 사용하는 웹 브라우저를 이용한 HTTP통신, Telnet 통신, FTP 통신과 같은 통신 프로토콜은 제외하구요..)

즉, 이기종 시스템간에는 데이터를 메모리에 저장하는 특성이 틀려 복잡한 데이터를 주고 받을때 상대방 시스템에 잘못된 데이터를 받을 가능성이 높습니다.

이러한 문제점을 해결하기 위해서 공통화된 데이터 표현 문법을 만들게 되었고 이를 통해서 ASN.1 이 생겨나게 되었습니다.


ASN.1 은 무엇인가?


ASN.1은 앞에 설명한대로 데이터 구성을 표현하는 문법(언어)입니다. 이러한 문법에 대한 표준이 ITU-T X.68x 계열의 문서에 표현이 되어 있으며, 다음과 같은 문법으로 표현이 됩니다.


Order ::= SEQUENCE {
  header  Order-header,
  items   SEQUENCE OF Order-line}


Order-header ::= SEQUENCE {
  number   Order-number,
  date     Date,
  client   Client,
  payment  Payment-method }

위의 첫번째 에서 Order라는 것은 다음의 내용을 포함하고, 또 Order-header는 그 다음의 내용을 포함한다고 설명하는 것입니다.

(문법만 봐서는 뭔지 모르겠죠? 그냥 넘어갑시다.. 나중에 설명하죠..)


ASN.1 을 사용하는 사례는?


우리가 쉽게 접할수 있는 것은 바로 인터넷 뱅킹입니다.

인터넷 뱅킹을 사용하면서 보면 인증서라는 것을 사용하죠?

바로 인증서가 ASN.1 을 사용하는 대표적인 사례입니다.

인터넷 뱅킹에 사용되는 인증서가 ASN.1에 의해서 표현된 문법구조를 따라서 데이터가 구성되고 이것이 Encoding 되어 인증서라는 파일로 존재하게 되는 것입니다.


[참고] 인증서 표준

    - RFC2549 - http://www.ietf.org/rfc/rfc2459.txt?number=2459 ,

    - RFC3280 - http://www.ietf.org/rfc/rfc3280.txt?number=3280 


위의 참고 문서를 보면 아시겠지만..(내용은 읽어볼거 없습니다. ^^ 머리 아플테니까요..)

아래로 아래로 이동해 보면 아래와 같은 형태를 보실수 있을 껍니다.


   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,
        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version shall be v2 or v3
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version shall be v2 or v3
        extensions      [3]  EXPLICIT Extensions OPTIONAL
                             -- If present, version shall be v3
        }

이것이 인증서의 기본적인 포맷이랍니다.

그럼.. 우리의 인증서를 살펴 봅시다.. (기본적으로 인증서는 C:\Program Files\NPKI\ 하위에 인증기관 밑에 Users 디렉토리에 자신의 인증서가 있습니다.)


사용자 삽입 이미지


위의 그림은 인증서를 BerViewer를 통해서 본 내용입니다.

위의 내용을 보면 빨간색으로 쓴 곳들의 일부가 위의 ASN.1 내용과 동일한 것을 볼수 있습니다.


사용자 삽입 이미지

 
위의 그림은 인증서 파일을 윈도우에서 제공하는 인증서 보기 프로그램으로 본 내용입니다.
보면 알겠지만 데이터 및 표현이 거의 동일한 것을 볼수 있죠?
 
이런식으로 데이터 형태를 ASN.1 구문에 맞추어 표현하고 구성하고 있습니다.
 
ASN.1 을 배워야 하는 이유는?
 
ASN.1 을 배워야 하는 이유는 정보보호 분야에서 ASN.1 이 많이 쓰이고 있기 때문이죠..
물론 정보보호 이외의 분야에서도 쓰이기 때문에 배워두면 좋구요..
또한 네트워크 프로그래밍을 한다면 ASN.1을 이용하여 패킷 구조를 정의하고 이에 따라서
데이터를 전송하면 되겠죠...
 
ASN.1 을 하려면 뭐가 필요한가요?
 
앞에서 소개된 링크 부분을 보면 OpenSource 형태의 ASN.1 Compiler를 볼수 있습니다.
이것을 통해서 ASN.1 구문으로 만들어진 구문을 컴파일 해서 결과물로 C 소스 파일과
헤더파일이 생성되게 됩니다.
이것을 프로그램에 적용하면 쉽게 프로그램적으로 ASN.1 을 적용할 수 있게 됩니다.
 
ASN.1 Compiler는 뭔가요?
 
ASN.1 은 앞에서 소개한대로 데이터 형태를 정의하기 위한 문법입니다.
이것은 실제 프로그램에 적용하기에는 무리가 따르죠..
결국엔 사용자가 ASN.1을 이용하여 데이터 구성을 정의하는 ASN.1 파일을 생성하면 이것을
프로그램에서 적용할 수 있도록 파싱하여 원하는 프로그램 소스 형태로 생산하는 역할을 합니다.
즉, ASN.1 컴파일러 특성에 따라서 ASN.1 파일을 C, C++, Java, C# 형태의 소스로 출력하고
우리는 프로젝트에 해당 소스를 첨가하여 프로그래밍 하기만 하면 됩니다.
 
 
오늘은 여기까지만 하죠...
 
 
다음 연재를 보시려면 http://blog.naver.com/shieldguy/80024004807 로 이동하세요.
 
 
본 내용은 뽀리(shieldguy@naver.com)가 직접 작성한 내용입니다.
다른곳으로 퍼가시는건 좋지만.. 작성자의 정보와 출처를 남겨주는 센스.. 우리에게 필요한 예절입니다.
문서의 내용에 이의가 있으시면 메일이나 게시판에 이의제기를 해주세요..
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함