GPG Subkey 분실 및 Revocation 정리
Contents
📌 상황 요약
- Encryption subkey의 private key를 분실
- 로컬에서
delkey로 subkey 삭제 - 이후 새로운 sign/encrypt subkey 생성
gpg --send-keys했는데 이전 subkey 삭제가 반영되지 않는 것처럼 보임
🔐 핵심 개념
1️⃣ OpenPGP Keyserver는 기본적으로 Append-Only
- 한 번 업로드된 key material은 삭제되지 않음
- 삭제 대신 Revocation(폐기) 만 가능
- keyserver마다 동기화/캐시 차이 존재
즉:
“삭제"는 로컬 개념이고
공개 세계에서는 “폐기(revoke)“만 의미가 있음
🔑 Revocation 구조 이해
Subkey revocation은 subkey가 직접 서명하는 것이 아님.
Primary Key
├─ Subkey A
├─ Subkey B
└─ Revocation signature (by Primary over Subkey A)
- Revocation 서명은 Primary Secret Key가 생성
- Subkey private part는 필요 없음
❗ 중요한 조건
Revocation을 만들려면:
- subkey의 fingerprint
- subkey binding 정보
- subkey public packet
이 정보가 로컬 키링에 존재해야 함
🔎 경우의 수 정리
| 상태 | Revocation 가능 여부 |
|---|---|
| subkey private 없음 | ✅ 가능 |
| subkey public 있음 | ✅ 가능 |
| subkey public도 삭제 | ❌ 바로는 불가 |
| keyserver에 남아 있음 | ✅ recv 후 가능 |
| 어디에도 없음 | revoke 필요 없음 |
🛠 현재 상황 대응 방법
✅ 1. Keyserver에서 다시 받아오기 (권장)
gpg --recv-keys <PRIMARY_FPR>
그 후:
gpg --edit-key <PRIMARY_FPR>
gpg> key N
gpg> revkey
gpg> save
gpg --send-keys <PRIMARY_FPR>
전제 조건:
- 해당 subkey를 과거에
--send-keys했어야 함
❌ 2. 한 번도 업로드 안 했고 로컬에서도 삭제한 경우
- 세상 어디에도 존재하지 않음
- revoke 필요 없음
- 그냥 잊어도 됨
🔄 Subkey 분실 후 새 Subkey 추가는 문제인가?
전혀 문제 없음. 오히려 정상적인 키 운영 방식.
OpenPGP 권장 구조:
- Primary key는 오프라인 보관
- Subkey는 교체 가능한 운영 키
- Subkey는 주기적으로 교체 가능
⚠️ Revocation을 하지 않으면 생기는 문제
- 다른 사람이 예전 encryption subkey로 암호화
- 복호화 불가능
- 메시지 손실 발생
따라서:
분실한 encryption subkey는 반드시 revoke 권장
🧠 최종 핵심 요약
- Revocation은 Primary key가 수행
- Subkey private part는 필요 없음
- 하지만 subkey public packet은 필요
- 로컬에 없으면 keyserver에서 다시 받아와야 함
- 완전히 사라졌다면 revoke 불가 (그리고 불필요)
🔐 실무 Best Practice
- Primary key는 오프라인 보관
- Subkey는 만료기간 설정
- Subkey 분실 시:
- 새 subkey 생성
- 기존 subkey revoke
--send-keys
- 주기적
--refresh-keys
#gpg #site-published