핵심 정의
- HSM: 비밀키를 외부에 노출하지 않고 생성·보관·연산을 수행하는 장치입니다.
- PKCS#11: 암호화 토큰(HSM/스마트카드)을 표준화된 API로 접근하는 인터페이스입니다.
목적 및 적용 범위
이 문서는 SoftHSM v2를 기준으로 설명합니다. SoftHSM은 OpenDNSSEC 프로젝트의 요구를 충족하기 위해 개발되었고, 다른 PKCS#11 호환 제품과 함께 사용할 수 있습니다. 실제 하드웨어 HSM을 구매하기 어렵거나 테스트·개발 환경에서 HSM 동작을 모사할 때 유용합니다.
重要: SoftHSM은 소프트웨어 구현체입니다. 실서비스에서의 키 보호 수준은 하드웨어 HSM과 다르므로 중요 키는 하드웨어 장치에서 보관하는 것을 권장합니다.
목차
- Dependencies (종속성)
- Installation (설치)
- 구성 파일
- 소프트 토큰 초기화
- 백업 및 복원
- OpenSC 유틸리티와 사용
- 보안 강화 권장사항
- 마이그레이션 및 호환성 팁
- 문제 해결 체크리스트
- 운영자/개발자/보안팀 체크리스트
- 결론
Dependencies
SoftHSM은 암호화 백엔드로 OpenSSL 또는 Botan을 지원합니다. Botan을 선택할 경우 GNU MP 지원(–with-gnump)을 활성화하면 공개키 연산 성능이 개선될 수 있습니다.
권장 항목
- OpenSSL 개발 헤더 (openssl-dev 또는 libssl-dev)
- pkg-config
- make, gcc 등 빌드 도구
- SQLite3 (마이그레이션 도구 또는 DB object store 사용 시)
Installation
SoftHSM 소스는 OpenDNSSEC 배포 사이트에서 제공됩니다. wget으로 소스를 내려받는 예:
wget https://dist.opendnssec.org/source/softhsm-2.3.0.tar.gz
아카이브를 추출합니다:
tar xzf softhsm-2.3.0.tar.gz
추출 후에는 configure 스크립트로 의존성 및 빌드 옵션을 확인합니다:
./configure
만약 OpenSSL 헤더가 없다고 나온다면 시스템 패키지로 설치합니다. (Ubuntu/Debian 계열 예시)
sudo apt-get install libssl-dev pkg-config build-essential
설치 후 configure가 모든 요구를 만족한다고 표시하면 빌드합니다:
make
그 다음 설치합니다:
sudo make install
configure 옵션 참고
configure 스크립트는 여러 빌드 옵션을 제공합니다. 전체 목록은 다음으로 확인하세요:
./configure --help
예시 옵션(원문 유지):
--disable-ecc Disable support for ECC (default enabled)
--disable-gost Disable support for GOST (default enabled)
--disable-visibility Disable hidden visibilty link mode [enabled]
--with-crypto-backend Select crypto backend (openssl|botan)
--with-openssl=PATH Specify prefix of path of OpenSSL
--with-botan=PATH Specify prefix of path of Botan
--with-migrate Build the migration tool. Used when migrating
a SoftHSM v1 token database. Requires SQLite3
--with-objectstore-backend-db
Build with database object store (SQLite3)
--with-sqlite3=PATH Specify prefix of path of SQLite3
--disable-p11-kit Disable p11-kit integration (default enabled)
--with-p11-kit=PATH Specify install path of the p11-kit module, will
override path given by pkg-config
구성 파일
기본 설정 파일 위치는 /etc/softhsm2.conf 입니다. 경로를 변경하려면 환경 변수 SOFTHSM2_CONF를 설정하세요.
export SOFTHSM2_CONF=/path/to/softhsm2.conf
구성 파일에는 토큰 저장 경로, 로그, 오브젝트 스토어 타입(SQLite/파일) 같은 설정이 있습니다. 프로덕션에서는 토큰 파일이 저장되는 디렉터리의 접근 권한을 엄격히 제한하세요.
소프트 토큰 초기화
SoftHSM 토큰은 softhsm2-util 유틸리티 또는 PKCS#11 인터페이스로 초기화합니다. 기본 예시:
softhsm2-util --init-token --slot 0 --label "Token-1"
초기화 과정에서 Security Officer (SO) PIN과 User PIN을 설정합니다. SO PIN은 토큰 재초기화·관리용이며, User PIN은 애플리케이션(예: 브라우저)에서 토큰을 사용할 때 제공합니다. 토큰 초기화 후 새로운 미초기화 슬롯이 자동으로 추가됩니다.
토큰을 찾을 때는 슬롯 목록 또는 토큰 라벨/시리얼을 검색해서 접근하는 것을 권장합니다.
슬롯 목록 확인 예시:
백업 및 복원
SoftHSM의 토큰과 오브젝트는 softhsm2.conf에 지정된 디렉터리에 파일 형태로 저장됩니다. 따라서 정기 백업은 파일 복사로 수행할 수 있습니다. 권장 절차:
- 토큰을 사용 중인 프로세스 중지(또는 토큰 잠금)
- 구성 파일에서 지정한 저장소(예: /var/lib/softhsm/tokens/) 전체를 안전한 위치로 복사
- 백업 파일의 권한과 소유자 제한
- 복원 테스트 수행
복원 시 권장 방법은 백업을 원위치에 복사한 뒤 파일 권한을 복구하고 서비스 재시작입니다. 백업 파일이 노출되면 키가 유출될 수 있으므로 암호화된 오프사이트 백업을 권장합니다.
SoftHSM을 OpenSC 유틸리티로 접근하기
OpenSC의 PKCS#11 유틸리티로 SoftHSM 토큰을 테스트할 수 있습니다. 설치 예시(Ubuntu/Debian):
sudo apt-get install opensc
토큰 테스트 예시:
pkcs11-tool --module /usr/local/lib/softhsm/libsofthsm2.so -l -t
-t 스위치는 메커니즘 테스트용입니다.
보안 강화 권장사항
- 물리적 HSM 사용 권장: 민감한 주요 키는 하드웨어 HSM에서 보관하세요.
- PIN 정책: 복잡도와 재시도 제한을 설정하고, SO PIN은 최소 권한자만 보유하세요.
- 파일 권한: 토큰 저장 디렉터리에 대해 root 전용 접근 권한을 설정하세요.
- 백업 보호: 백업은 암호화하고 오프사이트로 보관하세요.
- 감사 로그: PKCS#11 호출과 관리 작업을 감사 로그로 남기세요.
- p11-kit: 시스템의 PKCS#11 모듈 관리를 위해 p11-kit 통합을 검토하세요.
중요: SoftHSM에서의 키 연산은 소프트웨어 레벨에서 수행되므로 메모리 덤프나 스왑(swap)에 의한 키 노출 위험을 고려해야 합니다.
마이그레이션 및 호환성 팁
- SoftHSM v1에서 v2로 마이그레이션하려면 마이그레이션 툴(–with-migrate)과 SQLite3가 필요합니다.
- OpenSSL/Libtool 경로를 커스터마이즈해야 할 경우 configure의 –with-openssl 옵션을 사용하세요.
- 애플리케이션이 특정 PKCS#11 모듈 경로를 요구하면 설치된 libsofthsm2.so 경로를 확인하여 설정하세요.
문제 해결 체크리스트
- configure 단계에서 “OpenSSL header not found” 오류가 나면 libssl-dev 설치 여부 확인
- softhsm2-util의 토큰이 보이지 않으면 SOFTHSM2_CONF 경로 및 토큰 디렉터리 권한 확인
- pkcs11-tool 인증 실패 시 PIN 오타 또는 모듈 경로 오류 확인
- 복원 후 토큰이 인식되지 않으면 파일 권한(소유자/모드)과 SELinux/AppArmor 정책 확인
운영자/개발자/보안팀 체크리스트
운영자
- 토큰 저장소 정기 백업과 복원 점검
- 구성 파일 변경 시 변경 로그 기록
- 패키지/라이브러리 보안 업데이트 적용
개발자
- PKCS#11 모듈 경로를 하드코딩하지 말고 구성으로 처리
- 테스트 환경과 프로덕션 환경의 키 분리
- 연산 실패 시 상세 로그를 남기도록 구현
보안팀
- SO PIN·관리 정책 수립
- 키 생성/폐기 프로세스 검토
- 규정 준수(감사·로그 보존기간) 점검
간단 체크명령 치트시트
- 토큰 초기화
softhsm2-util --init-token --slot 0 --label "Token-1"
- 슬롯/토큰 정보 조회
softhsm2-util --show-slots
- PKCS#11 모듈 테스트
pkcs11-tool --module /usr/local/lib/softhsm/libsofthsm2.so -l -t
- configure 도움말
./configure --help
언제 SoftHSM이 적합하지 않은가
- 고가용성·내구성·강력한 키보호가 필수인 프로덕션 시스템에서는 하드웨어 HSM이 필요합니다.
- 외부 규제(예: 특정 금융 규정)에서 하드웨어 기반 키 보관을 요구하는 경우 SoftHSM은 적합하지 않습니다.
결론
이 글에서는 SoftHSM의 역할과 설치, 초기화, 운영에서 지켜야 할 기본 원칙을 설명했습니다. SoftHSM은 PKCS#11 호환 소프트웨어 HSM으로 개발·테스트 용도로 효율적입니다. 단, 실제 운영에서 민감한 키는 하드웨어 HSM에 보관하는 것이 안전합니다.
요약
- SoftHSM은 PKCS#11을 통해 암호화 키를 관리하는 소프트웨어 HSM입니다.
- Ubuntu에서 소스 빌드·설치 후 softhsm2-util로 토큰을 초기화합니다.
- 토큰 파일은 softhsm2.conf에 지정된 경로에 저장되며, 파일 백업으로 복원할 수 있습니다.
- 프로덕션 보안 요구사항에 따라 하드웨어 HSM 사용을 검토하세요.
추가 자료 및 참조는 OpenDNSSEC 및 SoftHSM 공식 문서를 확인하세요.