PKCS 표준
[출처 : http://www.nexpert.net/438]
X.509 인증서 확장자
.CER - CER 암호화 된 인증서. 복수의 인증서도 가능.
.DER - DER 암호화 된 인증서.
.PEM - (Privacy Enhanced Mail) Base64로 암호화 된 인증서. "-----BEGIN CERTIFICATE-----"와 "-----END CERTIFICATE-----" 가운데에 들어간다.
.P7B - .p7c 참조.
.P7C - PKCS#7 서명 자료 구조(자료는 제외), 인증서이거나 CRL(복수도 가능).
.PFX - .p12 참조.
.P12 - PKCS#12, 공개 인증서와 암호로 보호되는 개인 키를 가질 수 있다(복수도 가능).
PKCS#7는 데이터를 서명하거나 암호화 할 때 쓰이는(enveloping) 표준이다. 서명된 데이터를 검증할 때는 인증서가 필요하기 때문에 서명 자료 구조에 인증서를 포함하기도 한다. .P7C 파일은 데이터가 아니라 서명 자료 구조일 뿐이다.
PKCS#12는 PFX(개인 정보 교환:Personal inFormation eXchange)이 발전된 형태이며, 하나의 파일에서 공개 / 개인 자료들을 교환할 때 쓰인다.
시작하며
PKCS는 공개키 기반 구조 (PKI)로 Secure UC 를 적용할 때마다 부딪히는 용어입니다. 단일 제조사 시스템간 구현에는 PKCS라는 용어를 몰라도 설정에 문제가 없지만, 이기종 제품이나 외부 CA 서버간 연동에는 필수적으로 나오는 용어입니다. 언제나 용어란 것이 알고나면 쉽지만, 모르면 무슨 얘기인지 모릅니다.
이번 글에서는 저도 이해하는 데 좀 어려웠던 PKCS에 대해 살펴보겠습니다.
PKCS (Public-Key Cryptography Standard)의 개요
PKCS는 공개키 기반 구조 (PKI, Public Key Infrastructure)에서 인터넷을 이용해 안전하게 정보를 교환하기 위한 제조사간 비공식 표준 프로토콜로 미국의 RSA가 개발한 암호 작성 시스템입니다. PKCS는 애플, 마이크로소프트, DEC 등의 회사에서 공동 개발하였지만, IETF에서 RFC 로 받아들이면서 공식적인 표준으로 인정하고 있습니다.
PKCS세부 항목
PKCS에서 다루고 있는 Credential은 정보 시스템에서 암호화된 개인정보로 개인의 공개키 암호 알고리즘을 위한 공개키 및 개인키 쌍, 공개키 인증서, CA 관련 정보, 패스워드 등을 포함하는 암호 정보의 총합입니다. 이를 다루는 PKCS는 #1 에서 #15까지 있으며, 아래 표를 참조하시기 바랍니다.
PKCS #1: RSA Cryptography Standard
RSA 알고리즘을 바탕으로 한 암호화, 서명 scheme의 구현에 대한 권고 표준이다. 이것은 키, scheme에 대한 ASN.1 표기도 포함한다. 현재 ver. 2.1이 draft(#3) 상태이다(6/14/2002). 2.0에서는 Optimal Asymmetric Encryption Padding(OAEP) 암호화가 포함되었고 2.1 draft(#2) 에는 Probabilistic Signature Scheme(PSS) 서명이 포함되었다.
PKCS #2 : PKCS#1과 통합
PKCS #3: Diffie-Hellman Key Agreement Standard
Diffie-Hellman key agreement 구현 방법을 설명한다. (ver 1.4)
PKCS #4 : PKCS#1과 통합
PKCS #5: Password-Based Cryptography Standard
패스워드를 기반으로 한 암호알고리즘을 다룬다. 여기에는 PBKDF1(Password-Based Key Derivation Function), PBKDF2, PBES1(Password-Based Encryption Scheme), PBES2, PBMAC1(Password-Based Message Authentication Code) 등이 포함되어 있다. (ver. 2.0)
PKCS #6: Extended-Certificate Syntax Standard
인증서에 관한 내용을 다룬다. (ver. 1.5)
PKCS #7: Cryptographic Message Syntax Standard
서명과 digital envelope과 같은 응용에서의 데이타에 대한 구문(syntax)을 정의하고 있다. (ver. 1.5, ver. 1.6 bulletin)
PKCS #8: Private-Key Information Syntax Standard
개인키 정보에 대한 구문을 정의하고 있다. (ver. 1.2)
PKCS #9: Selected Attribute Types
PKCS#6, #7, #8, #10에 사용한 attribute들을 정의하고 있다. (ver. 2.0, Amendment 1)
PKCS #10: Certification Request Syntax Standard
인증서 요청에 필요한 구문을 설명한다. (ver. 1.7)
PKCS #11: Cryptographic Token Interface Standard
CryptoKi API를 설명한다. (Draft 1 of v2.20) (ver. 2.11/draft, Amendment 1, Conformance Profile Specification)
PKCS #12: Personal Information Exchange Syntax Standard
사용자의 개인 정보(키, 인증서 등)를 전달하거나 교환하는 방법을 설명한다. (ver. 1.0, Technical Corrigendum)
PKCS #13: Elliptic Curve Cryptography Standard
타원곡선에 대한 내용(파라미터, 키 생성/검증, 서명, 암호화, 키교환 등)을 다룰 예정으로 되어 있다. 현재 진행중임.
PKCS #15: Cryptographic Token Information Format Standard
사용자가 자신을 상대방에게 식별할 수 있도록 하는 cryptographic token을 사용할수 있다는 것을 보증하도록 하는 표준이다. (ver. 1.1, Conformance Profile Specification, Technical Corrigendum 1)
인증서 발행 방식의 차이 : PKCS #10 과 PKCS #5
우리가 일반적으로 사용하는 것은 PKCS #5와 PKCS #10입니다. 이 두 가지는 개인키와 공개키를 생성하는 방식에서 차이가 있습니다. PKCS #10은 단말이나 사용자가 직접 키를 생성한 후에 공개키를 CA 서버로 부터 인증받아 인증서를 서명받은 후에 배포합니다. 개인키가 기기나 사용자를 벗어나지 않음으로 안정성을 보장받는 방법입니다. PKCS #5는 외부 CA 서버로 부터 단말이나 사용자의 개인키와 공인키를 생성한 후에 패스워드로 안전하게 암호화하여 기기나 사용자에게 주입하는 방식입니다. 따라서, PKCS #5 방식을 지원하면 보통 PKCS #10을 지원하지 않고, 그 역도 마찬가지 입니다.
인터넷 전화 보안의 관점에서 어떤 방식이 더 안전한가라는 물음이 생깁니다. 웹서핑도 해보고 자료도 찾아보았지만, 이 두가지에 대한 비교 자료가 없으므로 쉽게 단언할 수는 없습니다. 일반적인 환경에서 두 가지가 혼용되어 사용되고 기업의 상황에 따라 적절하게 사용하면 될 듯합니다.
현재 인터넷 전화 보안을 위해 두 가지 방식이 혼용되고 있습니다. 국산 장비들은 PKCS #5를, 외산 장비들은 PKCS #10을 지원합니다. 시스코 UC 구현을 위한 CUCM, IP Phone, CUBE 등은 모두 PKCS #10을 지원합니다.
출처: http://www.nexpert.net/438 [NExpert]
<공인인증서 적용>
https://m.blog.naver.com/kimsumin75/20097245777
PKCS#8 의 형태로 개인키를 써야 하고 (개인키를 PKCS#5 의 방법을 써서 암호화를 수행한 뒤)
공개키의 경우엔 x.509 v3 의 인증서에 담아서 인증기관의 서명을 받아서 써야함