보안토큰기반의공인인증서이용기술규격 Accredited Certificate Usage Specification for Hardware Security odule v2.00 2010년 7월
목 차 1. 개요 1 2. 규격의구성및범위 1 3. 관련표준및규격 1 3.1 국외표준및규격 1 3.2 국내표준및규격 2 3.3 기타 2 4. 정의 2 4.1 전자서명법용어정의 2 4.2 용어의정의 3 4.3 용어의효력 3 5. 약어 4 6. 보안토큰 API(PKCS#11) 개요 4 6.1 가입자소프트웨어와보안토큰간인터페이스모델 4 6.2 기본요구사항 5 7. 보안토큰 API(PKCS#11) 프로파일 7 7.1 저장객체 7 7.2 함수 9 7.3 메커니즘 10 부록 1. 보안토큰 API(PKCS#11) 객체속성프로파일 11 부록 2. 보안토큰 API(PKCS#11) 함수프로파일 24 부록 3. 보안토큰 API(PKCS#11) 메카니즘프로파일 27 부록 부록 4. 환경파일을이용한보안토큰구동프로그램위치정보관리 29 5. 보안토큰구동프로그램검증정보처리 31 부록 6 보안토큰 API(PKCS#11) 반환값프로파일 33 부록 7 규격연혁 38
보안토큰기반공인인인증서이용기술규격 Accredited Certificate usage specification for Hardware Security odule 1. 개요 가입자의개인키를안전하게관리및휴대할수있는저장매체로써 USB, 스마트카드등보안토큰에대한요구가증대됨에따라, 응용프로그램에서 이러한보안토큰의호환성을제공할수있도록규격이필요하다. 이에, 본규격 은 SA사의 PKCS#11 인터페이스에기반하여, 보안토큰의기능중반드시필 요하거나구현이권고되는부분을기술하여개별적인구현간의상호연동이보 장될수있도록한다. 2. 규격의구성및범위 본규격은전자서명인증체계가입자소프트웨어에서전자서명생성키등비밀 정보를안전하게저장 보관할수있도록키생성 전자서명생성등이기기 내부에서처리되는보안토큰의기본요구사항과보안토큰을이용함에있어필 요한보안토큰API 의기능적요구사항을명시한다. 첫번째로, 보안토큰기반공인인인증서이용을위한보안토큰과보안토큰 API 및가입자S/W 의인터페이스모델및기본요구사항을정의한다. 두번째로, 보안토큰의객체, 함수, 메커니즘등보안토큰API(PKCS#11) 프로파일을정의한다. 3. 관련표준및규격 3.1 국외표준및규격 [PKCS1] [PKCS5] SA Laboratories PKCS#1, SA Cryptography Standard v2.1, 2001 SA Laboratories PKCS#5, Password-Based Cryptography Standard v2.0, 1999-1-
[PKCS8] [PKCS11] [PKCS12] [P11PF] SA Laboratories PKCS#8, Private-Key Information Syntax Standard, 1993 SA Laboratories PKCS#11, Cryptographic Token Interface Standard v2.11, 2001 SA Laboratories PKCS#12, Personal Information Exchange Syntax Standard v1.0, 1999 SA Laboratories PKCS#11 Profile, Conformance Profile Specification, 2001 3.2 국내표준및규격 [TTA-120012] TTA, TTAS.K-12.0012, 전자서명인증서프로파일표준, [TTA-120004] [KCAC.TS.SIVID] 2000 TTA, TTAS.K-12.0004, 128 비트블록암호알고리즘표준, 2000 KISA, KCAC.TS.SIVID, v1.30, 식별번호를이용한본인확인 기술규격,2009 [Bio 보안토큰] 조달청,Bio 보안토큰이용기술규격,v1.0, 나라장터 Bio보안 토큰이용기술규격,2009 3.3 기타 해당사항없음 4. 정의 4.1 전자서명법용어정의 본규격에서사용된다음의용어들은전자서명법및동법시행령, 기관의시설및장비등에관한규정( 행정안전부고시) 에정의되어있다. 공인인증 가) 나) 다) 라) 인증서공인인증서공인인증기관전자서명인증체계 -2-
4.2 마) 가입자 바) 가입자설비 용어의정의 가 ) 보안토큰 (HS) : 전자서명생성키등비밀정보를안전하게저장보관하기 위하여키생성 전자서명생성등이기기내부에서 현된하드웨어기기 나 ) 보안토큰 API : 보안토큰에대한응용프로그래밍인터페이스 다) 메커니즘 : 암호기능을구현하는절차 처리되도록구 라) 슬롯(Slot) : 보안토큰과의입출력을수행할수있는논리적리더기 마 ) 템플릿(Template) : 객체속성집합으로서객체의생성, 수정, 검색등을 위하여사용됨 바 ) 보안토큰구동프로그램 : 보안토큰 API 를구현한프로그램을말하며, 보안토큰과가입자소프트웨어간의인터페이스를담당 사 ) mutexes(utual Exclusion) : 다중프로세스내에서동기화를위해사용되는 상호배제객체 아 ) 보안토큰제품정보(ID) : 보안토큰구동프로그램을식별하기위해사용하는 정보.USB형보안토큰의보안토큰제품정보는Vendor ID와Product ID를 연접하여사용하고, 스마트카드형보안토큰은 AT 정보를사용함 자 ) 바이오보안토큰 : 보안토큰의기능을만족하면서바이오정보를 이용하여인증을수행할수있도록구현된기기 4.3 용어의효력 본규격에서사용된다음의용어들은전자서명인증체계가입자소프트웨어가 보안토큰의기능을이용함에있어서의보안토큰구동프로그램( 이하구동프로 그램) 및가입자 S/W 구현정도를의미하는것으로 [FC2119] 를준용하며다 음과같은의미를지닌다. 가) 해야한다, 필수이다, 강제한다 ( 기호 : ) 반드시준수해야한다. 나) 권고한다 ( 기호 : ) 보안성및상호연동을고려하여준수할것을권장한다. 다) 할수있다, 쓸수있다 ( 기호 : ) -3-
주어진상황을고려하여필요한경우에한해선택적으로사용할수있다. 라) 권고하지않는다 ( 기호 : N) 보안성및상호연동을고려하여사용하지말것을권장한다. 마) 금지한다, 허용하지않는다 ( 기호 : X) 반드시사용하지않아야한다. 바) 언급하지않는다, 정의하지않는다 ( 기호 : -) 준수여부에대해기술하지않는다. 5. 약어 -4- 본규격에서는다음의약어들에대해추가적으로정의한다. oapi:applicationprogramminginterface oid:bjectidentifier opkcs:publickeycryptographystandard ohs:hardwaresecurityodulesoat:answertoeset, 보안토큰초기화정보 6. 보안토큰 API(PKCS#11) 개요 6.1 가입자소프트웨어와보안토큰간인터페이스모델 본장에서는보안토큰 적인적용모델을도식화한것이다. API를이용한가입자소프트웨어와보안토큰간일반
가입자소프트웨어 1 가입자소프트웨어 n 가입자소프트웨어 ther Security Layer 보안토큰 API 환경파일 보안토큰구동프로그램검증정보 ther Security Layer 보안토큰 API Device Contention/Synchronization 보안토큰구동프로그램 슬롯 1 슬롯 n 하드웨어기기 보안토큰 1 보안토큰 n [ 그림 1] 가입자소프트웨어와보안토큰간모델 본규격에서는[ 그림1] 과같이하나의보안토큰API는다중슬롯을통하여 하나이상의보안토큰에대한인터페이스를제공해야한다. 6.2 기본요구사항 6.2.1 보안토큰요구사항 보안토큰은전자서명키및전자서명이하드웨어내부에서생성되는기능을 제공하여야하며, 이경우암호프로세서(Crypto-processor) 를이용하여야한다. 보안토큰은인가되지않는사용자또는가입자소프트웨어의접근 이용에적절히 대처하기위해비밀번호인증및비밀번호입력오류회수제한기능을갖춰야하며, 입력 오류허용회수를초과하는경우해당보안토큰잠금기능을제공하여야한다. 또한, 보안토큰의전자서명생성키등비밀정보는기기외부로노출 유출되지 않도록안전성을보장해야한다. 또한차분전력분석기법등공격에대한대비책을 마련해야한다. 다만, 보안토큰외부에서생성된전자서명생성키등을보안토큰에 저장하는것은허용한다. -5-
6.2.2 세션요구사항 구동프로그램은한개의읽기/ 쓰기세션과다중의읽기세션을반드시지원해 야한다 6.2.3 쓰레드요구사항 구동프로그램은안전한쓰레드사용을위한 mutexes를지원해야한다. 6.2.4 알고리즘요구사항 구동프로그램은공개키알고리즘으로 SA 1024 비트및 2048 비트를지원해야한다. 6.2.5 위치정보관리요구사항 공인인증기관은가입자소프트웨어가시스템에존재하는구동프로그램의위치 정보를파악할수있도록부록 지원해야한다. 4에서명시한환경파일을이용한위치정보관리를 6.2.6 보안토큰구동프로그램검증정보처리요구사항 가입자소프트웨어는부록 5의구동프로그램검증정보를확인하여구동프로그램의 무결성및구현적합성을확인할수있다. 가입자소프트웨어에서구동프로그램검증 정보확인처리기능의구현은선택사항으로한다. 6.2.7 보안토큰내부에서전자서명생성여부확인요구사항 보안토큰기반으로전자서명이생성되었는지를확인하고자하는이용자( 이하 이용자 라한다) 는부록 5의보안토큰구동프로그램검증정보를확인하여야 한다. 다만, 공인인증서 확장키사용목적확장필드 에보안토큰식별자(id-kisa-HS) 가 포함돼있는경우이를확인하여전자서명이보안토큰내부에서생성되었는지 확인할수있다. 공인인증기관은보안토큰기반으로발급되는공인인증서에는 확장키사용목적 확장필드 에보안토큰식별자를추가하여공인인증서를발급하여야한다. 이경우, -6-
공인인증서에추가되는식별자는 id-kisa-hs 으로한다. id-kisa-hs BJECT IDENTIFIE :: { iso(1) member-body(2) korea(410) kisa(200004) npki(10) attributes(1) kisa-hs(2) } 공인인증기관은보안토큰기반으로공인인증서를발급하기위해서는부록 구동프로그램검증정보를확인하여공인인증서발급신청자의보안토큰구동프로 그램의무결성및구현적합성을확인하여야한다. 5의 이러한확인결과는 지의 reginfo 부분에부가 생성되었음을표시하여야한다. FC 2511에서정의하는메시지구조를가지는 ir 메시 정보로입력하여전자서명키가보안토큰기반으로 reginfo 부분에 전자서명키가보안토큰내에서생성되었음을표시하는부가 정보로 Attribute 형태는 id-kisa-hs 명칭형식을이용하고, Value 값은공인 인증기관의필요에따라선택적으로사용할수있다. Value 값을사용하지않 고자하는경우, 그값은 NULL 인코딩한다. 7. 보안토큰 API(PKCS#11) 프로파일 본장에서는전자서명인증체계가입자소프트웨어에게구동프로그램기능의 호환성을제공하기위해필요한 PKCS#11 저장객체, 함수, 메커니즘등을정의한다. 7.1 저장객체(Storage bject) 본규격을준용하는구동프로그램및가입자소프트웨어는저장객체로써, 데이터 객체, 인증서객체및키객체를생성하거나처리시부록 1. PKCS#11 객체속성 프로파일에서명시한객체속성템플릿을준용하여야한다. 7.1.1 데이터객체(Data bject) 구동프로그램이 구별하기위해해당객체의 CKA_BJECT_ID 속성을지원하는경우다수 ID 를속성값으로사용해야한다. 데이터객체를 -7-
[KCAC.TS.SIVID] 에서정의한난수() 를저장하는데이터객체가하나이 상존재할경우이를구분하기위하여, 구동프로그램은레이블속성 ( CKA_LABEL) 을지원해야하며, 이레이블속성에키및인증서객체의식별자로 이용되는 CKA_ID 값을 4VID=CKA_ID(16 진수표기) 와같이표현하여하나이상의 데이터객체난수() 을구분할수있어야한다. 여기서 '4VID' 은 [KCAC.TS.SIVID] 에서정의한난수() 을위한식별자를나타내며, CKA_ID 값은 16진수로표기하고이들의 값은 = 로연결한다. 난수() 은비밀객체속성을가져야한다. 바이오보안토큰구동프로그램이바이오보안토큰등록정보및사용자등록정보를지원하는경우데이터객체를사용하여야한다. 이경우, 구동프로그램은바이오보안토큰등록정보및사용자등록정보를식별하기위해 CKA_LABEL을지원하여야한다. 바이오보안토큰등록정보의레이블속성 (CKA_LABEL) 은하나이상의보안토큰 등록정보를구분할수있도록 'DevAuth= 일련번호' 로표기한다( 이경우 일련번호 는 1바이트 16 진수로표기하고 DevAuth 와 = 로연결한다). 또한, 사용자등록정보의 레이블속성(CKA_LABEL) 은법인의경우 'Corporation ', 개인의경우 'Person' 으로 표기한다. CKA_VALUE에표기되는바이오보안토큰등록정보및사용자등록정보는 비밀객체속성을가져야한다. 7.1.2 인증서객체(Certificate bject) 인증서는공개객체이며하나이상의인증서를구분하기위하여키및 인증서객체의식별자로이용되는 CKA_ID 속성을지원해야한다. 7.1.3 키객체(Key bject) 키객체는개인키, 공개키, 비밀키를저장하기위하여이용되며, 개인키 및비밀키객체는비밀객체속성을가져야한다. 하나이상의개인키구분을위해키및인증서객체의식별자로이용되는 CKA_I D 속성을지원해야한다. -8-
CKA_ID 권고한다. 속성값은인증서확장필드의소유자키식별자값을사용할것을 공개키는공개객체이며하나이상의공개키를구분하기위하여키및 인증서객체의식별자로이용되는 CKA_ID 속성을지원해야한다. 개인키및공개키객체는인증서에명시된키사용목적에부합하는속성을 가져야하며부록 1. PKCS#11 객체속성프로파일을준용해야한다. 7.2 함수 본절에서는전자서명인증체계가입자소프트웨어가보안토큰의기능을이용 하기위해구동프로그램이지원해야하는함수및반환값을정의하며, 구동 프로그램은부록2. 보안토큰API(PKCS#11) 함수프로파일및부록 6. 보안토큰 API(PKCS#11) 반환값프로파일을각각준용하여야한다. 램은 보안토큰의초기화, 자원해제, 일반적인정보획득의기능함수로, 구동프로그 C_initialize, C_Finalize, C_GetInfo, C_GetFunctionList 를지원해야한다. 보안토큰의슬롯및토큰에대한정보획득, 토큰이지원할수있는메커니즘집 합획득등토큰과슬롯간의연결관리기능함수로, 구동프로그램은 C_GetSlotList, C_GetSlotInfo, C_GetTokenInfo, C_GetechanismList, C_GetechanismInfo 를지원해야한다. 보안토큰의세션관리기능함수로, 구동프로그램은 C_penSession, C_CloseSession, C_CloseAllSessions, C_GetSessionInfo, C_Login, C_Logout 을지원해야한다. 보안토큰의객체생성, 객체검색등객체관리기능함수로, 구동프로그램은 C_Createbject, C_Destroybject, C_FindbjectsInit, C_Findbjects C_FindbjectsFinal, C_GetAttributeValue, C_SetAttributeValue 를지원해야한다. 보안토큰의전자서명생성기능함수로, 구동프로그램은 C_SignInit, C_Sign을 지원해야한다. 보안토큰의암호키복호화기능함수로, 구동프로그램은 C_DecryptInit, C_Decrypt, C_Unwrap 을지원해야한다. -9-
보안토큰의전자서명키쌍생성기능함수로, 구동프로그램은 C_GenerateKeyPair, C_Seedandom, C_Generateandom 을지원해야한다. 7.3 메커니즘(echanism) 본절에서는전자서명인증체계가입자소프트웨어가보안토큰기능을이용하기 위해구동프로그램이지원해야하는메커니즘을정의하며, 구동프로그램은부록 3. 보안토큰 SA API(PKCS#11) 메커니즘프로파일을준용하여야한다. 알고리즘을이용한전자서명생성및암호키복호화 위해, 구동프로그램은 PKCS#11에기반한 등의기능을지원하기 CK_SA_PKCS 메커니즘을지원해야 한다. 보안토큰의처리용량을고려하여전자문서에대한해쉬값은가입자소프트 웨어에서생성되어야한다. -10-
부록 1. 보안토큰 API(PKCS#11) 객체속성프로파일 1. 일반객체(Common bject Attribute) 속성데이터타입내용처리 CKA_CLASS CK_BJECT_CLASS bject class - 본프로파일은CKA_CLASS 로다음아래와같은객체를지원해야한다. CK_DATA, CK_CETIFICATE, CK_PUBLIC_KEY, CK_PIVATE_KEY - 본프로파일은CKA_CLASS 로다음아래와같은객체지원을권고한다. CK_SECET_KEY, CK_DAIN_PAAETES 2. 저장객체(Storage bject) 2.1 저장공통객체(Common Storage bject Attribute) 속성데이터타입내용처리 CKA_TKEN CK_BBL IF True : IF False : 토큰객체 세션객체 CKA_PIVATE CK_BBL IF True : Private 객체 CKA_DIFIABLE CK_BBL IF True : 객체수정 CKA_LABEL FC2279 string 객체설명 2.2 데이터객체(Data bject) 속성데이터타입내용처리 CKA_APPLICATIN FC2279 String 어플리케이션설명 CKA_BJECT_ID Byte Array DE 인코딩된 ID (bject identifier) CKA_VALUE Byte Array 객체값 데이터객체속성템플릿 : CK_BJECT_CLASS class = CK_DATA; CK_UTF8CHA label[] = "4VID=FF3082A0..."; CK_UTF8CHA application[] = Accredited PKI Application ; CK_BYTE data[] = Sample data ; CK_BBL true = TUE; CK_ATTIBUTE template[] = { -11-
{CKA_CLASS, &class, sizeof(class)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_PIVATE, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_APPLICATIN, application, sizeof(application)-1}, {CKA_VALUE, data, sizeof(data)} }; 바이오보안토큰등록정보데이터객체속성템플릿( 바이오보안토큰사용시) : CK_BJECT_CLASS class = CK_DATA; CK_UTF8CHA label[] = "DevAuth=FF"; CK_UTF8CHA application[] = Accredited PKI Application ; CK_BYTE data[] = "FEDCBA98... ; CK_BBL true = TUE; CK_ATTIBUTE template[] = { }; {CKA_CLASS, &class, sizeof(class)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_PIVATE, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_APPLICATIN, application, sizeof(application)-1}, {CKA_VALUE, data, sizeof(data)} 법인사용자등록정보데이터객체속성템플릿( 바이오보안토큰사용시) : CK_BJECT_CLASS class = CK_DATA; CK_UTF8CHA label[] = "Corporation"; CK_UTF8CHA application[] = Accredited PKI Application ; CK_BYTE data[] = "7C25... ; CK_BBL true = TUE; CK_ATTIBUTE template[] = { }; {CKA_CLASS, &class, sizeof(class)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_PIVATE, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_APPLICATIN, application, sizeof(application)-1}, {CKA_VALUE, data, sizeof(data)} 개인사용자등록정보데이터객체속성템플릿( 바이오보안토큰사용시) : CK_BJECT_CLASS class = CK_DATA; CK_UTF8CHA label[] = "Person"; CK_UTF8CHA application[] = Accredited PKI Application ; CK_BYTE data[] = "AFFBC... ; -12-
CK_BBL true = TUE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_PIVATE, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_APPLICATIN, application, sizeof(application)-1}, {CKA_VALUE, data, sizeof(data)} }; 2.3 인증서객체 (Certificate bject) 2.3.1 X.509 인증서공통객체(Common X.509 Certificate bject Attribute) 속성데이터타입내용처리 CKA_CETIFICATE_TYPE CK_CETIFICATE_TYPE 인증서타입 CKA_TUSTED CK_BBL 어플리케이션은신뢰된 인증서로간주 CKA_TUSTED 속성은특정어플리케이션에의해설정되어져서는안되며, 토큰을초기화할때 설정되어야함. 2.3.2 X.509 공개키인증서객체(X.509 Public Key Certificate bject Attribute) 속성데이터타입내용처리 CKA_SUBJECT Byte Array DE 인코딩된인증서가입자이름 CKA_ID Byte Array Key identifier(public/private) CKA_ISSUE Byte Array DE 인코딩된인증서발급자이름 CKA_SEIAL_NUBE Byte Array DE 인코딩된인증서일련번호 CKA_VALUE Byte Array BE 인코딩된인증서 X.509 공개키인증서객체속성템플릿 : CK_BJECT_CLASS class = CK_CETIFICATE; CK_CETIFICATE_TYPE certtype = CKC_X_509; CK_UTF8CHA label[] = LABEL 명 ; CK_BYTE subject[] = {...}; CK_BYTE id[] = {123}; CK_BYTE certificate[] = {...}; CK_BBL true = TUE; -13-
CK_BBL false = FALSE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_CETIFICATE_TYPE, &certtype, sizeof(certtype)}; {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_SUBJECT, subject, sizeof(subject)}, {CKA_ID, id, sizeof(id)}, {CKA_PIVATE, false, sizeof(false)}, {CKA_VALUE, certificate, sizeof(certificate)} }; 2.3.3 X.509 속성인증서객체(X.509 Attribute Certificate bject Attribute) 속성데이터타입내용처리 CKA_WNE CKA_AC_ISSUE Byte Array Byte Array DE 인코딩된속성인증서소유자 이름 DE 인코딩된속성인증서발급자 이름 CKA_SEIAL_NUBE Byte Array DE 인코딩된인증서일련번호 CKA_ATT_TYPES Byte Array BE 인코딩된속성 ID CKA_VALUE Byte Array BE 인코딩된속성인증서 속성인증서를사용할경우위속성인증서의객체속성을준용할것을권고함. X.509 속성인증서객체템플릿 : CK_BJECT_CLASS class = CK_CETIFICATE; CK_CETIFICATE_TYPE certtype = CKC_X_509_ATT_CET; CK_UTF8CHA label[] = "An attribute certificate object"; CK_BYTE owner[] = {...}; CK_BYTE certificate[] = {...}; CK_BYTE subject[] = {...}; CK_BYTE id[] = {123}; CK_BBL true = TUE; CK_BBL false = FALSE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_CETIFICATE_TYPE, &certtype, sizeof(certtype)}; {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_WNE, owner, sizeof(owner)}, {CKA_SUBJECT, subject, sizeof(subject)}, {CKA_ID, id, sizeof(id)}, -14-
}; {CKA_PIVATE, false, sizeof(false)}, {CKA_VALUE, certificate, sizeof(certificate)} 2.4 키객체(Key bject) 2.4.1 키공통객체(Common Key Attribute) 속성데이터타입내용처리 CKA_KEY_TYPE CKA_KEY_TYPE 키타입 CKA_ID Byte Array KEY Identifier CKA_STAT_DATE CK_DATE 키의유효시작날짜 - CKA_END_DATE CK_DATE 키의유효만료날짜 - CKA_DEIVE CK_BBL IF TUE : 키유도지원 CKA_LCAL CK_BBL IF TUE : 토큰내에서키생성 CKA_KEY_GEN_ECHANIS CK_ECHANIS_TYPE 키생성메카니즘 Identifier 보안토큰 API 키속성과 X.509V3 인증서와의 apping Table 공개키/ 개인키를위한 X.509V3 인증서 Key Usage dataencipherment digitalsignature, keycertsign, clsign digitalsignature, keycertsign, clsign keyagreement keyencipherment nonepudiation nonepudiation 공개키/ 개인키를위한 보안토큰 API 속성 CKA_ENCYPT CKA_VEIFY CKA_VEIFY_ECVE CKA_DEIVE CKA_WAP CKA_VEIFY CKA_VEIFY_ECVE 2.4.2 공개키객체(Public Key bject) 2.4.2.1 공개키공통객체(Common Public Key bject Attribute) -15-
속성데이터타입내용처리 CKA_SUBJECT Byte array DE 인코딩된소유자이름 CKA_ENCYPT CK_BBL 암호화 CKA_VEIFY CK_BBL 부가형전자서명검증 CKA_VEIFY_ECVE CK_BBL 복원형전자서명검증 CKA_WAP CK_BBL 키암호화 CKA_TUSTED CK_BBL 신뢰되는키 CKA_VEIFY 속성은전자서명검증공개키에설정되어야하며, CKA_WAP 속성은암호키분배공개키에 설정되어야함. 2.4.2.2 SA 공개키객체(SA Public Key bject Attribute) 속성데이터타입내용처리 CKA_DULUS Big integer odulus n CKA_DULUS_BITS CK_ULNG n 의길이( 비트) CKA_PUBLIC_EXPNENT Big integer Public exponent e SA 공개키객체템플릿(C_GenerateKeyPair 함수이용시) : CK_BJECT_CLASS class = CK_PUBLIC_KEY; CK_KEY_TYPE keytype = CKK_SA; CK_UTF8CHA label[] = An SA public key object ; CK_BYTE exponent[] = {...}; CK_ULNG bits = 1024; CK_BYTE id[] = {123}; CK_BBL true = TUE; CK_BBL false = FALSE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_ID, id, sizeof(id)}, {CKA_WAP, &false, sizeof(false)}, {CKA_ENCYPT, &false, sizeof(false)}, {CKA_DULUS_BITS, &bits, sizeof(bits)}, {CKA_PIVATE, false, sizeof(false)}, {CKA_VEIFY, true, sizeof(true)}, {CKA_PUBLIC_EXPNENT, exponent, sizeof(exponent)} }; SA 공개키객체템플릿(C_Createbject 함수이용시) : CK_BJECT_CLASS class = CK_PUBLIC_KEY; -16-
}; CK_KEY_TYPE keytype = CKK_SA; CK_UTF8CHA label[] = An SA public key object ; CK_BYTE exponent[] = {...}; CK_BYTE modulus[] = {...}; CK_BYTE subject[] = {...}; CK_BYTE id[] = {123}; CK_BBL true = TUE; CK_BBL false = FALSE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_ID, id, sizeof(id)}, {CKA_WAP, &false, sizeof(false)}, {CKA_ENCYPT, &false, sizeof(false)}, {CKA_DULUS, modulus, sizeof(modulus)}, {CKA_SUBJECT, subject, sizeof(subject)}, {CKA_PIVATE, false, sizeof(false)}, {CKA_VEIFY, true, sizeof(true)}, {CKA_PUBLIC_EXPNENT, exponent, sizeof(exponent)} 전자서명검증공개키에는 CKA_VEIFY 를 TUE 로설정하고, CKA_WAP 및 CKA_ENCYPT을 FALSE 로설정하여야함 암호키분배공개키에는 CKA_VEIFY 를 FALSE 로설정하고, CKA_WAP 및 CKA_ENCYPT을 TUE 로설정하여야함 2.4.2.3 EC 공개키객체(Elliptic Curve Public Key bject Attribute) 속성데이터타입내용처리 CKA_EC_PAAS (CKA_ECDSA_PAAS) Byte Array DE인코딩된 ASNI X9.62 파라메터값 CKA_EC_PINT Byte Array DE인코딩된 ASNI X9.62 ECPoint 값 Q EC 공개키를사용할경우위객체속성을준용할것을권고함. EC 공개키객체템플릿(C_Createbject 함수이용시) : CK_BJECT_CLASS class = CK_PUBLIC_KEY; CK_KEY_TYPE keytype = CKK_EC; CK_UTF8CHA label[] = An EC public key object ; CK_BYTE ecparams[] = {...}; CK_BYTE ecpoint[] = {...}; CK_BBL true = TUE; -17-
CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_EC_PAAS, ecparams, sizeof(ecparams)}, {CKA_EC_PINT, ecpoint, sizeof(ecpoint)} }; -18-
2.4.3 개인키객체(Private Key bject) 2.4.3.1 개인키공통객체속성(Common Private Key bject Attribute) 속성 데이터타입 내용 처리 CKA_SUBJECT Byte Array DE 인코딩된인증서소유자이름 CKA_SENSITIVE CK_BBL TUE : Plain-Text 형태로 Export 불가 CKA_SECNDAY_AUTH CK_BBL IF TUE : 두번의인증요구 CKA_AUTH_PIN_FLAGS CK_FLAGS IF TUE : 두번의PIN 인증 IF FALSE : 속성값 0 CKA_DECYPT CK_BBL TUE : 복호화 CKA_SIGN CK_BBL TUE : 부가형전자서명 CKA_SIGN_ECVE CK_BBL IF TUE : 복원형전자서명 CKA_UNWAP CK_BBL TUE : 키복호화 CKA_EXTACTABLE CK_BBL FALSE : 키의 Export 불가 CKA_ALWAYS_SENSITIVE CK_BBL IF TUE : 항상 Plain-Text 형태로 Export 불가 CKA_NEVE_EXTACTABLE CK_BBL IF TUE : 키가 Plain-Text 형태로나오지않음 CKA_SIGN 속성은전자서명생성개인키에설정되어야하며, CKA_UNWAP 속성은암호키분배개인키에 설정되어야함. 2.4.3.2 SA 개인키객체(SA Private Key bject Attribute) 속성데이터타입내용처리 CKA_DULUS Big integer odulus n CKA_PUBLIC_EXPNENT Big integer Public exponent e CKA_PIVIATE_EXPNENT Big integer Private exponent d CKA_PIE_1 Big integer Prime p CKA_PIE_2 Big integer Prime q CKA_EXPNENT_1 Big integer Private exponent d modulo p-1 CKA_EXPNENT_2 Big integer Private exponent d modulo p-2 CKA_CEFFICIENT Big integer CT coefficient q -1 mod p SA 개인키객체템플릿(C_GenerateKeyPair 함수이용시) : CK_BJECT_CLASS class = CK_PIVATE_KEY; CK_KEY_TYPE keytype = CKK_SA; CK_UTF8CHA label[] = "LABEL 명" ; CK_BYTE id[] = {123}; CK_BBL true = TUE; CK_BBL false = FALSE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, -19-
}; {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_ID, id, sizeof(id)}, {CKA_SENSITIVE, &true, sizeof(true)}, {CKA_DECYPT, &false, sizeof(false)}, {CKA_SIGN, &true, sizeof(true)}, {CKA_UNWAP, &false, sizeof(false)}, {CKA_PIVATE, &true, sizeof(true)}, SA 개인키객체템플릿(C_Createbject 함수이용시) : CK_BJECT_CLASS class = CK_PIVATE_KEY; CK_KEY_TYPE keytype = CKK_SA; CK_UTF8CHA label[] = "LABEL 명" ; CK_BYTE subject[] = {...}; CK_BYTE id[] = {123}; CK_BYTE modulus[] = {...}; CK_BYTE publicexponent[] = {...}; CK_BYTE privateexponent[] = {...}; CK_BYTE prime1[] = {...}; CK_BYTE prime2[] = {...}; CK_BBL true = TUE; CK_BBL false = FALSE; CK_BYTE exponent1[] = {...}; CK_BYTE exponent2[] = {...}; CK_BYTE coefficient[] = {...}; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_SUBJECT, subject, sizeof(subject)}, {CKA_ID, id, sizeof(id)}, {CKA_SENSITIVE, &true, sizeof(true)}, {CKA_SIGN, &true, sizeof(true)}, {CKA_UNWAP, &false, sizeof(false)}, {CKA_DECYPT, &false, sizeof(false)}, {CKA_PIVATE, &true, sizeof(true)}, {CKA_DULUS, modulus, sizeof(modulus)}, {CKA_PUBLIC_EXPNENT, publicexponent, sizeof(publicexponent)}, {CKA_PIVATE_EXPNENT, privateexponent, sizeof(privateexponent)}, {CKA_PIE_1, prime1, sizeof(prime1)}, {CKA_PIE_2, prime2, sizeof(prime2)}, -20-
}; {CKA_EXPNENT_1, exponent1, sizeof(exponent1)}, {CKA_EXPNENT_2, exponent2, sizeof(exponent2)}, {CKA_CEFFICIENT, coefficient, sizeof(coefficient)} 전자서명생성개인키에는 CKA_SIGN 을 TUE 로설정하고, CKA_UNWAP 및 CKA_DECYPT 을 FALSE 로설정하여야함 암호키분배개인키에는 CKA_SIGN 을 FALSE 로설정하고, CKA_UNWAP 및 CKA_DECYPT 을 TUE 로설정하여야함 2.4.3.3 EC 개인키객체속성(Elliptic Curve Private Key bject Attribute) 속성데이터타입내용처리 CKA_EC_PAAS (CKA_ECDSA_PAAS) Byte Array DE인코딩된 X9.62 ASNI 파라메터값 CKA_VALUE Big integer ASNI X9.62 개인키값 d EC 개인키를사용할경우위객체속성을준용할것을권고함. EC 개인키객체템플릿(C_Createbject 함수이용시) : CK_BJECT_CLASS class = CK_PIVATE_KEY; CK_KEY_TYPE keytype = CKK_EC; CK_UTF8CHA label[] = An EC private key object ; CK_BYTE subject[] = {...}; CK_BYTE id[] = {123}; CK_BYTE ecparams[] = {...}; CK_BYTE value[] = {...}; CK_BBL true = TUE; CK_BBL false = FALSE; CK_ATTIBUTE template[] = { {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_SUBJECT, subject, sizeof(subject)}, {CKA_ID, id, sizeof(id)}, {CKA_SENSITIVE, &true, sizeof(true)}, {CKA_DEIVE, &true, sizeof(true)}, {CKA_PIVATE, & true, sizeof(true)}, {CKA_EC_PAAS, ecparams, sizeof(ecparams)}, {CKA_VALUE, value, sizeof(value)} }; -21-
2.4.4 비밀키객체(Secret Key bject) 2.4.4.1 비밀키공통객체(Common Secret Key bject) 속성데이터타입내용처리 CKA_SENSITIVE CK_BBL IF TUE : 민감한정보 CKA_ENCYPT CK_BBL IF TUE : 암호화 CKA_DECYPT CK_BBL IF TUE : 복호화 CKA_SIGN CK_BBL IF TUE : 부가형서명 - CKA_VEIFY CK_FLAGS IF TUE : 부가형서명검증 CKA_WAP CK_BBL IF TUE : 키암호화 CKA_UNWAP CK_BBL IF TUE : 키복호화 CKA_EXTACTABLE CK_BBL IF TUE : 키의 Export 지원 CKA_ALWAYS_SENSITIVE CK_BBL IF TUE : 항상 Plain-Text 형태로 Export 불가 CKA_NEVE_EXTACTABLE CK_BBL IF TUE : 키의 Export 지원절대금지 - 비밀키객체를사용할경우위객체속성을준용할것을권고함. 2.4.4.2 DES3 비밀키객체(DES3 secret key objects) 속성데이터타입내용처리 CKA_VALUE Byte Array 키값 3DES 비밀키객체템플릿 : CK_BJECT_CLASS class = CK_SECET_KEY; CK_KEY_TYPE keytype = CKK_DES3; CK_UTF8CHA label[] = A DES3 secret key object ; CK_BYTE value[24] = {...}; CK_BBL true = TUE; CK_ATTIBUTE template[] = { }; {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_PIVATE, & true, sizeof(true)}, {CKA_ENCYPT, &true, sizeof(true)}, {CKA_DECYPT, &true, sizeof(true)}, {CKA_VALUE, value, sizeof(value)} -22-
2.4.4.3 SEED 비밀키객체(SEED secret key objects) 속성데이터타입내용처리 CKA_VALUE Byte Array 키값 SEED 비밀키객체템플릿 : CK_BJECT_CLASS class = CK_SECET_KEY; CK_KEY_TYPE keytype = CKK_SEED; CK_UTF8CHA label[] = A SEED secret key object ; CK_BYTE value[24] = {...}; CK_BBL true = TUE; CK_ATTIBUTE template[] = { }; {CKA_CLASS, &class, sizeof(class)}, {CKA_KEY_TYPE, &keytype, sizeof(keytype)}, {CKA_TKEN, &true, sizeof(true)}, {CKA_LABEL, label, sizeof(label)-1}, {CKA_PIVATE, & true, sizeof(true)}, {CKA_ENCYPT, &true, sizeof(true)}, {CKA_DECYPT, &true, sizeof(true)}, {CKA_VALUE, value, sizeof(value)} -23-
부록 2. 보안토큰 API(PKCS#11) 함수프로파일 API 함수정의내용처리 기본목적 (General Purpose) C_Initialize 보안토큰 API를초기화 C_Finalize C_GetInfo 보안토큰제보안토큰득 API와연관된다양한자원을해 API에대한일반적인정보를획 C_GetFunctionList 지원하는보안토큰 API 함수집합을획득 슬롯 & 토큰관리(Slot and Token anagement) C_GetSlotList 시스템에있는슬롯집합을획득 C_GetSlotInfo 특정슬롯에관한정보를획득 C_GetTokenInfo 특정토큰에관한정보를획득 C_WaitForSlotEvent 슬롯이벤트( 토큰추가, 제거) 발생에따른대기상태 C_GetechanismList 토큰이지원하는메커니즘집합을획득 C_GetechanismInfo 특정메커니즘에관한정보를획득 C_InitToken 토큰초기화 C_InitPIN 사용자 PIN 초기화 C_SetPIN 사용자 PIN 수정 세션관리 (Session anagement) C_penSession 응용시스템과토큰간의연결을생성 C_CloseSession 세션을종료 C_CloseAllSessions 특정토큰과연관된모든세션을종료 C_GetSessionInfo 세션에대한정보획득 C_GetperationState 세션의암호오퍼레이션상태획득 C_SetperationState 세션암호오퍼레이션상태수정 C_Login 토큰에로그인 C_Logout 토큰으로부터로그아웃 -24-
API 함수정의내용처리 객체관리 (bject management) C_Createbject 객체생성 C_Copybject 복사본객체생성 C_Destroybject 객체파기 C_GetbjectSize 객체사이즈획득 C_GetAttributeValue 객체속성획득 C_SetAttributeValue 객체속성수정 C_FindbjectInit 객체검색초기화 C_Findbjects 객체검색 C_FindbjectsFinal 객체검색종료 암호화 (Encryption) C_EncryptInit 암호화기능을초기화 C_Encrypt 단일부분에대한암호화수행 C_EncryptUpdate 다중부분에대한암호화수행 C_EncryptFinal 다중부분에대한암호화수행종료 복호화 (Encryption) C_DecryptInit 복호화기능초기화 C_Decrypt 단일암호화부분에대한복호화수행 C_DecryptUpdate 다중암호화부분에대한복호화수행 C_DecryptFinal 다중암호화부분에대한복호화수행종료 메시지압축 (essage Digesting) C_DigestInit 메시지압축수행초기화 C_Digest 단일부분데이터압축수행 C_DigestUpdate 다중부분에대한압축수행 C_DigestKey 키압축수행 C_DecryptFinal 다중부분에대한압축수행종료 -25-
API 함수정의내용처리 전자서명및 AC (Signing & ACing) C_SignInit 서명기능을초기화 C_Sign 단일부분서명을수행 C_SignUpdate 다중부분에대한서명수행 C_SignFinal 다중부분에대한서명수행종료 C_SignecoverInit 복원형서명기능초기화 - C_Signecover 복원형서명수행 - 전자서명및 AC 검증 C_VerifyInit 검증기능을초기화 C_Verify 단일부분서명에대한검증을수행 C_VerifyUpdate 다중부분에대한검증수행 C_VerifyFinal 다중부분에대한검증종료 C_VerifyecoverInit 복원형검증기능초기화 - C_Verifyecover 복원형검증기능수행 - Dual-purpose cryptographic C_DigestEncryptUpdate 압축및암호화수행 C_DecryptDigestUpdate 복호화및압축수행 C_SignEncryptUpdate 서명및암호화수행 C_DecryptVerifyUpdate 복호화및검증수행 키관리 (Key anagement) C_GenerateKey 비밀키혹은도메인파라미터생성 C_GenerateKeyPair 비대칭키쌍생성 C_WrapKey 키암호화 C_UnWrapKey 키복호화 C_DeriveKey 기본키로부터키호출 (Vendor-defined) - 렌덤넘버생성 (andom Number Generation) C_Seedandom seed 값추가 C_Generateandom 랜덤혹은의사랜덤을생성 Parallel 함수관리(Parallel function 관리) C_GetFunctionStatus Legacy 함수는항상 CK_FUNCTIN_NT_PAALLEL C_CancelFunction Legacy 함수는항상 CK_FUNCTIN_NT_PAALLEL 리턴함 리턴함 - - -26-
부록 3. 보안토큰 API(PKCS#11) 메카니즘프로파일 메카니즘정의내용처리 SA 메카니즘 CK_SA_PKCS CK_SA_PKCS_KEY_PAI_GEN CK_SA_PKCS_AEP CK_SHA1_SA_PKCS ECDSA 메카니즘 PKCS#1 Version1.5 에정의된SA 암호시 스템과블록형식에기반한메커니즘 PKCS#1에 정의된 SA키를 생성하는 메커니즘 PKCS#1 Version2.0 에정의된SA 암호시 스템과블록형식에기반한메커니즘 SHA-1 해쉬알고리즘에기반한전자서명 메커니즘 CK_ECDSA_PKCS_KEY_PAI_GEN 키를생성하는메커니즘 SHA-1 해쉬알고리즘에기반한전자서명 CK_SHA1_ECDSA_PKCS 메카니즘 ECDH 메카니즘 CK_ECDH1_DEIVE CK_ECDH1_CFACT_DEIVE CK_ECDH1_CFACT_DEIVE Block cipher 메커니즘 ANSI X9.63에기반한키유도메카니즘 ANSI X9.63 에기반한ECDH 키유도메카 니즘 ANSI X9.63 에기반한 Cofactor ECDH 키 유도메카니즘 CK_DES3_GEN 블록 Cipher 키생성메커니즘 CK_DES3_ECB CK_DES3_CBC CK_DES3_CBC_PAD CK_DES3_AC_GENEAL CK_DES3_AC ECB(Electronic codebook) 메커니즘 ( 암/ 복호화 ) CBC(Cipher-block chaining) 메커니즘( 암/ 복호화) CBC_PAD (PKCS Padding 이추가된 Cipher-block chaining) 메커니즘( 암/ 복호화 ) General-legnth ACing 메커니즘( 서명/ 검증 ) General ACing 메커니즘( 서명/ 검증) CK_SEED_GEN 블록 Cipher 키생성메커니즘 CK_SEED_ECB CK_SEED_CBC CK_SEED_CBC_PAD ECB(Electronic codebook) 메커니즘 ( 암/ 복호화 ) CBC(Cipher-block chaining) 메커니즘 ( 암복호화 / ) CBC_PAD (PKCS Padding 이추가된 Cipher-block chaining) 메커니즘( 암/ 복호화 ) -27-
메커니즘정의내용처리 SHA-1 메커니즘 CK_SHA_1 FIPS PUB 180-1에정의된해쉬메커니즘 CK_SHA_1_HAC_GENEAL General-length SHA-1-HAC 메커니즘 CK_SHA_1_HAC SHA-1-HAC 메커니즘 CK_SHA_1_KEY_DEIVATIN SHA-1 Key 유도메커니즘 PKCS#5 and PKCS#5-style password-based encryption 메커니즘 CK_PKCS5_PBKD2 PKCS#5 에정의된패스워드기반암호화키생성메커니즘 PKCS#12 password-based encryption/authentication 메커니즘 CK_PBE_SHA1_DES3_EDE_CBC 3DES를이용한패스워드기반암호화메커니즘 CK_PBE_SHA1_SEED_EDE_CBC SEED를이용한패스워드기반암호화메커니즘 CK_PBA_SHA1_WITH_SHA1_HAC Salt와패스워드로부터 160bit secret 키를생성하기위한메커니즘 -28-
부록 4. 환경파일을이용한보안토큰구동프로그램위치정보관리 o 위치정보관리 환경파일은특정이름으로다음의디렉토리에위치하여야함 - 환경파일명 : npki_pkcs11.cnf - 환경파일위치 : %SYSTE%\npki_pkcs11.cnf (Windows 계열) : 사용자계정/.npki_pkcs11.cnf (Unix, Linux 계열) : 사용자계정/Library/Preferences /.npki_pkcs11.cnf ( 메킨토시계열 ) o 환경파일은다음의내용을포함하여야함 - [PKCS#11.Driver] 섹션으로시작하며, 하나의키(Driver) 로구성. Driver : 하위섹션명나열 ( 하나이상의하위섹션명은공백문자로구분) 하위섹션명은보안토큰제품정보(ID) 를사용함 - [ 하위섹션명] 은네개의키(Info, Name, Programs, SignatureToken) 로구성. Info : 구동프로그램정보와구동프로그램버전정보를나열( 두정보는 : 로구분) 단, 바이오보안토큰의경우구동프로그램정보앞에 BI_ 를연접하여사용 Name : 보안토큰 API 관련구동프로그램위치정보및구동프로그램명 Programs : 기타보안토큰관련구동프로그램위치정보및구동프로그램명을 나열( 하나이상의구동프로그램은, 로구분) SignatureToken : 구동프로그램검증정보의위치정보및파일명 공인인증체계기술규격에적합한보안토큰에대해서만보안토큰구동프로그램검증정보가생성됨 환경파일(npki_pkcs11.cnf) 예제 [PKCS#11.Driver] // 섹션 Driver=Vid_0000&Pid_0001 Vid_0001&Pid_0001 // 하위섹션명 [Vid_0000&Pid_0001 ]// 하위섹션명 Info=KISA Token:0.0.0.1 //Info 키 Name=C:\Program Files\pkcs11.dll //Name 키 Programs=C:\Program Files\cert.dll,C:\Program Files\device.sys [Vid_0001&Pid_0001] Info=KISA Token2:0.0.0.2 Name=C:\Windows\npki_pkcs11.dll Programs=C:\Program Files\cert1.dll,C:\Program Files\device1.sys SignatureToken=C:\Program Files\Vid_0001&Pid_0001.der -29-
[Vid_0002&Pid_0001] Info=BI_KISA Token3:0.0.0.3 Name=C:\Program Files\npki2_pkcs11.dll Programs=C:\Program Files\cert2.dll,C:\Program Files\device2.sys SignatureToken=C:\Program Files\Vid_0002&Pid_0001.der -30-
부록 5. 보안토큰구동프로그램검증정보처리 보안토큰구동프로그램검증정보확인 o 보안토큰구동프로그램검증정보( 이하검증정보) 는시스템에설치된구동프로그램의 무결성및구현적합성을확인할수있는정보로써, SignatureValue 의 DE 인코딩 값으로구성된다. o 가입자소프트웨어는 [ 부록 4.] 환경파일위치정보를통해검증정보파일의위치를 확인하고, 해당검증정보의해쉬값(hashValue) 및전자서명값(signature) 검증을통해 구동프로그램의무결성및구현적합성을확인할수있다. o 특히, 전자서명값검증은사용자 PC에설치된최상위인증기관인증서또는 정보통신망을통해안전하게획득한최상위인증기관인증서를통해검증하여야한다. 보안토큰구동프로그램검증정보 ASN.1 ClientHS DEFINITINS :: BEGIN IPTS -- Imports from FC 3280 [PFILE], Appendix A.1 AlgorithmIdentifier, Certificate, CertificateList, CertificateSerialNumber, Name F PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0) pkix1-explicit(18) }; SignatureToken :: SEQUENCE { } drivername PrintableString, -- 보안토큰구동프로그램 DLL 이름 hashid -- hashvalue 해쉬알고리즘 AlgorithmIdentifier, CTET STING -- 보안토큰구동프로그램 DLL 에대한해쉬값으로, 가입자소프트웨어는 -- 시스템에설치된 drivername 의DLL 을입력값으로해쉬하여 hashvalue와 -- 비교함으로서사용자PC에설치된무결성을검증 SignerAndSerialNumber ::= SEQUENCE { -31-
issuer Name, serialnumber CertificateSerialNumber } SignatureValue :: SEQUENCE { } END tobesigned SEQUENCE F SignautreToken, -- 보안토큰구동프로그램 DLL이여러 DLL로구성되어있을경우 -- 각 DLL에대한무결성을보증하기위해 SEQUENCE F로구성 signaturealgorithm -- 전자서명알고리즘의 ID AlgorithmIdentifier, signerandserialnumber SignerAndSerialNumber, -- 전자서명생성자의 (KISA 3280 루트인증서) signature CTET STING -- tobesigned 에대한전자서명값 -32-
부록 6. 보안토큰 API(PKCS#11) 반환값프로파일 종류반환값내용처리 일반 세션 CK_K 보안토큰이성공적으로기능을수행 CK_GENEAL_E CK_HST_EY CK_FUNCTIN_FAILED 보안토큰에어떠한복구불가능한에러가발생하였음을 의미함. CK_HST_EY, CK_FUNCTIN _FAILED 와 함께발생하는경우, CK_GENEAL_ E 가우선반환됨보안토큰구동프로그램을구동하는컴퓨터에메모리가 부족할경우발생보안토큰구동프로그램특정함수의기능이수행될수 없을경우발생. 해당함수가세션을사용하였다면 CK_SESSIN_INF 구조체의 uldeviceerror 항목에서오류발생 원인을찾을수있음함수가호출될당시해당세션핸들이유효하지않을경우 CK_SESSIN_HANDLE 발생하는오류임. CK_DEVICE_EVED, _INVALID CK_SESSIN_CLSED 와함께발생하는경우, CK_SESSIN_HANDLE_INVALID가우선반환됨 CK_DEVICE_EVED 보안토큰이함수실행도중제거될경우발생 CK_SESSIN_CLSED 세션이함수도중종료된경우발생보안토큰에메모리가부족할경우발생. CK_DEVICE_EY CK_DEVICE_E, CK_DEVICE_EVED와 보안토큰 CK_DEVICE_E 함께발생하는경우, CK_DEVICE_ EY가우선반환됨보안토큰또는슬롯에어떠한문제가발생할경우발생 CK_DEVICE_EVED 보안토큰이함수실행도중제거될경우발생 CK_TKEN_NT_PESENT 보안토큰이함수실행시점에존재하지않을경우발생 보안토큰구동프로그램이가입자 S/W 와함께기능을상호순차적순차수행 CK_CANCEL 으로수행할때, 가입자 S/W가 CK_CANCEL를반환하면보안토큰구동프로그램은 CK_FUNCTIN_CANCEL 을반환한다. CK_UTEX_BAD utex 를처리하는함수가잘못된 mutex 객체를전달받을경우발생 utex utex 잠김을해제하고자하는함수가해당 mutex가 CK_UTEX_NT_LCKED 잠겨있지않음을발견할경우발생 보안토큰구동프로그램으로전달되는함수인자가잘못돼 CK_AGUENTS_BAD 있을경우발생 CK_ATTIBUTE_EAD_NLY 가입자가변경할수없는속성의값을변경하는경우발생 CK_ATTIBUTE_TYPE 가입자 S/W가템플릿에유효하지않는속성타입을명입출력 _INVALID 시하여함수를호출하는발생 CK_BUFFE_T_SALL 가입자의버퍼메모리가작아서보안토큰구동프로그램결과를전달할수없는경우발생 C_Initialize 함수에만해당하는오류로써, 가입자 S/W 가안전한 CK_CANT_LCK 기능수행을위해 thread-safety Locking 을요청하였는데, 보안 토큰구동프로그램이해당기능을제공하지않을경우발생 -33-
종류반환값내용처리 CK_CYPTKI_ALEAD C_Initialize 함수에만해당하는오류로써, 보안토큰구동프로 Y_INITIALIZED 그램이이미초기화되어있음을의미 CK_CYPTKI_NT_INI C_Initialize 및C_GetFunctionList 이외의함수에해당하는오류 TIALIZED CK_DATA_INVALID 로써, 보안토큰구동프로그램이초기화되지않는상황임을의미보안토큰구동프로그램에입력되는입력값이유효하지않을경우 발생.CK_DATA_LEN_ANGE 보다낮은우선순위를가짐. 단, 본반환값은 CK_SA_X_509 메커니즘에만해당보안토큰구동프로그램에입력되는입력값의길이가유효하지 CK_DATA_LEN_ANGE 않을경우발생 CK_DAIN_PAAS 유효하지않거나지원되지않는도메인파라미터가보안토큰 _INVLALID 구동프로그램에입력되는경우발생 CK_ENCYPTED_DATA 복호화함수에입력되는암호문이유효하지않을경우발생. _INVALID CK_ENCYPTED_DATA_LEN_ANGE 보다낮은우선순위를가짐 CK_ENCYPTED_DATA 복호화함수에입력되는암호문의길이가유효하지않을 _LEN_ANGE 경우발생. 보안토큰구동프로그램이가입자 S/W 와함께기능을상호순차적 으로수행할때, 가입자 S/W가 CK_CANCEL 를반환하면보안 CK_FUNCTIN_CANCELED 토큰구동프로그램은 CK_FUNCTIN_CANCEL 을반환한다. 보호된경로를통한 PIN 입력수행도중발생할수있음 CK_FUNCTIN_NT_P 지정된세션에 parallel 로시행되는함수가없음을알림, 입출력 AALLEL C_GetFunctionStatus 와C_CancelFunction. 에의해반환됨 CK_FUNCTIN_NT_ 해당함수가구동프로그램에서지원되지않을경우발생 SUPPTED CK_INFATIN_SE 정보가민감하여제공되어질수없음을나타냄 NSITIVE CK_KEY_CHANGED 기존에저장된키가변경되었음을알림 CK_KEY_FUNCTIN_NT 허가되지않은키의속성을사용하고자했을때나타나는메시지 _PEITTED CK_KEY_HANDLE_INVALID 키를위한핸들이유효하지않을때발생 C_DigestKey 함수에만해당하는메시지로써, 지정된키의 CK_KEY_INDIGESTIBLE 값이특정이유로인해받아질수없을때발생 CK_KEY_NEEDED C_SetperationState 함수에만해당하는메시지로써, 하나이상의키가있어야하는데없기때문에발생 CK_KEY_NT_NEEDED 해당사항이없는키가추가적으로제공되었을경우발생 CKA_UNEXTACTABLE 속성이 TUE 로설정되어있지않더 CK_KEY_NT_WAPPABLE 라도, 보안토큰구동프로그램은해당키를 Wrap할수없음 CK_KEY_SIZE_ANGE 요청된처리과정이원칙상문제가없어도키사이즈가범위밖일경우발생 CK_KEY_TYPE_INCNS 지정된키가해당메커니즘의키가아닐경우발생 ISTENT CKA_UNEXTACTABLE 속성이 TUE로설정되어있기 CK_KEY_UNEXTACTABLE 때문에, 해당개인키또는비밀키는 Wrap 될수없음 -34-
종류반환값내용처리 CK_ECHANIS_INVALID 지정되지않거나지원되지않는메커니즘사용시발생 CK_ECHANIS_PAA 유효하지않는메커니즘매개변수가사용될경우발생 _INVALID C_Initialize 가새로운 thread 를만들수없는상황, CK_NEED_T_CEATE library 가제역할을하지못해새로운 thread 를만들수 _THEADS 없을때발생(C_Initialize 에만해당하는메시지) C_GetSlotEvent 함수에만해당하는메시지로써, CK_N_EVENT non-blocking 모드에서 C_GetSlotEvent 호출되고새로운 슬롯이벤트가없을때발생 CK_BJECT_HANDLE_ INVALID 지정된 object 핸들이유효하지않을때발생 이미처리과정이진행되고있어지정된처리과정을진행 CK_PEATIN_ACTIVE 시키지못하게될때발생 CK_PEATIN_NT_IN 해당세션에해당하는적절한타입의액티브한실행이 ITIALIZED CK_PIN_EXPIED 일어나지않을경우발생 지정된 PIN이만료되고요청된처리가 PIN 값이바뀔 때까지실행되지않음 CK_PIN_INCECT 저장된 PIN과일치하지않을경우발생 CK_PIN_INVALID 지정된 PIN에유효하지않는문자가존재할경우발생 CK_PIN_LEN_ANGE 지정된 PIN이너무길거나너무짧을경우발생 CK_PIN_LCKED CK_AND_N_NG 지정된 PIN 이 lock 되어있다. 보안토큰이인증과정중 더이상의과정을허용치않을때발생 지정된토큰이랜덤변수생성기가없을때발생. CK_AND_SEED_NT_SUPPTED 보다높은우 선순위를가짐 보안토큰의랜덤변수생성기가응용프로그램으로부터 CK_AND_SEED_NT seeding 을받지않고자할때발생. 본메시지는 _SUPPTED C_Seedandom 함수에의해서만이용. 제공된저장된암호화처리상태가유효하지않아지정된 CK_SAVED_STATE_INVALID, 세션에저장될수없을경우발생 CK_SESSIN_CUNT 세션을열려는시도가실패할경우발생.C_penSession 함수에서만이용. CK_SESSIN_EXISTS 토큰이있는세션이이미열려있음 CK_SESSIN_PAALLEL _NT_SUPPTED CK_SESSIN_EAD_NLY CK_SESSIN_EAD_ NLY_EXISTS parallel 함수에서만이용. 세션을지원하지않음. C_penSession 읽기만허용되는세션임을설명. CK_TKEN_WITE_PTECTED 보다낲은우선순위를가짐 읽기세션이이미존재하여 S가 logged in 되지않음 -35-
종류반환값내용처리 CK_SESSIN_EAD_W 읽기/ 쓰기세션이이미존재, 읽기세션은열리지않음 ITE_S_EXISTS CK_SIGNATUE_LEN_ 전자서명길이가유효하지않을경우발생. ANGE CK_SIGNATUE_INVALID 보다우선순위를가짐 CK_SIGNATUE_INVALID 전자서명값이유효하지않을경우발생 CK_SLT_ID_INVALID 지정된슬롯아이디가유효하지않을경우발생 CK_STATE_UNSAVEABLE 단순히토큰이현상태를저장하지못할경우발생. CK_PEATIN_NT_INITIALIZED 보다낮은우선 순위를가짐 CK_TEPLATE_INC object 를만들기위해지정된템플릿이미완성되고필요 PLETE 한요소들이부족한상황일경우발생 CK_TEPLATE_INCN object 를만들기위해지정된템플릿에충돌요소가존재 SISTENT 할경우발생 CK_TKEN_NT_EC 슬롯에있는토큰을인식하지못할경우발생 GNIZED 보안토큰에쓰기보호가되어있어업무를수행하지못할 CK_TKEN_WITE_P 경우발생. CK_SESSIN_EAD_NLY 보다높은우선순위 TECTED 를가짐 CK_UNWAPPING_KEY 다른키를풀(Unwrap) 려고사용되는키핸들이유효하지않을 _HANDLE_INVALID 경우발생 CK_UNWAPPING_KEY 제공된키의키사이즈가허용범위를넘어선경우발생 _SIZE_ANGE CK_UNWAPPING_KEY_ 메카니즘이맞지않아키를풀수없을경우발생 TYPE_INCNSISTENT CK_USE_ALEADY_ 이미로그인한상태를알림 LGGED_IN CK_USE_ANTHE_AL 다른사용자가로그인하여로그인이안됨 EADY_LGGED_IN CK_USE_NT_LGGED_IN 로그인을하지않아작업이수행되지않을경우발생 CK_USE_PIN_NT_INI 사용자의핀이초기화되지않을경우발생 TIALIZED CK_USE_T_ANY_ 보안토큰이수용할수있는이상의동시접속이이루어 TYPES 질때발생 CK_USE_TYPE_INVALID CK_USE_TYPE 에유효하지않는값이입력되었을경우발생 CK_WAPPED_KEY_IN 제공된 wrapped key가유효하지않을경우발생 VALID CK_WAPPED_KEY_LEN wrapped key 의길이가유효하지않을경우발생. _ANGE CK_WAPPED_KEY_INVALID 보다낮은우선순위를가짐 CK_WAPPING_KEY_H 다른키를 wrap 하기위한키핸들이유효하지않을경우발생 ANDLE_INVALID CK_WAPPING_KEY_SIZE 키길이로인해wrapping 에러난경우발생 _ANGE CK_WAPPING_KEY_ 지정되지않은메카니즘으로한경우발생 TYPE_INCNSISTENT wrap -36-
종류반환값내용처리 CK_BI_FINGE_AUT H_NEEDED 지문인증없이카드사용 CK_BI_SENS_E 지문센서 H/W 에러 CK_BI_N_FINGE_I 지문템플릿없음 NF 지문정보가등록되어있지않아오류발생 바이오 CK_BI_SENS_TIE 지문센서타임아웃보안 UT 토큰 CK_BI_FINGE_AUT 관리 H_FAILED 지문인증실패 CK_BI_N_FINGE_ AUTH_ID 지문인증 ID없음 CK_BI_FINGE_ALG _FAILED 지문알고리즘비정상종료 CK_BI_INVALID_ USE 사용자등록정보불일치 바이오보안토큰 API 반환값헤더파일 : #define CK_BI_FINGE_AUTH_NEEDED #define CK_BI_SENS_E #define CK_BI_N_FINGE_INF #define CK_BI_SENS_TIEUT #define CK_BI_FINGE_AUTH_FAILED #define CK_BI_N_FINGE_AUTH_ID #define CK_BI_FINGE_ALG_FAILED #define CK_BI_INVALID_USE 0x89000001 0x89000002 0x89000003 0x89000004 0x89000005 0x89000006 0x89000007 0x89000008 바이오보안토큰관리와관련된반환값처리요구사항 '' 은바이오보안토큰구동프로 그램의경우 '' 으로처리한다. -37-
부록 7. 규격연혁 버전 제개정일 제개정내역 v1.00 2003년 9월 암호토큰을위한 PKCS#11 프로파일규격 으로제정 v1.20 2007년 3월 v1.50 2007년 8월 TTA 정보통신용어사전의토큰표준용어를준용하기위해규격내 암호토큰 을 보안토큰 으로용어변경 보안토큰기반공인인증서이용기술규격 으로규격명변경 본규격이보안토큰관련표준API로이용될수있도록 7.2.1 및 7.2.3에서개인키외부유출관련규정삭제등 공인인증서가입자 S/W가보안토큰구동프로그램을이용하여객체를생성하거나처리할경우, 해당객체속성템플릿이이용되도록 [ 부록 1.] 준용규정신설 공인인증서가입자 S/W가보안토큰에서발생하는비정상적인오류상황에대해적절히대처할수있도록, 구동프로그램이지원해야하는반환값프로파일준용규정신설 v1.70 2007년 11월 v1.80 2008년 10월 v1.90 2009년 9월 v2.00 2010년 7월 [ 부록4] 환경파일을이용한보안토큰구동프로그램위치정보관리의환경파일구성내용변경 보안토큰보안기능강화를위해암호프로세서탐재및차분전력분석기법등공격에대비할수있는기능추가 공인인증서암호체계고도화에따른알고리즘변경사항반영 바이오보안토큰정의 바이오보안토큰등록정보및사용자등록정보를위한데이터객체추가 바이오보안토큰 API 반환값프로파일추가 -38-
규격작성공헌자 본규격의제개정을위해아래와같이많은분들이공헌을하였습니다. 구분 성명 소속사 규격제안 전자인증팀 한국인터넷진흥원 규격초안제출 전자인증팀 한국인터넷진흥원 강필용 한국인터넷진흥원 이석래 한국인터넷진흥원 백종현 한국인터넷진흥원 박상환 한국인터넷진흥원 이원철 한국인터넷진흥원 박윤식 한국인터넷진흥원 김영준 한국인터넷진흥원 박순태 한국인터넷진흥원 김재중 한국정보인증 박지연 한국정보인증 박선우 한국정보인증 장재환 한국정보인증 김근옥 한국정보인증 강효관 코스콤 임지영 코스콤 규격검토 이성국 코스콤 이성진 코스콤 장원석 금융결제원 이만호 금융결제원 오중효 금융결제원 이한욱 금융결제원 정성아 금융결제원 최영준 금융결제원 박명수 한국정보사회진흥원 박성익 한국정보사회진흥원 김재홍 한국정보사회진흥원 최현호 한국정보사회진흥원 문종환 한국전자인증 김형욱 한국전자인증 이성철 한국무역정보통신 국상진 한국무역정보통신 -39-
-40- 구분성명소속사강광석 KEBT 김국진 KEBT 박민수 KEBT 이용호 Nets 김월영시스템 NLS 조윤호시스템 NLS 이종서시스템 NLS 박경봉 SCT 권유미드림시큐리티강명호비티웍스김종협비티웍스정재웅비티웍스김기영소프트포럼강효관소프트포럼정희원스마트플러스박길동시큐리티테크놀로지이상곤씨큐어에이티박형선씨큐어에이티박찬석위노블최규태위노블황남진위노블신동규유넷시스템박준석유비닉스김덕엽이니텍이준형이니텍전병권이니텍김남희이니텍한성기인터넷시큐리티남경원인터넷시큐리티김세준장미디어황한웅케이사인정성균펜타시큐리티임정훈하이스마텍김홍석한국마이크로소프트주충호한울로보틱스규격안편집박상환한국인터넷진흥원