Create TOC

2000년 3월 8일

GnuPG

자세한 것은 GnuPG를 참고.

키 만들기

다음과 같이 한쌍(DSA 마스터 서명 키와 ?EIGamal 암호화 서브키)를 만듭니다. 생성할 키의 종류를 묻는데 기본값인 1 을 입력하거나 그냥 엔터를 치면 됩니다.

$ gpg --gen-key
gpg (GnuPG) 1.2.4; Copyright (C) 2003 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) RSA (sign only)
Your selection?

다음 키 크기도 일반적인 1024를 선택합니다.

DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
              default keysize is 1024 bits
    highest suggested keysize is 2048 bits
What keysize do you want? (1024)

다음은 키의 유효 기간을 정해 줄 수 있는데 기본값인 0은 만기일 없이 계속 사용한다는 뜻입니다.

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)
Is this correct (y/n)? y

사용자 ID를 결정하는데 영문 이름과 이메일 주소, 간단한 주석을 차례로 적어 줍니다.

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: 여기에 이름
Email address: 여기에 이메일주소
Comment:
You selected this USER-ID:
    "이름 <이메일주소>"

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

입력한 정보가 모두 맞다면 o를 누르고 계속합니다. 이제 인증키 암호(passphrase)를 입력할 차례입니다. 암호를 두번 정확히 입력하면 키를 생성하기 시작하는데 "Not enough random bytes available. Please do some other work.... blah... blah"와 같은 메세지가 나오면서 키 생성이 멈추는 경우 os 엔트로피(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.
+++++.+++++.+++++.+++++.++++++++++..+++++++++++++++.+++++++++++++++++++++++++.++
+++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++>+++++..........
......+++++

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 215 more bytes)
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.
+++++.+++++++++++++++..+++++.+++++++++++++++.+++++...+++++++++++++++++++++++++++
++++++++.+++++++++++++++++++++++++++++++++++.+++++++++++++++>.+++++.....<...++++
+...........>+++++..<+++++......................................................
.....>+++++...........................................+++++^^^
public and secret key created and signed.
key marked as ultimately trusted.

이제 키가 다 만들어 졌으면 철회 인증서 (revoke key)도 만들어 두어야 합니다.

$ gpg --out revoke.asc --gen-revoke 이름

sec  1024D/8745B520 2004-07-05   이름 <이메일주소>

Create a revocation certificate for this key? y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
>
Reason for revocation: Key has been compromised
(No description given)
Is this okay? y

만들어진 철회 인증서 (revoke.asc) 따로 잘 보관합니다.

공개키 만들기

외부에 공개하는 자신의 공개키는 --export 옵션을 사용하여 다음과 같이 만들면 됩니다.

$ gpg --out 저장할파일명 --armor --export 메일주소

참고로 내 공개키는 아래와 같습니다.


-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)

mQGiBEoYEJ0RBACzpusLnvn0d8uX6fRWZKHPczGqEpj6+5+zEF12tM7yUP7MpNbX
cKWFe6E5rOszylHhHH7pIzUYqRefrdJ/dBo/CwL9aF9dwaVPa7UOTtk1eAH0O6hX
jnjO3gFCkZv49gxYElPtI8tlgbzi+uZKXl/e81c1/IifRGs//MEFiAr3qwCg0kEb
OMk6XNRFol6by7m67qH+vj8EAJ7yE5cGHV5qhu9JoSeK13U443iEalU8dmtScbV2
pND3G8VfYjkwnbF1c5ChmghwMpcbIPO83Ar8mhHm3WDuJVzqAfLWFPeg8ww/nuyK
8G05ivngF8CbYKO0J0Q5UAszWvxhEEmS3+/pV8mhv30M0XuqhPH4A+rhHZBxDQGV
VwXxA/4zKdMYh1SH2W36Af7z2P0bG724p5NCAx4L/rlKI8BbHyQ7HiH1fotf+3Gx
qbElAHoHQJy5pDCOsYuNFCmaUQi/BKv2NJb9XFHuFyY3L05yUMPWr3wTTQc9TZSu
MP4RK2+flFbTVE2d802dNxoxIQZkRRWpSQc0T0iL97H4VHXPLLQmWXVuLXlvbmcg
Q2hvaSA8eXVueW9uZy5jaG9pQGdtYWlsLmNvbT6IYAQTEQIAIAUCShgQnQIbIwYL
CQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJECLjV6Aiglz4OmoAn1b77PyPJff7PyAo
uTRZylZ3vknKAKC4CilkIzF1MG7+6LFkfjo4xrRv9rkCDQRKGBCdEAgA7KdS2sz+
j/Ii3GRSXL7R4+f6fGMvzJwg1nJWeCvyrDL9U9J5glp0aHhxHLUZPKYa7Lk3SAEH
ooUg2Tzm/nN8ciCmjTlp6nGR1r3SzrHQC8v5DRoF4IBKPPFBBS2rU94fMUbMSCU8
Sm9qtogxAGlJ3YSL+L3LAX9LbuK0Bcs88mbbPK51qVA+7b0x5fq1hELs53k7VpfE
yrc8z8xAORv5N2uLNugboaSH2jv3xZ5yw5ugfbA171pX9/gqqEBQANPLqiOvidTs
gsuCyiVoxq/Av2Rwk5W5ZYTkjV0nTysWa1VnSKMNp896EGksWH5VYnRC6cMyARbP
cn3Ndb0cC/rA7wADBQgApPyGMYTqWE7+eW/OVcQ29NUKkvHHosqNT7Gts9cCEnga
V/ldr8ZUJLGrmFNtdmubMvo5rQdFp3Kl+vnnoyfDHWmZPSpo9vtN9G/09tWa41Oy
tLyAE8HABWhtl7Mk9M3MMnNQu7tzOWqEPUAkrljaGfwEBFK33Df69Rzk+wAxlucy
jZrxPfF9e05/43th+rYY3hUPqWCuCEMY8rTTFG9RDCrqQOwzSrUEJU3nzG5zU5qa
Df5amLduUvqfv/60VE/xCM6l5DGqr2djh8j6IG6ma21nicfB6k/k86xaEL+ssaHz
RbLBh9RSZj6ZKGiAKhFe14etB/rEEKjha/UX0oIOTohJBBgRAgAJBQJKGBCdAhsM
AAoJECLjV6Aiglz4KuoAn253QLX5+cV2B75BlIGGMaYS+A24AJ9B8y0UjXMICH5B
lE6cRED5ZZaTNw==
=XmLu
-----END PGP PUBLIC KEY BLOCK-----

공개키 포함시키기

기본적으로는 아래 명령을 수행하면 됩니다.

$ gpg --import 공개키파일명

이 상태만으로는 사용할 수 없고 몇가지 절차를 거쳐야 합니다.

우선 키 편집으로 들어갑니다.

$ gpg --edit-key 사용자ID

여기서 사용자ID는 키를 식별할 수 있는 내용(이름이나 이메일 주소. 보통은 이메일 주소가 중복되지 않기 때문에 이메일 주소를 씁니다)을 적습니다.

편집 상태로 들어가면 몇 가지 명령을 받아들이는 Command> 프롬프트 상태가 됩니다. 여기서 지문을 확인하려면 fpr, 점검하려면 check를 입력합니다. 아래는 수행 예입니다.

$ gpg --edit-key gildong@alzzalinux.com
gpg (GnuPG) 1.0.0; Copyright (C) 1999 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

pub  1024D/9F1AE76D  created: 2000-01-15 expires: never      trust: -/q
sub  1024g/EB42A0A8  created: 2000-01-15 expires: never
(1)  Gil-Dong Hong (Legendary Hero) <gildong@alzzalinux.com>

Command> fpr
pub  1024D/9F1AE76D 2000-01-15 Gil-Dong Hong (Legendary Hero) ......
        Fingerprint: ED8D 6EA3 062C E480 D619  CD4B 27A0 E471 9F1A E76D

Command> check
uid  Gil-Dong Hong (Legendary Hero) <gildong@alzzalinux.com>
sig!       9F1AE76D 2000-01-15   [self-signature]

보통은 fpr에서 얻은 Fingerprint 값이 진짜인지 확인하고(공개키 주인에게 물어보면 되겠지요 ) Command> 프롬프트에서 sing 해줍니다.

Command> sign

GnuPG를 이용한 파일 암호화

받을 사람만 풀 수 있도록 암호화 합니다. 이때 받을 사람의 공개키를 가지고 있어야 합니다.

암호화

$ gpg --output 출력파일명 --encrypt --recipient 받을사람ID 암호화할파일명

복호화

파일을 풀기 위해서는 간단합니다.

$ gpg --output 출력파일명 --decrypt 암호화된파일명

Enter passphrase:\

자신의 비밀키의 passphrase를 넣으면 복호화됩니다.

GnuPG를 이용한 서명

서명은 암호화와 다르게 자신의 비밀키를 사용합니다.

$ gpg --sign 뒤에서명을붙일파일명

서명 확인을 위해서는 자신의 공개키가 필요하며 아래와 같이 확인할 수 있습니다.

$ gpg --verify signed.txt
gpg: Signature made Sun 16 Jan 2000 05:04:51 AM KST using DSA key ID ...
gpg: Good signature from "Man-Yong Lee (Alzza Man, Bryan) ......
$ gpg --output plain.txt --decrypt singed.txt\

--sign 명령으로 서명을 붙인 파일은 바이너리 파일입니다. 따로 ASCII 파일로 서명을 붙이고 싶다면

$ gpg --clearsign 뒤에서명을붙일파일명

하면 파일명.asc 파일이 생성됩니다.

별도 서명

--detach-sig 명령 옵션을 사용하면 서명만 따로 만들어 줍니다.

$ gpg --detach-sig plain.txt
$ gpg --verify plain.txt.sig plain.txt

파일명에 .sig가 붙은 별도 서명 파일이 만들어집니다. 이 두 개를 모두 전송하면, 받은 쪽에서는 --verify 명령 옵션으로 별도 서명과 원본 파일(서명이 들러붙거나 하지 않은)을 가지고 확인할 수 있습니다. 확인한 후에는 별도 서명 파일만 지우고 원본을 읽으면 됩니다.