GPG Backup and Recovery
gpg
- GPG 키 백업과 복구
GPG 키 백업과 복구
본 문서는 GPG 키 백업 및 복구에 대한 문서임.
응용으로는 개인 장비 2대 이상에서 동일한 GPG identity를 운영할 때도 사용가능.
1. 기본 원칙
- GPG identity는 하나의 primary key로 정의함
- 여러 장비는 동일한 key material을 공유함
- 백업은 형식과 확장자의 관례를 엄격히 준수함
2. 백업 파일 형식과 확장자 관례
2.1 형식-확장자 매핑
| 대상 | 형식 | 확장자 | 비고 |
|---|---|---|---|
| Private key 전체 | binary | .gpg |
표준, 기본 |
| Public key | ASCII armored | .asc |
배포용 |
| Revocation certificate | ASCII armored | .asc |
필수 |
| Ownertrust | plain text | .txt |
선택 |
2.2 규칙
- binary 파일에
.asc사용 금지 - armored 출력에는 반드시
.asc - private key는 기본적으로 binary 보관
3. Fingerprint 기반 파일명 규칙
3.1 Fingerprint 사용 이유
- Key ID(8 or 16 hex)는 충돌 가능성 존재
- Fingerprint(40 hex)는 전 세계적으로 유일 (SHA-1 기반)
- 파일 혼동 및 오배포 방지
SHA-1은 Hash algorithm의 하나임: Hash Algorithm
3.2 파일명 규칙
Fingerprint의 마지막 16자리를 파일명에 포함하는 것이 권장되는 관례.
- 하위 16자리 사용이 관례임.
예시: fingerprint
1234ABCD5678EFGH9012IJKL3456MNOP7890QRST
사용 부분
3456MNOP7890QRST
추출 방법
gpg --with-colons --fingerprint <sec_keyid> \
| awk -F: '/^fpr:/ {print substr($10, length($10)-15)}'
<sec_keyid>는gpg --list-secret-keys --keyid-format long에서 확인 가능- 예:
sec rsa4096/ABCD1234EFGH5678 2022-03-01 [SC]
3.3 권장 백업 디렉토리 구조
gpg-backup/
├── privatekey-full-3456MNOP7890QRST.gpg
├── publickey-3456MNOP7890QRST.asc
├── revoke-3456MNOP7890QRST.asc
└── ownertrust-3456MNOP7890QRST.txt
4. 백업 절차
4.1 Private key 전체 백업 (binary)
gpg --export-secret-keys \
--export-options export-backup \
ABCD1234EFGH5678 \
> privatekey-full-3456MNOP7890QRST.gpg
4.2 Public key 백업 (ASCII armored)
gpg --armor \
--export ABCD1234EFGH5678 \
> publickey-3456MNOP7890QRST.asc
4.3 Revocation certificate 생성 (필수)
gpg --output revoke-3456MNOP7890QRST.asc \
--gen-revoke ABCD1234EFGH5678
4.4 Ownertrust 백업 (선택)
gpg --export-ownertrust \
> ownertrust-3456MNOP7890QRST.txt
5. 백업 파일을 암호화를 권장
5.1 왜 추가 암호화가 필요한가
- private key 자체는 passphrase로 보호됨
- 그러나 백업 파일 유출 시:
- 오프라인 brute-force 시도 가능
- 장기 보관 리스크 존재
따라서 백업 파일 묶음 자체를 한 번 더 암호화하는 것이 권장됨.
5.2 gpg 대칭 암호화 방식 (가장 흔한 방식)
tar czf gpg-backup-3456MNOP7890QRST.tar.gz gpg-backup/
gpg -c gpg-backup-3456MNOP7890QRST.tar.gz
결과
gpg-backup-3456MNOP7890QRST.tar.gz.gpg
- 이 파일만 외부 저장 매체에 보관
- 원본 디렉토리는 즉시 삭제 권장
- 대칭(symmetric) 암호화
-c이므로 passphrase만 있으면 됨.
5.3 보관 위치 관례
- 암호화된 USB
- 오프라인 외장 디스크
- 서로 다른 물리적 위치 2곳 이상
비권장
- 클라우드 단독 보관
- 이메일 전송
- 평문 파일 보관
6. GPG 복구
6.1 백업 파일 복호화
gpg gpg-backup-3456MNOP7890QRST.tar.gz.gpg
tar xzf gpg-backup-3456MNOP7890QRST.tar.gz
- symmetric encryption 된 상태이니 passphrase만 있으면 됨.
6.2 키 복구
gpg --import privatekey-full-3456MNOP7890QRST.gpg
gpg --import-ownertrust ownertrust-3456MNOP7890QRST.txt
확인
gpg --list-secret-keys --keyid-format long
이전과 출력이 동일해야 함.
7. 장비 분실 시 실제 대응 및 복구 순서
7.1 분실 직후 판단
| 상황 | 조치 |
|---|---|
| 단순 분실, 유출 불확실 | 새 subkey 생성 |
| 유출 가능성 있음 | subkey revoke |
| primary key 유출 의심 | 전체 revoke |
7.2 새 장비에서 복구 절차
- 백업 파일 복호화
- private key import
- ownertrust import
- 키 상태 확인
gpg --list-secret-keys
7.3 Subkey 교체가 필요한 경우
gpg --edit-key ABCD1234EFGH5678
gpg> addkey
gpg> save
이후
gpg --export ABCD1234EFGH5678 > publickey-new.asc
외부 서비스(GitHub, 서버 등)에 재배포
7.4 최악의 경우 - 전체 폐기
gpg --import revoke-3456MNOP7890QRST.asc
- 기존 identity 완전 종료
- 새 key pair 생성
- 새 fingerprint로 재배포
[[/gpg/gpg_revoke_key]]
8. 피해야할 사항들
- binary private key를
.asc로 저장 - revoke 파일을 온라인 저장소에 업로드
- primary key 없이 subkey 관리 시도
- 백업 파일을 암호화 없이 장기 보관
9. 최종 요약
- private key: binary +
.gpg - public, revoke: ASCII armored +
.asc - 파일명에 fingerprint 포함
- 백업 묶음은 반드시 추가 암호화
- 분실 대응은 subkey 단위부터
- primary 유출 시 identity 종료