공개키 기반 구조, PKI (Public Key Infrastructure) #1
1. PKI란?
PKI(공개 키 기반 구조)는 공개 키 암호화 기술을 기반으로
디지털 인증서를 생성, 관리, 배포, 폐지하는 인프라입니다.
이는 인터넷 상에서 신뢰할 수 있는 보안 통신과 사용자의 신원 인증을 가능하게 합니다.
개인키(Private Key): 사용자가 가진 비밀 키
공개키(Public Key): 공개적으로 배포되는 키
두개의 키는 알고리즘으로 연결되어 있으며,
한쪽으로 암호화한 데이터는 다른 쪽으로만 복호화할 수 있습니다.
두개의 키는 키 쌍(Key Pair)으로 표현합니다.
그리고 개인키-공개키 구조는 2개의 키를 사용하기 때문에
비대칭키 암호화( (Asymmetric Key Encryption)입니다.
대칭키 암호화에 대해서는 추후 작성해보겠습니다.
2. 비대칭키 암호화
공개키로 암호화 → 개인키로 복호화 (또는 그 반대)
키 쌍을 사용해 안전하게 통신 시작 가능
계산량이 크고 속도가 느림
구분 | 설명 |
키 | 공개키와 개인키 쌍을 사용 |
예시 알고리즘 | RSA, ECDSA, ElGamal 등 |
장점 | 키 분배가 안전, 신원 인증 가능 |
단점 | 연산 복잡도 높아 대용량에는 부적합 |
3. PKI의 목적
신원 인증: 사용자의 신원을 인증서 기반으로 확인
데이터 무결성: 데이터가 위변조되지 않았음을 증명
부인방지: 서명자가 추후 서명을 부인하지 못하도록 방지
암호화: 비밀 데이터의 안전한 전송
4. PKI 구성 요소
구분 | 설명 |
CA (인증기관) | 인증서를 발급하고 서명하여 신뢰성을 보장하는 핵심 기관 |
RA (등록기관) | 인증 요청을 검증하고 CA에 전달하는 역할을 수행 (CA와 분리 가능) |
사용자(End Entity) | 인증서를 사용하는 주체 (사람, 서버, 디바이스 등) |
공개키/개인키 | 암호화와 서명에 사용되는 쌍의 키 |
디지털 인증서 | 공개키, 소유자 정보, 서명 등이 포함된 신뢰 문서 |
CRL (인증서 폐지 목록) | 더 이상 유효하지 않은 인증서 목록 |
OCSP (Online Certificate Status Protocol) | 인증서 상태를 실시간으로 확인하는 프로토콜 |
5. PKI 플로우
[1] 사용자 (End Entity, 예: 서버 관리자)
└─ 개인키 생성 (Private Key)
└─ 반드시 본인의 시스템/장비에서 생성됨
└─ 절대 외부에 유출되면 안 됨
└─ CSR(Certificate Signing Request) 생성
└─ 공개키 + 사용자 정보 (CN, 조직명, 도메인 등) 포함
└─ 생성 시 개인키로 자체 서명함
└─ 확장자: .csr
↓
[2] 등록기관 (RA, Registration Authority)
└─ 사용자 정보 확인 (실명, 조직, 도메인 소유권 등)
└─ 인증 등급에 따라 검증 강도 달라짐
예: DV(도메인 검증) vs OV(조직 검증) vs EV(확장 검증)
└─ 검증된 CSR을 인증기관(CA)에 전달
↓
[3] 인증기관 (CA, Certificate Authority)
└─ CSR 내용 검토 및 디지털 인증서 생성
└─ 인증서 = 사용자 정보 + 공개키 + CA 서명
└─ 확장자: .crt, .cer, .pem 등
└─ CA의 개인키로 인증서에 전자서명
└─ 이 서명이 "이 인증서는 신뢰할 수 있다"는 근거
↓
[4] 사용자 (수신자)
└─ 인증서 수신 후 설치
└─ 웹서버(예: Apache, Nginx)에 설치
└─ 개인키는 여전히 사용자 장비에만 존재
└─ 인증서 체인 구성
└─ 중간 CA, 루트 CA 포함한 full chain 제공
↓
[5] 제3자 (클라이언트, 브라우저, 사용자)
└─ 접속 시 인증서 검증 수행
└─ 체인을 따라 루트 CA까지 신뢰 검증
└─ 인증서 유효성 확인:
- CRL (Certificate Revocation List)
- OCSP (Online Certificate Status Protocol)
└─ 유효하면 보안 연결(SSL/TLS) 수립
각 단계에서 다루는 파일
OpenSSL로 직접 생성해볼 수 있습니다.
파일명 | 용도 | 관련 단계 |
.key | 개인키 파일 | 개인키 생성 |
.csr | 인증서 서명 요청 파일 | CSR 생성 |
.crt / .cer | 최종 인증서 파일 | 인증서 발급 및 서명 |
.pem | 인증서나 키를 담은 텍스트 기반 파일 포맷 | 인증서 수신 및 설치 |
fullchain.pem | 인증서 체인 포함 파일 | 인증서 체인 구성 |
직접 생성은 저번 포스팅을 참고하시면 됩니다.
OpenSSL CSR 발급 및 x.509 인증서 발급
OpenSSL 설치 및 인증서 발급OpenSSL이란OpenSSL은 데이터를 암호화하거나 보안을 적용할 때 사용하는 오픈소스 툴킷보통 인터넷에서 HTTPS 같은 보안 통신, 전자서명, 인증서 발급, 암호화된 파일 생성
happyqa.tistory.com
6. 공개키와 개인키 위치
개인키
외부에 노출되지 않아야함
시나리오 | 위치 |
사용자가 직접 생성 | 로컬 PC의 키 저장소 (예: Windows Key Store, macOS Keychain, .pfx, .pem 등) |
웹서버 인증서 | 서버 내부의 파일 또는 HSM(하드웨어 보안 모듈) |
개발자 서명 | 개발툴이나 키스토어(JKS, PKCS#12 등)에 저장 |
보안 장비 | HSM, 스마트카드, USB 토큰 등 외부 저장 장치 |
모바일 앱 | OS 보안 영역 (Android Keystore, Apple Secure Enclave 등) |
공개키
누구나 접근 가능하며 디지털 인증서 형태(x.509)로 공개
시나리오 | 위치 |
HTTPS 웹서버 | 브라우저 접속 시 서버에서 자동 다운로드 (SSL 인증서 포함) |
이메일 서명 | 공개된 인증서 저장소 또는 이메일 첨부 |
코드 서명 | 소프트웨어와 함께 배포됨 (서명 정보 포함) |
운영 체제 | 루트 인증서 저장소 (예: Windows, Linux 시스템의 CA 목록) |
직접 배포 | .cer, .crt, .pem 파일로 공개 공유 가능 |
공개키와 개인키의 대표적인 사용 방식은 2가지가 있습니다.
클라이언트가 HTTPS로 접속하면
서버는 공개키가 포함된 인증서(.crt)를 전송
서버의 개인키는 서버 내부에만 저장되어, 클라이언트는 알 수 없음
사용자가 디지털 서명을 할 때
사용자 로컬 시스템에서 개인키로 서명
수신자는 공개 인증서로 서명을 검증
공개키와 개인키는 각 역할 주체(클라이언트, 서버, 인증기관) 별 보관 위치가 존재합니다.
그 중 개인키 보관, 인증서 발급 및 전체 체계를 관리하는 것이 인증기관(CA)입니다.
그러면 다음에는 인증기관(CA)에 대해 더 자세히 설명해보도록 하겠습니다.