본문 바로가기

Secure UC

PKCS, 공개키 암호 표준

시작하며
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 Version 1.5 (RFC 2313, 3447 )
    RSA 알고리즘을 이용해 데이터를 암호화하고 전자 서명하는 방법에 대한 내용과 RSA 공개 키의 구문을 설명합니다. PKCS #2와 #4는 폐기되고 주요 내용은 PKCS #1에 포함되었습니다. 


  • PKCS #3 Diffie-Hellman Key Agreement Standard  키 합의 표준 
    디피헬먼 키분배 알고리즘의 구현을 위한 방법을 설명하였습니다.PKCS #3는 OSI의 전송 및 네트워크 계층에서의 안전한 전송 채널 구축을 위한 프로토콜에 사용되는 것이 목적입니다.


  • PKCS #5 Password-based Cryptography Specification Version 2.0  (RFC 2898)
    개인 키정보를 사용자의 패스워드에 기반하여 암호화하는 방법을 정의한 패스워드기반 암호표준입니다. PKCS #5는 외부에서 개인키를 생성하여 당사자에게 전송시킬 때 개인키를 암호화하는 것을 목적으로 합니다. 개인키를 특징 기기나 개인이 사용하기 위해 복호화하기 위해서는 패스워드가 필요합니다. 


  • PKCS #6 Extended-Certificate Syntax Standard
    X.509 인증서의 version 1을 확장했지만, 현재는  X.509 Version 3가 사용되므로 사용되지 않습니다.  


  • PKCS #7 Cryptographic Message Syntax Version 1.5 (RFC 3369)
    전자 서명이나 전자 봉투와 같은 암호 응용에 대한 일반적인 구문 표현이빈다. PKCS #7은 PEM과 호환되니다. 


  • PKCS #8 Private-Key Information Syntax Specification Version 1.2 (RFC 5208) 
    개인키 정보 구문 표준으로 
    개인키와 속성 정보를 포함한 암호화된 개인키를 위한 구문을 정의합니다.


  • PKCS #9 Selected Object Classes and Attribute Types
    선택된 속성 형식 표준으로 
    PKCS #6 확장 인증서 구문 표준의 확장 인증서, PKCS #7의 전자서명 메세지와 PKCS #8 개인키 정보에서 사용되는 속성 유형들을 정의합니다.


  • PKCS #10 Certification Request Syntax Specification v1.7 (RFC 2986)
    인증 요청 구문 표준으로 
    인증서 발급 요청서를 위한 구문 정의합니다. 인증서 발급 요청서는 사용자 식별 명칭, 공개키, 옵션인 속성들로 구성되어 사용자가 인증서  발생을 요구하기 위하여 인증 기관에 요청하는 구문입니다. 


  • PKCS #11 Cryptographic Token Interface Standard 암호 토큰 인터페이스 표준
    스마트카드와 같은 암호화 장비를 위한 기술 독립 프로그래밍 인터페이스 (CAPI) 를 설명합니다.  


  • PKCS #12   Personal Information Exchange Syntax Standard 개인 정보 교환 표준
    사용자의 개인키, 인증 등의 저장과 교환을 위한 포맷을 설명합니다. 


  • PKCS #13 ECC 타원 곡선 암호 표준
    타원 곡선 암호에 기반한 공개 키를 암호화를 하고 서명하는 매커니즘을 설명합니다. 


  • PKCS #14  의사 난수 생성 표준 
    블록 암호, 해시 함수 등 다양한 방법의 의사 난수 생성 설명합니다.


  • PKCS #15   암호 토큰 정보 형식 표준
    암호화 토큰에 저장된 암호화 보증서의 포맷을 위한 표준을 설명합니다. 


인증서 발행 방식의 차이 : 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://jjaiwook79.blog.me/30097958614 




라인하트 (CCIEV #18487)  ----------------------------------------------------------
ucwana@gmail.com (라인하트의 구글 이메일) 
http://twitter.com/ucwana (라인하트의 트위터 ) 
http://twitter.com/nexpertnet (넥스퍼트 블로그의 트위터, 최신 업데이트 정보 및 공지 사항) 
http://groups.google.com/group/cciev (시스코 UC를 공부하는 사람들이 모인 구글 구룹스) 
http://groups.google.com/group/ucforum (벤더에 상관없이 UC를 공부하는 사람들이 모인 구글 구룹스) 
세상을 이롭게 하는 기술을 지향합니다. ________________________________________________________