참고자료
인증서 Spec.
- RFC 5280 - Internet X.509 PKI Certificate and CRL Profile
- url: https://tools.ietf.org/html/rfc5280
- TTAS.KO-12.0012/R1
Tool.
- ASN.1 JavaScript Decoder Online
인증서 구조
인증서는 Certificate 구조체 형식으로 저장되며 다음과 같이 3개의 Field로 구성되어 있다.
변수명 | 구조 및 설명 |
tbsCertificate | # 인증서 본문 version serialNumber signature issuer validity subject subjectPublicKeyInfo extensions |
signatureAlgorithm | # CA 전자서명 알고리즘의 OID OID: 1.2.840.113549.1.1.11 sha256WithRSAEncryption |
signatureValue | # CA 전자서명 값 BIT STRING(2048): 000111101100101011000011000... |
위의 "tbsCertificate" 구조체는 다음과 같이 구성되어 있다.
tbsCertificate | |
- version | [0] INTEGER 2 # 인증서 버전; enum [0/*Ver1*/, 1/*Ver2*/, 2/*Ver3*/] |
- serialNumber | INTEGER 630453119 # CA가 부여한 인증서 고유 번호. (up to 20 octets.) |
- signature | SEQUENCE (2 elem) OID 1.2.840.113549.1.1.11 sha256WithRSAEncryption (PKCS #1) NULL # CA서명 알고리즘 명세. 반드시 Certificate.signatureAlgorithm과 동일해야함. |
- issuer | SEQUENCE (4 elem) SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.6 countryName (X.520 DN component) PrintableString kr SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.10 organizationName (X.520 DN component) UTF8String yessign SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.11 organizationUnitName (X.520 DN component) UTF8String AccreditedCA SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.11 organizationUnitName UTF8String yessignCA Class 2 # Issuer 정보. Name Type(계층 구조로 정보들을 표기함) |
- validity | SEQUENCE (2 elem) UTCTIME 2019-08-22 15:00:00 UTC UTCTIME 2020-08-23 14:59:59 UTC # 인증서 유효기간 |
- subject | SEQUENCE (5 elem) SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.6 countryName (X.520 DN component) PrintableString kr SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.10 organizationName (X.520 DN component) UTF8String yessign SET (1elem) SEQUENCE (2 elem) OID 2.5.4.11 organizationUnitName (X.520 DN component) UTF8String personal4IB SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.11 organizationUnitName (X.520 DN component) UTF8String IBK SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.3 commonName (X.520 DN component) UTF8String 암호기술() 0003042201708021317028 # 인증서 주체(나)의 정보, Name Type |
- subjectPublicKeyInfo | SEQUENCE (2 elem) SEQUENCE (2 elem) OID 1.2.840.113549.1.1.1 rasEncryption (PKCS #1) NULL # parameter optional BIT STRING (1 elem) SEQUENCE (2 elem) INTEGER (2048 bit) 217980554665627473914143376567264798378222509425590233... INTEGER 65537 # 인증서 주체의 공개키 정보 |
- extensions | SEQUENCE Of Extentions.. |
Certificate의 "tbsCertificate"의 extensions는 다음과 같이 구성되어 있다.
Extention | |
- AuthorityKeyIdentifier | SEQUENCE (2 elem) OID 2.5.29.35 authorityKeyIdentifier (X.509 extension) OCTET STRING (1 elem) SEQUENCE (3 elem) [0] (20 byte) EFDC44D2C68DC00EA338C07C93C6C341BF4A8FF0 [1] # GeneralNames [4] SEQUENCE (4 elem) SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.6 countryName (X.520 DN component) PrintableString KR SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.10 organizationName (X.520 DN component) PrintableString KISA SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.11 organizationUnitName (X.520 DN component) PrintableString Korea Certification Authority Central SET (1 elem) SEQUENCE (2 elem) OID 2.5.4.3 commonName (X.520 DN component) UTF8String KISA RootCA 4 [2] (2 byte) 101C # CA의 인증서를 확인하는 방법을 제공함.(RootCA 명세) # CA 키가 여러개일때 사용함. CA의 KeyID 또는 Name/Serial#로 확인함 |
- SubjectKeyIdentifier | SEQUENCE (2 elem) OID 2.5.29.14 subjectKeyIdentifier (X.509 extension) OCTET STRING (1 elem) OCTET STRING (20 byte) EBD654E797DCE66D9FC9B8260D3FB56C735C1055 # 인증서 주체의 공개키 ID, 공인인증서의 경우 공개키의 Hash 값 |
- KeyUsage | SEQUENCE (3 elem) OID 2.5.29.15 BOOLEAN true OCTET STRING (1 elem) BIT STRING (2 bit) 11 # 11 --> 0000 0011: 8개의 Flag로 해석한다. # 0번쨰, 1번째 Flag가 서 있으므로 키 용도는 digitalSignature(0), nonRepudiation(1)을 의미한다. |
- cetificatePolicies | SEQUENCE (3 elem) OID 2.5.29.32 cetificatePolicies (X.509 extension) BOOLEAN true OCTET STRING (1 elem) SEQUENCE (1 elem) SEQUENCE (2 elem) OID 1.2.410.200005.1.1.4 certificatePolicies (X.509 extension) SEQUENCE (2 elem) SEQUENCE (2 elem) OID 1.3.6.1.5.5.7.2.2 unotice (PKIX policy qualifier) SEQUENCE (1 elem) BMPString 이 인증서는 공인인증서 입니다 SEQUENCE (2 elem) OID 1.3.6.1.5.5.7.2.1 cps (PKIX policy qualifier) IA5String http://www.yessign.or.kr/cps.htm # 인증서 관리 정책 명세, CPS url로 접속하면 관리정책 문서를 확인 가능 |
- SubjectAltName | SEQUENCE (2 elem) OID 1.2.410.200004.10.1.1 npkiIdentifyData (KISA NPKI attribute) [0] (1 elem) SEQUENCE (2 elem) UTF8String 암호기술 SEQUENCE (1 elem) SEQUENCE (2 elem) OID 1.2.410.200004.10.1.1.1 npkiVID (KISA NPKI attribute) SEQUENCE(2 elem) SEQUENCE (1 elem) OID 2.16.840.1.101.3.4.2.1 sha-256 (NIST Algorithm) [0] (1 elem) OCTET STRING (32 byte) 46F7E720376BA8CCA53B95C753550469C1AD1CC0... # 인증서 주체의 대체 이름, 공인인증서의 경우 본인확인 용도로 사용됨 |
- CRLDistributionPoints | SEQUENCE (2 elem) OID 2.5.29.31 cRLDistributionPoints (X.509 extension) OCTET STRING (1 elem) SEQUENCE (1 elem) SEQUENCE (1 elem) [0] (1 elem) [0] (1 elem) [6] ldap://ds.yessign.or.kr:389/ou=dp5p49236,ou=AccreditedCA,o=yessign,c=kr?certific... # CRL을 획득할 수 있는 주소를 기제함 # 공인인증서의 경우 인증서를 조회할 수 있는 ldap 주소를 기제함 |
- AuthorityInfoAccess |
SEQUENCE( 2 elem) OID 1.3.6.1.5.5.7.1.1 authorityInfoAccess (PKIX private extension) OCTET STRING (1 elem) SEQUENCE (1 elem) SEQUENCE (2 elem) OID 1.3.6.1.5.5.7.48.1 ocsp (PKIX) [6] http://ocsp.yessign.org:4612 # Issuer가 제공하는 정보와 서비스 접속방법을 기제함 # 공인인증서의 경우 online-validation service인 ocsp(online certificate status protocol) 주소를 기제함 |
위 샘플은 필자가 가지고 있는 Yessign 공인인증서의 예제이다. 공인인증서는 공개 값이므로 포스트에 그대로 적어도 무관하다. 다만 표에 기제하기에는 다소 긴 데이터를 마음대로 생략했으므로 Validation은 실패할 것이다.
'Applied Cryptography' 카테고리의 다른 글
ECDSA with Bouncycastle Lib. (0) | 2020.07.20 |
---|---|
Blind Signature based RSA (0) | 2020.07.07 |
투표와 전자투표 (0) | 2020.06.19 |
Shamir's Secret Sharing과 Lagrange Interpolation (0) | 2020.06.19 |
전자 서명 알고리즘 (0) | 2020.06.19 |