기술 가이드

SoftHSM 설치 및 초기화 가이드

5 min read 보안 업데이트됨 22 Sep 2025
SoftHSM 설치 및 초기화 가이드
SoftHSM 설치 및 초기화 가이드

핵심 정의

  • 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

SoftHSM 소스 아카이브 다운로드 화면

아카이브를 추출합니다:

tar xzf softhsm-2.3.0.tar.gz

tar로 아카이브 추출하는 예시 화면

추출 후에는 configure 스크립트로 의존성 및 빌드 옵션을 확인합니다:

./configure

configure 실행 중 의존성 검사 예시

만약 OpenSSL 헤더가 없다고 나온다면 시스템 패키지로 설치합니다. (Ubuntu/Debian 계열 예시)

sudo apt-get install libssl-dev pkg-config build-essential

OpenSSL 개발 패키지 설치 예시

설치 후 configure가 모든 요구를 만족한다고 표시하면 빌드합니다:

make

make 빌드 진행 화면

그 다음 설치합니다:

sudo make install

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은 애플리케이션(예: 브라우저)에서 토큰을 사용할 때 제공합니다. 토큰 초기화 후 새로운 미초기화 슬롯이 자동으로 추가됩니다.

토큰을 찾을 때는 슬롯 목록 또는 토큰 라벨/시리얼을 검색해서 접근하는 것을 권장합니다.

softhsm2-util 다른 옵션 예시 화면

슬롯 목록 확인 예시:

토큰 슬롯 목록 예시 화면

백업 및 복원

SoftHSM의 토큰과 오브젝트는 softhsm2.conf에 지정된 디렉터리에 파일 형태로 저장됩니다. 따라서 정기 백업은 파일 복사로 수행할 수 있습니다. 권장 절차:

  1. 토큰을 사용 중인 프로세스 중지(또는 토큰 잠금)
  2. 구성 파일에서 지정한 저장소(예: /var/lib/softhsm/tokens/) 전체를 안전한 위치로 복사
  3. 백업 파일의 권한과 소유자 제한
  4. 복원 테스트 수행

복원 시 권장 방법은 백업을 원위치에 복사한 뒤 파일 권한을 복구하고 서비스 재시작입니다. 백업 파일이 노출되면 키가 유출될 수 있으므로 암호화된 오프사이트 백업을 권장합니다.

SoftHSM을 OpenSC 유틸리티로 접근하기

OpenSC의 PKCS#11 유틸리티로 SoftHSM 토큰을 테스트할 수 있습니다. 설치 예시(Ubuntu/Debian):

sudo apt-get install opensc

OpenSC 설치 예시 화면

토큰 테스트 예시:

pkcs11-tool --module /usr/local/lib/softhsm/libsofthsm2.so -l -t

-t 스위치는 메커니즘 테스트용입니다.

pkcs11-tool 테스트 예시 화면

보안 강화 권장사항

  • 물리적 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 공식 문서를 확인하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기