ASN 1 PKI RFC 2459 3280 RFC 2251

  • Slides: 16
Download presentation

ASN. 1 표기를 사용하는 문서 (PKI) RFC 2459, 3280 : 인증서의 데이터 구성형식 RFC

ASN. 1 표기를 사용하는 문서 (PKI) RFC 2459, 3280 : 인증서의 데이터 구성형식 RFC 2251 -2256 : LDAP (Lightweight Directory Access Protocol) PKCS : Public Key Cryptography Standard 공개키 암호표준 CMP, CRMP : Certificate Management Protocol 인증서 발급프로토콜. . . 참고 : 관련 국제기관 ITU-T : International Telecommunications Union Telecommunications Standards Sector 국제전신전화 자문위원회. UN의 통신 전문 산하기관 ISO : International Standards Organization 국제표준기구 IETF : Internet Engineering Task Force 인터넷 표준안을 제정하기 위한 기술위원회이며, RFC의 실제 출판을 담당한다. IEEE(Institute of Electrical and Electronics Engineers. Inc) 1884년 전기 및 전자 분야의 기술자들을 훈련시키기위해 설립된 단체로 전기, 전자, 컴퓨터, 전산 분야 등 의 기술 분야에 대한 www. softforum. com 표준 제정, 세미나 및 회의 개최, 교육 등 다양한 활동을 하고 있다. 3

ASN 표기의 인코딩 방법 BER : Basic Encoding Rules – which allows options for

ASN 표기의 인코딩 방법 BER : Basic Encoding Rules – which allows options for the encoder. DER : Distinguished Encoding Rules - which resolves all options in a particular direction. CER : Canonical Encoding Rules – which resolves all options in the other direction. PER : Packed Encoding Rules. 미래지향적 인코딩. 데이터의 사이즈를 효율적으로. . . XER : XML Encoding Rules DER 형식을 많이 쓰는 이유 : BER 의 잘 다듬어진 인코딩이다 ( It is arguably the case that CER is technically superior, but there is no doubt that DER has become the de facto distinguished/canonical encoding for BER ) BER, DER, CER 의 차이는 사소하므로 대부분의 인코딩 툴은 세가지 모두 지원한다. www. softforum. com 4

ASN 의 DER 인코딩 예 ASN. 1 표기 : PKCS#1 v 2. 1 출저

ASN 의 DER 인코딩 예 ASN. 1 표기 : PKCS#1 v 2. 1 출저 DER 인코딩 (Hex) RSAPrivate. Key : : = SEQUENCE { version Version, modulus INTEGER, -- n public. Exponent INTEGER, -- e private. Exponent INTEGER, -- d prime 1 INTEGER, -- p prime 2 INTEGER, -- q exponent 1 INTEGER, -- d mod (p-1) exponent 12 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p other. Prime. Infos OPTIONAL 30 82 04 A 5 02 01 00 02 82 01 01 00 AA 7 A 30 E 2 59 68 D 4 3 A 1 E 13 79 6 D 05 D 7 8 C FF 92 88 76 62 D 7 72 50 DE A 5 10 54 F 4 27 66 77 0 F DB 38 5 A 4 B FC 09 3 D 20 6 B BD 72 68 62 92 0 F 61 B 0 48 FC 46 F 3 08 78 3 E 3 E 74 22 1 A 23 44 74 79 30 B 8 A 0 A 8 D 0 76 77 B 0 0 D A 8 82 61 85 A 0 59 EE E 6 CA 35 08. . . View. BER 툴로 조회한 모습 } 각 필드의 값 정하기 version = 0; modulus = AA 7 A 30 E 2 59 68. . . public. Exponent = 65537 = 01 00 01 private. Exponent = 8 D 63 E 8 B 5 62 B 8 6 A 04 85 BB. . . prime 1 = E 3 4 B 78 D 7 3 A B 2 FD F 7 94 FB 20. . . www. softforum. com 5

추상적 표기의 구체화 과정 From abstract specification to bits-on-the-line A top-level type definition, supported

추상적 표기의 구체화 과정 From abstract specification to bits-on-the-line A top-level type definition, supported by other type and value definitions. ASN. 1 specification All possible values of this top-level type Values Abstract values ASN. 1 Encoding Rules Bit patterens name : : = OCTET STRING age : : = INTEGER name = “pluto” age = 3 The Abstract Syntax Apply a specific ASN. 1 Encoding Rule specification Transfer Syntaxes My. Dog : : = SEQUENCE { name UTF 8 String, age INTEGER } 30 0 A 0 C 05 70 6 C 75 74 6 F 02 01 03 001100000110 000000 001100000110. . . www. softforum. com 6

BER : Tag T L V TLV 형태에서 가장 먼저 나오는 데이터 타입 대부분

BER : Tag T L V TLV 형태에서 가장 먼저 나오는 데이터 타입 대부분 1 바이트(Octet) 로 표기됨 Assignment of UNIVERSAL class tags (ASN. 1) Tag 구성 (1 octet) : Class + P/C + Number UNIVERSAL 0 Reserved for use by the encoding rules UNIVERSAL 1 Boolean type UNIVERSAL 2 Integer type UNIVERSAL 3 Bitstring type Class Bit 8 Bit 7 UNIVERSAL 4 Octetstring type Universal 0 0 UNIVERSAL 5 Null type Application 0 1 UNIVERSAL 6 Object identifier type Context-specific 1 0 UNIVERSAL 7 Object descriptor type Private 1 1 UNIVERSAL 8 External type and Instance-of type UNIVERSAL 9 Real type UNIVERSAL 10 Enumerated type UNIVERSAL 11 Embedded-pdv type UNIVERSAL 12 UTF 8 String type UNIVERSAL 13 -15 Reserved for future editions of this Recommendation | International Standard UNIVERSAL 16 Suquence and Sequence-of types UNIVERSAL 17 Set and Set-of types UNIVERSAL 18 -22 Character string types UNIVERSAL 23 -24 Time types UNIVERSAL 25 -30 More character string types UNIVERSAL 31 -. . . Reserved for addenda to this Recommendation | International Standard 8 7 Class 6 P/C 0 ~ 30 숫자 (31 은 escape marker) 5 4 3 2 1 Number 1 (constructed) : if the V part of the encoding is itself a series of TLV encodings. (SEQUENCE, SET. . . ) 0 (primitive) : otherwise www. softforum. com 8

BER : Tag 의 예 T L V 이것만은 알아두자 많이 쓰이는 Tag 목록

BER : Tag 의 예 T L V 이것만은 알아두자 많이 쓰이는 Tag 목록 SEQUENCE Class =Universal 0 0 P/C = Constructed 1 Number = UNIVERSAL 16 1 0 0 00110000 = 0 x 30 INTEGER Class =Universal 0 0 P/C = Primitive 0 Number = UNIVERSAL 02 0 0 0 1 0 00000010 = 0 x 02 www. softforum. com 이름 값 (0 x) 의미 BOOLEAN 01 Boolean 형의 데이 터 INTEGER 02 정수 데이터 BITSTRING 03 비트 스트링 OCTETSTRING 04 8비트 단위 스트링 NULL 05 값 없음 OBJECTIDENTIFIER 06 오브젝트 아이디 PRINTABLESTRING 13 문자 IA 5 STRING 16 문자 UTCTIME 17 시간 GENERALIZEDTIME 18 시간 UTF 8 STRING 0 C 문자 SEQUENCE 30 데이터 조합 SET 31 데이터 조합 CONTEXTSPECIFIC A 0 9

BER : Length 인코딩 예 T L V 이것만은 알아두자 V part 의 길이

BER : Length 인코딩 예 T L V 이것만은 알아두자 V part 의 길이 Length (Bit 표현) Length (Hexa 표현) 비고 1 00000001 0 x 01 The short form 127 01111111 0 x 7 F The short form 128 10000001 10000000 0 x 81 0 x 80 The long form 255 10000001 1111 0 x 81 0 xff The long form 256 10000002 00000001 0000 0 x 82 0 x 01 0 x 00 The long form 65537 10000003 00000001 00000001 0 x 83 0 x 01 0 x 00 0 x 01 The long form 참고 V part 의 길이가 127 보다 작은 경우에도 The long form 으로 나타낼 수 있다. 예를 들어 Vpart 의 길이가 1 일 때 The long form 으로 나타내면 0 x 81 0 x 01 또는 0 x 82 0 x 00 0 x 01. . . 이런식으로 나타낼 수 있으나 관례상 데이터의 길이는 가장 적은 바이트 수로 표시한다. 따라서 0 x 01 로 표현하는 게 적절하다. www. softforum. com 11

BER : Value 의 인코딩 T L V OCTET STRING (0 x 04) The

BER : Value 의 인코딩 T L V OCTET STRING (0 x 04) The value of octetstring OCTET STRING : : = “ 01234” is encoded as octetstromg T 04 L 05 V 30 31 32 33 34 35 octet (바이트) 단위로 표현될 수 있는 곳에 많이 쓰임 V 의 길이가 길면 fragment 단위로 나누어서 표현할 수 있다. CER 의 경우 fragment = 1000 바이트로 고정시켰다. V 가 문자열을 표시하는 PRINTABLE STRING , IA 5 STRING , UTF 8 STRING 등도 타입만 다르고 표기방법은 위와 같다 CHOISE (타입없음) value 1 CHOICE { flag BOOLEAN, value INTEGER } : : = flag : TRUE value 2 CHOICE { flag BOOLEAN, value INTEGER } : : = value: 72 we get the encodings BIT STRING (0 x 03) value 1 value 2 The values of bitstring BIT STRING : : = 11110000111101 -> bit 값 are encoded as bitstring T 01 02 L 01 01 V FF 48 CHOICE 는 T part 와 L part 없이 V 값으로 표현된다. CHOICE 의 경우 해당 집합 중에 하나만 선택된다. C 언어에서 union 구조체와 흡사함. T 03 L 03 V 02 FF 0 F 0 F 4 bit 값을 표현할 때 쓰임. V part 첫 번째 바이트는 사용하지 않은 비트를 표시 (대부분 00) 그 외에는 OCTET STRING 과 동일. unused bit www. softforum. com 13

BER : Value 의 인코딩 T L OBJECT IDENTIFIER (0 x 06) V 기타

BER : Value 의 인코딩 T L OBJECT IDENTIFIER (0 x 06) V 기타 (Tagging) The values of 그 외에 타입이 없는 ASN 표기들은 다음과 같다. oid OBJECT IDENTIFER : : = { 1 0 8571 2 } OPTIONAL 선택적 표기. OPTIONAL 로 표기된 데이터는 상황에 따라 표기될 수도 있 고 그렇지 않을수도 있다. would be (in hex) ANY (DEFINED) oid T 06 L 05 V 01 00 C 27 B 02 타입이나 값들이 임의로 설정될 수 있는 경우이다. 이 경우 타입 값들은 게체의 성격에 따라 별도로 정의되어 진다. IMPLICIT Tag 에 이 단어가 붙어 있으면 Tag 가 바뀌어니다. (CONTEXT SPECIFIC 형태로. . . ) However the actual encoding of this object identifier value is EXPLICIT oid T 06 L 04 V 28 C 27 B 02 Howcome? ASN 에서 정의된 OID 값을 인코딩 할 때는 V 값의 최적화를 위하여 다소 복잡한 방법을 쓰 며 여기서는 생략함 (OID Tree 개념이 필요함) oid 의 값은 개체별로 정해져 있으므로 실전에서 OID 를 인코딩 할 때는 이미 인코딩 되어 있는 값을 가져다 쓰면된다. OID 는 기본적으로 정수값(INTEGER) 의 연속이며 이를 가장 압축적으로 표현하기 위해 SEQUENCE OF INTEGER 인코딩 방법을 사용한다. Tag 에 이 단어가 붙으면 TLV 를 CONTEXT SPECIFIC 으로 다시 감싸게 된다. Tagging 의 예 : Content. Info : : = SEQUENCE { content. Type Content. Type, content [0] EXPLICIT ANY DEFINED BY content. Type OPTIONAL } Private. Key. Info : : = SEQUENCE { version Version, private. Key. Algorithm Private. Key. Algorithm. Identifier, private. Key Private. Key, attributes [0] IMPLICIT Attributes OPTIONAL } Version : : = INTEGER Private. Key. Algorithm. Identifier : : = Algorithm. Identifier Private. Key : : = OCTET STRING Attributes : : = SET OF Attribute www. softforum. com 15

예제 www. softforum. com 16

예제 www. softforum. com 16