PKCS#11 API-강좌3

PKCS#11 API-강좌3

PKCS11_SampleCode

KeyperPlus 제품과 함께 제공되는 CD에 Sample Code로 PKCS11_SampleCode.cpp 라는 C++ 언어로된 Example Source가 들어 있습니다. 거의 대부분의 API 를 Call하는 다양한 예제를 포함하고 있습니다만 내용이 많기에, 그 중에서 프로그램을 개발하는 데 뼈대가 되는 핵심적인 내용만을 뽑아서 설명하고자 합니다. 이를 위해 Symmetric Key인 AES Key를 HSM장비안에서 생성하고, 생성된 AES Key를 가지고 사용자 Data를 Encryption/Decryption 하는 예제를 가지고 설명하고자 합니다.

제공되는 CD에는 Linux/UNIX(Solaris) 및 Windows 환경에서 수행(Compile 및 Link)되도록 관련 makefile 및 Project-file이 있으므로, 사용하는 OS Platform에 맞게 사용하면 되며, 이 강좌에서는 Source Program에 대해서만 설명하고자 합니다.

PKCS11_SampleCode.cpp

HSM 장비인 Keyperlus를 Call하는 메인 프로그램입니다. HSM 장비의 User PIN 번호는 1234 임을 가정하고 있습니다. Slot도 첫 번째 Slot을 사용하는 것으로 가정하고 있습니다.

PKCS11_SampleCode.h

PKCS11_SampleCode 라는 Class가 정의되어 있고, 또한 Class내에서 사용되는 member 함수들이 정의되어 있습니다. 그냥 참조만 하면 됩니다.

Cryptoki.cpp

CCryptoki Class 의 생성함수가 들어 있습니다. 생성함수에는 동적 Library를 Load 하는 코드가 들어 있습니다. 또한 member 함수가 들어 있습니다. member 함수는, Cryptoki 에서 제공하는 API와 1대1로 매칭되는 함수이며, 기능은 함수 포인터를 얻어 실제 API에게 call하는 것입니다. 그냥 참조만 하면 됩니다

Cryptoki.h

CCryptoki라는 Class가 정의되어 있고, 또한 Class내에서 사용되는 member 함수들이 정의되어 있습니다. 그냥 참조만 하면 됩니다

AES Key Generation and Encryption/Decryption 예제

아래에 기술된 Source Code를 따라가기만 해도 이해가 되리라 생각합니다. HSM 장비안에 AES Key를 생성한 후에 Encryption/Decryption 기능을 수행하고, 그리고 HSM 장비에 저장되어 있는 Key를 사용하여 Encryption/Decryption 기능을 수행합니다. 프로그램에서 사용하는 Key 정보는 HSM안에 저장된 Key를 찾아가는 Handle 정보입니다.

HSM 장비에 저장된 Key는 Key Label(Key Label은 Key 생성시 Parameter로 부여함)을 가지고 찾습니다. Encryption/Decryption 암호 연산은 HSM 장비안에서 수행됩니다. 예제 프로그램은 128 bit AES key를 생성하며, 암호 연산 Mode는 CBC 모드를 사용하고 있습니다.. AES Key 생성시 Key에 대한 Policy(암호 키로 할 수 있는 기능 정의)를 정의하고 있음을 볼 수 있습니다.

테스트용 Data로 64-byte data를 HSM장비가 제공하는 "random number generator" 기능을 사용하여 생성하고 있습니다.

예제 프로그램 수행 결과 값

위 프로그램을 수행한 결과 값은 아래와 같이 나옵니다. 즉 첫 번째 Encryption/Decryption 결과 값과 두 번째 Encryption/Decryption 결과 값이 동일하므로, HSM장비안에 저장된 Key는 Key Label만 알면 언제든지 사용할 수 있다는 것을 나타냅니다.

Last updated