코드 서명(Code Signing)과 PQC: 배포 파이프라인이 깨지는 지점들
코드 서명과 PQC 전환은 인증서, 타임스탬프, 검증기, HSM까지 배포 파이프라인 전 구간을 건드립니다. 깨지는 지점을 미리 찾으면 이중서명·하이브리드로 “배포는 유지”하면서 안전하게 넘어갈 수 있습니다.
코드 서명은 “누가 만들었는지”와 “중간에 바뀌지 않았는지”를 배포 단계에서 증명하는 마지막 관문입니다. 그런데 PQC(양자내성암호)로 서명 알고리즘을 바꾸려는 순간, 서명 자체보다 파이프라인 주변 생태계가 먼저 삐걱거립니다. 아래는 실제로 깨지기 쉬운 지점을 코드 서명 흐름대로 정리한 체크리스트입니다.
1) “서명 키·인증서” 구간: 발급 체인과 HSM에서 먼저 멈춘다
가장 흔한 첫 단절은 키를 담는 그릇입니다. PQC 서명(예: ML-DSA, SLH-DSA)을 쓰려면 인증서(X.509) 확장, 알고리즘 식별자(OID), 키 포맷, 라이브러리 지원이 함께 맞아야 하는데, 조직의 내부 CA/템플릿/정책엔 보통 RSA/ECDSA만 가정되어 있습니다.
두 번째 단절은 하드웨어/키스토어입니다. 서명키를 HSM/토큰에서 꺼내 쓰는 구조라면 PKCS#11 레벨에서 새 메커니즘이 지원되어야 하고, 펌웨어·클라이언트·미들웨어가 한 박자라도 어긋나면 “키는 만들었는데 서명 호출이 안 됨”이 발생합니다. PKCS#11 규격과 벤더 구현 속도 차이가 큽니다.
내부 배포(사내 에이전트, IoT 플릿)는 비교적 빨리 PQC 키로 갈 수 있지만, 외부 배포(Windows/macOS/모바일 스토어)는 “검증기 업데이트”가 더딘 쪽이 병목이 됩니다. 그래서 초기엔 PQC ‘단독’보다 하이브리드/병렬 서명이 현실적입니다.
2) “서명 포맷·검증기” 구간: 툴체인과 소비자 OS가 기대하는 게 다르다
코드 서명은 단순히 해시+서명이 아니라 “포장 규격” 싸움입니다. Windows Authenticode는 PKCS#7/CMS 계열로 체인과 서명을 담고, 컨테이너는 cosign 같은 OCI 서명 메타데이터를 쓰고, Android는 APK Signing Block(v2/v3) 구조를 씁니다. 포맷이 다른 만큼, PQC를 끼웠을 때 깨지는 방식도 다릅니다.
실제 파열 지점은 보통 “검증 라이브러리의 알고리즘 화이트리스트”입니다. 빌드에서 서명은 성공했는데 배포 후 설치기/로더/업데이터가 “알 수 없는 서명 알고리즘”으로 거부하는 케이스가 나옵니다. 특히 CMS/PKCS7 검증 로직이 새 서명 알고리즘을 전제로 업데이트되어야 합니다.
외부 호환이 필요한 산출물은 “기존 RSA/ECDSA 서명 유지 + PQC 서명은 분리(Detached)로 병렬 제공”이 안전합니다. 또한 검증 지점을 (a) 사용자 디바이스/OS 레벨 검증(호환성), (b) 배포 게이트(레지스트리·다운로드 서버)에서의 추가 검증(보안 강화)로 나누면, PQC를 먼저 게이트에만 적용해도 효과를 얻을 수 있습니다.
3) “타임스탬프·장기검증(LTV)” 구간: 만료·폐기·재서명 시나리오에서 터진다
코드 서명은 인증서가 만료되어도 “서명 당시 유효했다”를 증명해야 합니다. 그래서 타임스탬프(RFC 3161 등)를 붙여 장기 검증을 가능하게 만듭니다. PQC로 바꾸면 ‘서명’만이 아니라 ‘타임스탬프 서비스(TSA)의 서명 알고리즘’과 검증 경로도 함께 봐야 합니다.
흔한 깨짐은 (1) 서명은 PQC인데 타임스탬프 도구/서버가 특정 조합만 지원, (2) 폐기 확인 체인이 바뀌면서 오프라인 배포에서 중간 인증서·CRL 누락, (3) 재현 빌드/재서명에서 아티팩트 크기 증가로 업로더·스캐너·프록시 제한에 걸리는 문제입니다.
현실적인 해법은 “타임스탬프는 당분간 기존 체계 유지 + 서명은 하이브리드/병렬”입니다. 사용자 환경이 검증 가능한 조합을 기준으로 LTV를 먼저 안정화하고, PQC는 게이트 검증/투명성 로그/내부 신뢰망에서 점진 확대합니다.
4) 결론
PQC로 코드 서명을 바꿀 때 파이프라인이 깨지는 핵심은 인증서 체인, HSM/PKCS#11, 서명 포맷(CMS/Authenticode/APK/OCI), 그리고 타임스탬프/LTV 호환성입니다. 그래서 첫 단계는 단독 전환이 아니라 이중서명·하이브리드·분리서명으로 배포 호환을 유지하는 전략이 가장 안전합니다.
다음은 검증기를 가진 주체(사용자 OS, 스토어, 런타임, 사내 게이트)를 분리해 우선순위를 정하고, 깨지는 지점을 테스트 매트릭스로 고정하는 것입니다. 마지막으로 SLSA/코사인 같은 공급망 증명 흐름에 PQC를 “추가 신뢰층”으로 붙이면, 배포는 안 깨지면서 보안 수준을 올릴 수 있습니다.