OpenPGP

PGP와 OpenPGP

1991년 필립 짐머만이 개발한 PGP (Pretty Good Privacy) 는 컴퓨터 파일을 암호화, 복호화 및 전자서명을 할 수 있는 소프트웨어 입니다. 이메일을 발송 할 때 내용을 암호화 하거나 서명 할 때도 많이 사용되고 있습니다.

OpenPGP 는 PGP에 대한 개방형 표준 입니다. PGP 는 사유 소프트웨어인 반면, OpenPGP는 PGP와 호환이 되는 것을 구현하기 위한 개방형 표준 이여서, 이를 바탕으로 한 다양한 소프트웨어로 PGP 키를 만들거나 관리하고, 암호화/복호화/전자서명을 할 수 있습니다. OpenPGP는 IETF RFC9580에 의해 표준이 정의되어 있습니다.

오늘날 OpenPGP는 이메일 암호화와 전자에도 사용되지만, 파일의 암호화와 전자서명에서도 사용됩니다. 특히 우분투와 같은 다수의 리눅스 배포판 에서는 배포판을 통해 배포되는 다양한 소프트웨어 패키지(*.deb 확장자의 패키지들)에 패키지를 만든 사람이 OpenPGP키로 전자서명 하여, 해당 패키지가 본인이 만든 것임을 확인할 수 있도록 합니다. 이를 통해 패키지를 사용하는 사람은, 패키지에 유효한 전자서명이 있고 어떤 사람이 만든 패키지 인지도 확인할 수 있습니다. 때문에 OpenPGP는 많은 리눅스 배포판에서 소프트웨어 공급망 보안에 중요한 역할을 하고 있다고 볼 수 있습니다.

OpenPGP의 구현체

OpenPGP 표준을 구현한 소프트웨어는 여러가지가 있습니다. 가장 많이 쓰이는 것은 GPG(GnuPG, Gnu Privacy Guard)이고, 대부분의 리눅스 배포판에 기본적으로 설치되어 있습니다. 우분투에서는 gpg 패키지로 이용하실 수 있습니다.

그 외에는 Rust 로 구현된 Sequoia-PGP (sq), GUI 앱 형태로 이용 가능한 Seahorse(“암호 및 키” 앱) (seahorse), Kleopatra(kleopatra) 등 다양한 구현체와 애플리케이션이 있습니다.

OpenPGP의 더 많은 구현체는 아래 링크에서 확인 가능합니다.

GnuPG 로 OpenPGP 키 생성 및 관리하기

키 생성하기

대부분의 경우 이미 설치되어 있으나, 혹시 설치가 필요하다면 gpg 패키지를 설치 합니다.

sudo apt install gpg

아래 명령으로 OpenPGP 키 생성을 시작 합니다.

gpg --full-generate-key

키 유형 선택

먼저 아래와 같이 키 유형을 선택하게 됩니다. 보통 (1) RSA and RSA 혹은 (9) ECC (sign and encrypt) 을 많이 사용 하는데, 전자의 경우 RSA 암호화 방식으로 과거부터 널리 사용된 방식입니다. 최근에도 호환성을 위해 많이 사용되고 있습니다. 후자인 ECC는 타원곡선 암호(Elliptic Curve Cryptography) 방식으로, 최근 들어 널리 사용되고 있고, 최근 출시된 버전의 GnuPG 는 기본값으로 사용하고 있기도 합니다.

gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

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
Your selection? 

(1) RSA and RSA

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits

RSA 방식의 경우, 키 길이를 지정해야 합니다. 키 길이는 적어도 3072 이상으로 하는것이 안전하고, 보통 한번 만들면 몇년 이상 사용하므로, 이를 고려하면 4096 정도로 설정 하는것이 권장 됩니다.

(9) ECC (sign and encrypt)

Please select which elliptic curve you want:
   (1) Curve 25519 *default*
   (4) NIST P-384
   (6) Brainpool P-256
Your selection? 1

ECC 방식의 경우 어떤 유형의 타원곡선 알고리즘을 사용할지 선택합니다. 더 최신이고 표준적인 Curve 25519를 가장 많이 사용하며, 보안 수준과 성능이 우수합니다.

키 유효기간 선택

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) 2y
Key expires at 2027년 12월 14일 (화) 오후 04시 48분 23초 KST
Is this correct? (y/N) y

키 유효기간을 선택 합니다. 보통 0으로 입력하여, 만료되지 않도록 설정하는 것은 권장되지 않습니다. 비밀키를 분실하면 키서버에 업로드 했거나 다른 사람에게 공유한 공개키를 만료 처리 할 방법이 없기 때문입니다. 그래서 보통 2년 정도로 설정하고, 만료 전에 2년씩 연장하는 방법이 권장 됩니다.

신원 정보 입력

GnuPG needs to construct a user ID to identify your key.

Real name: 홍길동
Email address: gildong.hong@example.kr
Comment: 
You are using the 'utf-8' character set.
You selected this USER-ID:
    "홍길동 <gildong.hong@example.kr>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

본인의 신원정보를 입력합니다. 성함은 본인의 실명으로, 신분증(주민등록증, 여권 등)에 나와있는 것 기준으로 입력하는 것이 좋습니다. 혹시 나중에 외국 사람들과 키사이닝을 할 예정이라면, 여권에 나와있는 영문 표기 기준으로 입력하는 것을 권장합니다. 이메일 주소는 본인이 자주 사용하는 실제 이메일 주소로 입력하세요.

키 암호 입력 및 키 생성 완료


생성할 OpenPGP 키에서 사용할 암호를 입력 해 줍니다.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: revocation certificate stored as '/home/youngbin/.gnupg/openpgp-revocs.d/XXXXFD7907XXXX48F004AC8B3357XXXXF831XXXX.rev'
public and secret key created and signed.

pub   ed25519 2025-12-14 [SC] [expires: 2027-12-14]
      XXXXFD7907XXXX48F004AC8B3357XXXXF831XXXX
uid                      홍길동 <gildong.hong@example.kr>
sub   cv25519 2025-12-14 [E] [expires: 2027-12-14]

이후, 랜덤 바이트 생성 안내가 나오는데, 잠시 마우스나 키보드를 입력 하거나 웹 브라우징 등 작업을 해 주면 됩니다. 그러면 키 생성이 완료 됩니다.

1개의 좋아요