
ML-DSA-65 (NIST FIPS 204)를 사용한 순수 PQC 2계층 PKI 계층 구조 — EJBCA Community Edition 기반 Root CA + Sub CA 및 CRL과 OCSP
EJBCA Community Edition을 사용하여 NIST FIPS 204 (ML-DSA)를 2계층 PKI 계층구조에서 실습하는 구현입니다.
📖 전체 연습 가이드: 포스트퀀텀 PKI 구축: EJBCA에서 ML-DSA를 사용하여 루트 CA 및 서브 CA에 서명한 방법
두 개의 개별 가상 머신(각각 자체 EJBCA 컨테이너 보유)에서 실행되는 완전한 순수 PQC PKI 계층구조입니다.
VM 1 — Root CA
└─ ML-DSA-65 self-signed Root CA
└─ CRL published and reachable
VM 2 — Sub CA
└─ ML-DSA-65 Sub CA signed by Root CA
└─ CRL published and reachable
└─ OCSP responder active
체인의 모든 인증서(루트 CA, 서브 CA)는 ML-DSA-65 (NIST FIPS 204)로만 서명됩니다. RSA 없음, ECDSA 없음. 완전한 PQC 엔드투엔드.
ML-DSA(이전 CRYSTALS-Dilithium)는 FIPS 204에 따른 NIST 표준 포스트퀀텀 디지털 서명 알고리즘입니다. 이 랩에서는 Dilithium3 매개변수 세트(ML-DSA-65)를 선택했습니다. 128비트 포스트퀀텀 보안을 제공하며 대부분의 배포에 권장되는 범용 옵션입니다.
ejbca-pqc-lab/
├── README.md
├── root-ca/
│ └── setup-lab.sh # Run on VM1 — sets up the Root CA machine
└── sub-ca/
└── setup-lab.sh # Run on VM2 — sets up the Sub CA machine
chmod +x setup-lab.sh
sudo ./setup-lab.sh
완료되면 다음 주소에서 관리 UI에 접속하세요:
https://<VM1_IP>:8443/ejbca/adminweb/
컨테이너에서 superadmin.p12를 브라우저로 가져오세요:
docker cp ejbca:/opt/ejbca/p12/superadmin.p12 ~/superadmin.p12
기본 비밀번호: ejbca
그런 다음 Medium 기사를 따라 수동으로 루트 CA를 구성하세요.
chmod +x setup-lab.sh
sudo ./setup-lab.sh
완료되면 다음 주소에서 관리 UI에 접속하세요:
https://<VM2_IP>:8443/ejbca/adminweb/
동일한 방식으로 superadmin.p12를 가져온 후 Medium 기사를 따라 서브 CA를 구성하세요.
ejbca-data 볼륨 생성docker-compose.yml 생성모든 EJBCA 구성은 관리 UI를 통해 수동으로 수행됩니다(인증서 프로필, 암호화 토큰, CA 생성, CRL 설정, OCSP). 이는 의도적인 것입니다. 스크립트는 플랫폼을 실행 상태로 만듭니다. Medium 기사는 모든 수동 결정과 그 이유를 문서화합니다.
| 구성 요소 | CA | 상태 |
|---|
ACME — ACME 프로토콜(RFC 8555)은 계정 키 인증에 ML-DSA를 지원하지 않습니다. RSA와 ECDSA만 허용됩니다. ACME를 포함하려면 기존 계정 키가 필요하여 순수 PQC 스토리가 깨집니다. IETF는 PQC ACME 초안을 작업 중입니다. 이 랩은 최종 확정되면 업데이트될 예정입니다.
브라우저 신뢰 — 아직 주요 브라우저 신뢰 저장소에서 ML-DSA를 인식하지 않습니다. 이는 공개적으로 신뢰되는 계층구조가 아닌 개인 PKI 랩입니다. 이는 예상된 것이며 올바릅니다.
Mohammad Amin Kokash 보안 엔지니어 GitHub · Medium
MIT
| CRL | 루트 CA | ✅ |
| CRL | 서브 CA | ✅ |
| OCSP | 서브 CA | ✅ |
| OCSP | 루트 CA | ❌ 해당 없음 |