Build Status
Coverity Scan Build Status
openCryptoki
패키지 버전 3.28
릴리스별 상세 정보는 [ChangeLog]를 참조하십시오.
개요 (OVERVIEW)
openCryptoki 버전 3.28은 PKCS#11 명세 버전 3.0을 구현하며, 버전 3.1 및 3.2도 부분적으로 지원합니다.
이 패키지에는 CCA, ICA, TPM, SWToken, ICSF, EP11 등 여러 암호화 토큰이 포함되어 있습니다.
openCryptoki에 대한 더 심층적인 개요는 매뉴얼 openCryptoki - PKCS #11의 오픈 소스 구현을 참조하십시오.
참고: TPM 토큰은 버전 1.2만 지원하기 때문에 사용이 중단(deprecated)되었습니다. 따라서 TPM 버전 2.0과는 작동하지 않습니다. 향후 openCryptoki 릴리스 또는 버전에서 TPM 토큰을 제거할 계획입니다.
AIX는 CCA와 소프트웨어 토큰만 지원하며, 이 두 가지가 기본 빌드 구성으로 활성화됩니다. 다른 토큰들은 지원되지 않으며, configure 유틸리티를 통해서도 강제 활성화할 수 없습니다.
요구 사항 (REQUIREMENTS)
공통 (Common)
openCryptoki를 빌드하려면 다음 유틸리티가 필요합니다.
- flex
- bison
- make
- autoconf
- automake
- pkg-config
- libtool
- m4
- openldap-devel
- openssl-devel
- libcap-devel (Linux 전용)
- systemd-devel (Linux 전용)
이 라이브러리들은 일반적으로 사용 중인 플랫폼의 패키지 관리 유틸리티를 통해 제공됩니다. AIX에서는 AIX Toolbox 리포지토리에서 설치해야 합니다.
토큰 (Tokens)
-
IBM ICA - IBM zSeries에서 ICA 하드웨어 암호에 접근하려면 libica 라이브러리 버전 3.3.0 이상이 필요합니다.
-
IBM CCA - IBM Z용으로 버전 7.1 이상을 가진 CCA 호스트 라이브러리와 (또는 그 이상인) IBM Crypto CEX3C 카드가 필요합니다. AIX, x64용 Linux, 그리고 Power용 Linux에서는 IBM CEX7S (4769) 암호 카드만 지원됩니다. 모든 플랫폼에서 이 토큰은 일반적으로 openldap 패키지의 일부인 lber 라이브러리가 필요합니다.
-
TPM (사용 중단됨(deprecated)) - TPM, TPM 도구 및 TCG 소프트웨어 스택이 필요합니다.
TPM 버전 1.2만 지원합니다.
-
SWToken - 이 소프트웨어 토큰은 OpenSSL 버전 1.1.1 이상을 사용합니다. 이 토큰에는 일반적으로 openldap의 일부인 lber 라이브러리가 필요합니다.
-
ICSF - 통합 암호화 서비스 시설(Integrated Cryptographic Service Facility, ICSF) 토큰은 openldap 및 openldap 클라이언트 소프트웨어 버전 2.4.23 이상을 요구합니다. 또한 이 토큰을 빌드하려면 Lex와 Yacc도 필요합니다.
-
EP11 - EP11 토큰은 IBM Crypto Express 어댑터(Crypto Express 4S 어댑터부터 시작)를 사용하며, 여기에 엔터프라이즈 PKCS#11 (EP11) 펌웨어가 구성된 토큰입니다.
빌드 프로세스 (BUILD PROCESS)
참고: AIX에서 opencryptoki를 빌드하는 것은 AIX 7.2 이상에서만 지원됩니다. 이전 버전의 AIX에서는 누락된 API 때문에 빌드가 실패할 것입니다.
이 패키지를 컴파일하는 가장 간단한 방법은 소스 코드 메인 디렉터리로 이동하여 다음을 수행하는 것입니다:
-
bootstrap.sh 스크립트를 입력하여 실행합니다:
참고: 이 패키지는 크로스 컴파일러 빌드를 지원하기 위해 autoconf 아카이브의 AX_PROG_CC_FOR_BUILD autoconf 매크로를 사용했습니다. 시스템에서 이 매크로가 제공되지 않는 경우, autoconf-archive 패키지를 설치하거나 매크로를 다운로드하여 m4 디렉터리에 배치해야 할 수 있습니다. 최신 버전의 ax_prog_cc_for_build.m4 링크는 여기를 참조하십시오.
-
다음을 입력하여 소스 코드를 구성합니다:
만약 패키지를 홈 디렉터리나 /usr/local이 아닌 다른 위치에 설치할 계획이라면, configure에 플래그 --prefix=PATH를 추가하십시오. 예를 들어, 홈 디렉터리가 /home/luser인 경우 다음을 호출하여 해당 위치에 설치되도록 패키지를 구성할 수 있습니다:
$ ./configure --prefix=/home/luser
표준 경로에 stdll 헤더 및 라이브러리가 없는 경우, 해당 파일의 경로를 구성(configure) 스크립트에 전달해야 합니다.
참고: AIX에서 컴파일할 때는, openldap 라이브러리 및 헤더 파일을 올바르게 찾을 수 있도록 CFLAGS와 LDFLAGS를 정확한 경로로 설정해야 합니다.
AIX Toolbox의 openldap-devel 패키지를 사용하는 경우, ./configure 호출 전 또는 함께 CFLAGS와 LDFLAGS를 각각 -I/opt/freeware/include 및 -L/opt/freeware/lib로 설정해야 합니다. 예를 들어,
$ CPPFLAGS="-I/path/include" LDFLAGS="-L/path/lib" ./configure
다양한 옵션 정보는 ./configure --help를 참조하십시오. 기본 동작은 전제 조건이 충족된 모든 토큰을 빌드하는 것입니다. ICA 및 EP11 토큰은 해당 전제 조건(libica, asm/pkey.h)이 일반적으로 존재하는 유일한 플랫폼인 s390x에서만 자동으로 활성화됩니다. 필요한 헤더와 라이브러리가 사용 가능한 경우, 다른 플랫폼에서는 --enable-icatok / --enable-ep11tok을 사용하여 명시적으로 요청할 수 있습니다. AIX에서는 CCA 및 소프트웨어 토큰만 빌드할 수 있습니다. 기타 토큰은 적절한 라이브러리가 사용 가능하고 해당 토큰이 컴파일하는 플랫폼에서 지원되는 경우, 상응하는 --enable-<tok> 구성 옵션을 사용하여 활성화할 수 있습니다.
일반적인 구성 옵션:
| 옵션 | 기본값 | 설명 |
|---|
--enable-debug | no | 디버그 빌드 활성화 (-g3 -O0, DEBUG 정의) |
--enable-sanitizer | no | AddressSanitizer / UBSan 활성화 |
--enable-testcases | no | 테스트 스위트 빌드 |
--enable-daemon | yes | pkcsslotd 데몬 빌드 |
--enable-library | yes | libopencryptoki 빌드 |
--enable-icatok | auto | ICA 토큰 빌드 (libica 필요) |
--enable-ccatok | yes | CCA 토큰 빌드 |
--enable-swtok | yes | 소프트웨어 토큰 빌드 |
--enable-ep11tok | auto | EP11 토큰 빌드 (libica + pkey 필요) |
--enable-tpmtok | auto | TPM 토큰 빌드 (사용 중단 권장; TrouSerS 필요) |
--enable-icsftok | auto | ICSF 토큰 빌드 (OpenLDAP 필요) |
--enable-p11sak | yes | p11sak 도구 빌드 |
--enable-p11kmip | yes | p11kmip 도구 빌드 |
--enable-pkcsstats | yes | pkcsstats 도구 빌드 |
--enable-pkcscca | yes | pkcscca 도구 빌드 |
--enable-pkcshsm_mk_change | yes | pkcshsm_mk_change 도구 빌드 |
--enable-pkcstok_migrate | yes | pkcstok_migrate 도구 빌드 |
--enable-pkcstok_admin | yes | pkcstok_admin 도구 빌드 |
--enable-pkcsep11_migrate | auto | pkcsep11_migrate 빌드 (EP11 토큰 필요) |
--enable-pkcsep11_session | auto | pkcsep11_session 빌드 (EP11 토큰 필요) |
--enable-md2 | no | MD2 지원 활성화 |
--with-systemd[=DIR] | yes | systemd 유닛 파일 설치 (init-d 사용 시 --without-systemd 사용) |
--with-openssl[=DIR] | auto | OpenSSL 개발 파일 위치 |
--with-libica[=DIR] | auto | libica 개발 파일 위치 |
--with-tss[=DIR] | auto | TrouSerS 개발 파일 위치 |
--with-pkcsslotd-user=USER | pkcsslotd | pkcsslotd가 실행될 사용자 |
--with-pkcs-group=GROUP | pkcs11 | openCryptoki 애플리케이션이 속해야 하는 그룹 |
| --with-max-token-objects=N | 2048 | 지원되는 토큰 객체의 최대 개수 |
실행하는 동안 configure는 어떤 기능을 확인하고 있는지 알려주는 메시지를 출력합니다.
참고: AIX 환경에서 make distcheck를 실행하려면, 환경 변수 DISTCHECK_CONFIGURE_FLAGS에 적절한 CFLAGS 및 CXXFLAGS 값을 포함하도록 설정해야 합니다.
- 다음 명령어를 입력하여 패키지를 컴파일합니다:
참고: make 호출 시 prefix=/foo/bar, libdir=/foo/bar를 지정하지 마십시오. 대신 configure에서 지정해야 합니다. make로 지정하는 것은 openCryptoki 패키지에서 지원하지 않으며 예상치 못한 결과를 초래할 수 있습니다!
- openCryptoki는 기본적으로
pkcs11 그룹에 속한 모든 사람이 사용할 수 있도록 설정됩니다. 설치하기 전에 루트(root)로 다음 명령어를 입력하여 pkcs11 그룹을 추가하십시오:
또한 필요한 사용자를 pkcs11 그룹에 추가하십시오 (루트(root)는 pkcs11 그룹에 속할 필요가 없습니다):
- 프로그램 및 모든 데이터 파일과 문서를 설치하려면
make install(루트(root)로 실행)을 입력하십시오. 설치 중 다음 파일들이 다음 디렉토리로 이동합니다:
${prefix}/sbin/p11kmip
${prefix}/sbin/p11sak
${prefix}/sbin/pkcscca
...
선택적으로 빌드될 수 있는 토큰 라이브러리는 다음 위치에 저장됩니다:
${prefix}/${libdir}/opencryptoki/stdll/libpkcs11_cca.so
${prefix}/${libdir}/opencryptoki/stdll/libpkcs11_cca.so.0
${prefix}/${libdir}/opencryptoki/stdll/libpkcs11_cca.so.0.0.0
...
여기서 prefix는 /usr/local이거나 --prefix 플래그에서 지정한 경로입니다. libdir은 라이브러리 디렉토리의 이름이며, 32비트 라이브러리의 경우 일반적으로 lib이고 64비트 라이브러리의 경우 일반적으로 lib64입니다.
하위 호환성(backwards compatibility)을 유지하기 위해 몇 가지 추가적인 심볼릭 링크(symlinks)가 생성됩니다.
(참고: 이들은 더 이상 사용되지 않는(deprecated) 기능이며, 애플리케이션은 라이브러리 및 실행 파일에 대해 LSB를 준수하는 이름과 위치를 사용하도록 마이그레이션해야 합니다):
${prefix}/${libdir}/opencryptoki/PKCS11_API.so
- Symlink to ${prefix}/${libdir}/opencryptoki/libopencryptoki.so
...
이 디렉토리들 중 현재 존재하지 않는 것이 있다면, 필요에 따라 생성됩니다. prefix가 /usr인 경우, ${prefix}/var와 ${prefix}/etc는 각각 /var와 /etc로 해석된다는 점에 유의하십시오. make install 단계에서 기존의 ${prefix}/etc/pkcs11 디렉토리에 내용이 존재하면 새로운 ${prefix}/var/lib/opencryptoki 위치로 마이그레이션됩니다.
홈 디렉토리(home directory)에 설치하는 경우, /home/luser/bin이 경로(path)에 포함되어 있는지 확인하십시오. bash 셸을 사용하는 경우 .bashrc 파일 끝에 다음 줄을 추가하십시오:
PATH="/home/luser/bin:${PATH}"
export PATH
csh 또는 tcsh를 사용하는 경우 대신 이 줄을 사용하십시오:
setenv PATH /home/luser/bin:${PATH}
홈 디렉토리를 PATH의 나머지 부분에 추가함으로써 시스템 전체에 설치된 소프트웨어를 사용자 지정 설치로 덮어쓸 수 있습니다.
더 많은 설치 정보는 [INSTALL]을 확인하십시오.
설정(CONFIGURATION)
openCryptoki 준비하기를 참조하십시오.
버전 3 이전에는 openCryptoki가 설정 파일로 pk_config_data를 사용했습니다. 이 파일은 pkcs11_startup을 실행할 때 생성되었습니다. 버전 3에서는 pkcs11_startup과 pk_config_data가 제거되었으며, 대신 opencryptoki.conf라는 사용자 정의 가능한 설정 파일로 대체되었습니다. 이 파일은 현재 openCryptoki에서 지원하는 각 토큰에 대한 항목을 포함합니다. 하지만 로컬 시스템에서 하드웨어 및 소프트웨어 요구 사항이 사용 가능한 토큰만 pkcsconf -t 명령을 실행할 때 존재하고 사용 가능하도록 표시됩니다.
사용하기 전에 각 토큰은 먼저 초기화되어야 합니다. -c 명령줄 옵션을 사용하여 토큰을 선택할 수 있습니다. 자세한 지침은 위에 연결된 문서를 참조하십시오.
특정 토큰을 초기화하려면 pkcsconf를 실행합니다:
openCryptoki 버전에서는 기본 SO PIN이 87654321입니다. 사용 전에 다른 PIN 값으로 변경해야 합니다.
SO PIN은 다음을 실행하여 변경할 수 있습니다:
사용자 PIN은 다음을 입력하여 초기화하고 변경할 수 있습니다:
나중에 사용자 PIN을 다시 변경하려면 다음을 입력합니다:
기여하기 (CONTRIBUTING)
CONTRIBUTING.md를 참조하십시오.