GPG Subkey 분실 및 Revocation 정리

  • Encryption subkey의 private key를 분실
  • 로컬에서 delkey로 subkey 삭제
  • 이후 새로운 sign/encrypt subkey 생성
  • gpg --send-keys 했는데 이전 subkey 삭제가 반영되지 않는 것처럼 보임

  • 한 번 업로드된 key material은 삭제되지 않음
  • 삭제 대신 Revocation(폐기) 만 가능
  • keyserver마다 동기화/캐시 차이 존재

즉:

“삭제"는 로컬 개념이고
공개 세계에서는 “폐기(revoke)“만 의미가 있음


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 필요 없음

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 했어야 함

  • 세상 어디에도 존재하지 않음
  • revoke 필요 없음
  • 그냥 잊어도 됨

전혀 문제 없음. 오히려 정상적인 키 운영 방식.

OpenPGP 권장 구조:

  • Primary key는 오프라인 보관
  • Subkey는 교체 가능한 운영 키
  • Subkey는 주기적으로 교체 가능

  • 다른 사람이 예전 encryption subkey로 암호화
  • 복호화 불가능
  • 메시지 손실 발생

따라서:

분실한 encryption subkey는 반드시 revoke 권장


  • Revocation은 Primary key가 수행
  • Subkey private part는 필요 없음
  • 하지만 subkey public packet은 필요
  • 로컬에 없으면 keyserver에서 다시 받아와야 함
  • 완전히 사라졌다면 revoke 불가 (그리고 불필요)

  1. Primary key는 오프라인 보관
  2. Subkey는 만료기간 설정
  3. Subkey 분실 시:
    • 새 subkey 생성
    • 기존 subkey revoke
    • --send-keys
  4. 주기적 --refresh-keys

#gpg #site-published

Related Content