Home Subkey
Post
Cancel

Subkey

Intro

GPG 사용법에 대한 유용한 문서인거 같아, https://mikeross.xyz/create-gpg-key-pair-with-subkeys/의 게시글을 번역하고, 조금 수정하였다.

GPG 키 생성 및 사용 가이드

GPG 키(기술적으로는 공개 키 하나와 하나 이상의 비밀 키로 구성된 키 세트)는 통신을 보호하고, 온라인 신원을 증명하며, 코드베이스의 신뢰성을 보장하는 데 사용할 수 있다.

GPG 키 생성에 대한 가이드는 많지만, Subkey 생성과 그 중요성을 다루는 경우는 드물다. Subkey를 사용하면 노트북을 분실하거나 도난당해도 GPG 마스터 키 쌍이 잘못된 손에 들어가 온라인 평판이 손상되는 것을 방지할 수 있다. (정말 중요한 일이다.)

이 가이드에서는 GPG 마스터 키 쌍을 생성하고, 하위 키를 만들며, 마스터 키를 백업하고 하위 키만 로컬 컴퓨터에 남기는 방법을 보여준다.

GnuPG가 컴퓨터에 설치되어 있으면(Mac 설치에 도움이 필요하다면 여기를 확인) GPG 키를 생성할 준비가 된 것이다.

GPG 키 쌍 생성하기

터미널에서 다음 명령어를 실행한다:

1
gpg --full-generate-key

키 유형을 선택하라는 메시지가 표시된다. 권장 표준이자 GnuPG의 기본값은 “ECC”로, 타원 곡선 암호화(elliptic curve cryptography)를 의미한다. 이전 기본값은 RSA였지만, 양자 컴퓨터에 저항력이 없는 암호화 방식이라 더 이상 선호되지 않는다.

1
2
3
4
5
6
7
8
Please select what kind of key you want:
   (1) RSA and RSA
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (9) ECC (sign and encrypt) *default*
  (10) ECC (sign only)
  (14) Existing key from card

키 생성일로부터 약 1년 후에 만료되도록 설정하는 것이 좋다. 나중에 만료 날짜를 연장할 수 있으며, 짧은 만료 기간을 설정하면 비밀 키를 잃어버리고 취소되지 않은 GPG 키가 수년간(또는 만료를 선택하지 않은 경우 영원히) 떠돌아다니는 상황을 방지할 수 있다.

1
2
3
4
5
6
7
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 

프로그램이 키의 비밀번호를 설정하라고 요청한다. 설정이 완료되면 생성된 키가 출력에 나열되고 gpg가 종료된다.

1
2
3
4
pub   ed25519 2022-09-14 [SC] [expires: 2023-12-31]
      BF4801B69A3FD61C1454722495BB0086DDD86937
uid                      Mike Ross <mike@nospammers.com>
sub   cv25519 2022-09-14 [E] [expires: 2023-12-31]

gpg --list-secret-keys 명령어를 실행하여 키가 생성되었는지 다시 한 번 확인할 수 있다. 출력에서 동일한 키가 표시되어야 한다:

1
2
3
4
sec   ed25519 2022-09-14 [SC] [expires: 2023-12-31]
      BF4801B69A3FD61C1454722495BB0086DDD86937
uid           [ultimate] Mike Ross <mike@nospammers.com>
ssb   cv25519 2022-09-14 [E] [expires: 2023-12-31]

축하한다! 이제 컴퓨터에 활성 서명 및 암호화 키가 있다. 그러나 보안에 정말 관심이 있다면 아직 끝나지 않았다. 디지털 신원을 안전하게 유지하기 위한 하위 키 생성에 대해 계속 읽어보자.

GPG 키 권한

주의 깊은 독자라면 마스터 키에 [SC] 레이블이, 하위 키에 [E] 레이블이 붙어 있는 것을 눈치챘을 것이다. 이 레이블은 GPG 키의 허용된 사용을 나타낸다.

GPG 키에는 네 가지 권한/용도가 있다:

  • E = 암호화(encryption)
  • S = 서명(signing)
  • C = 인증(certification)
  • A = 인증(authentication)

암호화와 서명 기능은 일상생활에서 가장 자주 사용하게 될 것이며, 이름에서 그 용도를 쉽게 알 수 있다.

인증 권한을 사용하면 E, S, A 권한이 있는 더 많은 (하위) 키를 생성할 수 있다. 이 권한은 마스터 키에 존재하므로 하위 키 자체가 무한한 수의 하위 키를 생성할 수는 없다.

인증 권한은 실제로 거의 사용되지 않지만, SSH 및 기타 프로토콜의 특수한 구현에서 추가 보안을 위해 GPG 키를 사용할 수 있다.

Subkey를 통한 보안 강화

지금 가지고 있는 것은 “마스터 키” (masterkey)로 간주된다. GPG는 마스터 키와 연결된 추가 키 쌍인 하위 키를 지원한다.

보안 강화를 위해 일반 노트북이나 데스크톱 컴퓨터에서는 하위 키만 사용하고, 마스터 키는 휴대용 하드 드라이브와 같은 오프라인 장치에 저장하는 것이 좋다.

장치를 분실한 경우 노트북의 하위 키를 취소하고 마스터 키는 살려둔 채 새로운 하위 키를 생성할 수 있어, 구축한 평판을 잃지 않을 수 있다.

원래 키 생성 단계에서 암호화 하위 키가 자동으로 생성되었으므로 서명용 하위 키 하나만 새로 만들면 된다.

GPG 서명 하위 키 생성하기

터미널에서 다음 명령어를 실행한다. 키 ID는 자신의 것으로 교체해야 한다:

1
gpg --edit-key BF4801B69A3FD61C1454722495BB0086DDD86937

gpg> 프롬프트에서 addkey를 입력하고 엔터를 누른다. 생성할 수 있는 키 유형 목록이 표시된다:

1
2
3
4
5
6
7
8
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
  (10) ECC (sign only)
  (12) ECC (encrypt only)
  (14) Existing key from card

이번에는 10번 옵션을 선택하여 키를 생성한다. 이 키의 비밀번호를 생성하라는 메시지가 표시된다. 이전에 사용한 것과 동일하게 설정할 수 있다.

생성이 완료되면 두 번째 하위 키가 있는 것을 확인할 수 있다:

1
2
3
4
5
6
7
8
sec  ed25519/95BB0086DDD86937
     created: 2022-09-14  expires: 2023-12-31  usage: SC  
     trust: ultimate      validity: ultimate
ssb  cv25519/9EEF033997A3AE4C
     created: 2022-09-14  expires: 2023-12-31  usage: E   
ssb  ed25519/14072A8493246577
     created: 2022-09-14  expires: 2023-12-31  usage: S   
[ultimate] (1). Mike Ross <mike@nospammers.com>

gpg> 프롬프트에서 save를 입력하고 엔터를 누른다. 이제 키를 나열할 때 새로운 하위 키가 보일 것이다.

1
2
3
4
5
6
7
/Users/rossm/.gnupg/pubring.kbx
-------------------------------
sec   ed25519 2022-09-14 [SC] [expires: 2023-12-31]
      BF4801B69A3FD61C1454722495BB0086DDD86937
uid           [ultimate] Mike Ross <mike@nospammers.com>
ssb   cv25519 2022-09-14 [E] [expires: 2023-12-31]
ssb   ed25519 2022-09-14 [S] [expires: 2023-12-31]

이제 공개 키, 비밀(마스터) 키, 비밀 하위 키 세 파일을 백업해야 한다. 출력 경로/이름과 키 ID를 자신의 시스템에 맞게 조정한다.

1
2
3
gpg --output mike.public.gpg --export BF4801B69A3FD61C1454722495BB0086DDD86937
gpg --output mike.secret.gpg --export-secret-key BF4801B69A3FD61C1454722495BB0086DDD86937
gpg --output mike.secsub.gpg --export-secret-subkeys BF4801B69A3FD61C1454722495BB0086DDD86937

이 파일들을 하드 드라이브나 USB 메모리 스틱과 같은 안전한 오프라인 저장 매체에 복사한다. 이는 백업용으로 저장하고 로컬 기기에는 두지 않기 위함이다.

이제 다음 명령어를 실행하여 로컬 GPG 인스턴스에서 비밀 키를 제거한다.

1
gpg --delete-secret-keys <key-id>

다음으로, 로컬 기기에서 사용할 비밀 하위 키만 다시 가져온다. 하위 키를 사용하면 로컬 장치에서 서명과 암호화를 할 수 있지만, 마스터 키를 다시 가져오지 않으면 새 하위 키를 생성할 수 없다.

1
gpg --import mike.secsub.gpg

비밀 하위 키를 다시 가져오고 list-keys 명령을 실행하면 비밀 키가 다시 있는 것을 볼 수 있다. 그러나 출력에서 sec#를 주목해야 한다. #는 마스터 비밀 키가 아닌 비밀 하위 키만 존재한다는 의미이다.

1
2
3
4
5
6
7
/Users/rossm/.gnupg/pubring.kbx
-------------------------------
sec#  ed25519 2022-09-14 [SC] [expires: 2023-12-31]
      BF4801B69A3FD61C1454722495BB0086DDD86937
uid           [ultimate] Mike Ross <mike@nospammers.com>
ssb   cv25519 2022-09-14 [E] [expires: 2023-12-31]
ssb   ed25519 2022-09-14 [S] [expires: 2023-12-31]

마지막 단계로, 로컬 기기에서 내보낸 세 개의 키를 삭제한다. 이제 이 키들은 오프라인 백업 하드 드라이브에만 존재해야 한다.

축하한다! GPG 키 쌍을 성공적으로 생성하고, 마스터 키를 안전한 저장 위치에 백업하고, 로컬 기기에서 암호화와 서명에 하위 키를 사용하도록 설정했다.

This post is written by david61song