작은숲:위키노트/GnuPG
GnuPG는 PGP(Pretty Good Privacy)를 대체하기 위한 자유 소프트웨어이다. PGP는 암호에 관한 미국의 수출 금지법 때문에 미국 이외의 지역에서는 사용이 금지되어 있다. 그래서 PGP를 미국의 수출금지법에 저촉되지 않는 자유 소프트웨어로 만드는 움직임이 시작되었는데 그 중 하나가 GnuPG이다. GnuPG의 경우 특허가 걸려 있는 IDEA 알고리즘을 쓰지 않기 때문에 자유로운 배포가 가능하다.
GnuPG를 사용하기 위해서는 우선 패키지를 설치해야 한다. GnuPG는 GnuPG 홈페이지 에서 구할 수 있다.
설치가 완료되었으면, 자신의 공개키와 비밀키를 만든다. 여기서 공개키라는 것은 다른 사람에게 공개하는 키로서 상대방은 이 키를 가지고 보내고자하는 문서를 암호화시킬 수 있다. 이렇게 암호화된 문서는 비밀키를 이용해서 해독할 수 있다.
GnuPG를 이용해서 공개키와 비밀키를 만드는 방법은 간단하다. GnuPG를 --gen-key 옵션을 줘서 실행시키면 된다. 여기에서는 GnuPG 버전 1.0.6을 기준으로 설명한다. 만약 자신의 홈디렉토리에 .gnupg라는 디렉토리가 없는 경우에는 아래와 같은 메시지를 보이며 종료될 것이다.
$ gpg --gen-key
gpg (GnuPG) 1.0.6; Copyright (C) 2001 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.
gpg: /home/hhyoon/.gnupg: directory created
gpg: /home/hhyoon/.gnupg/options: new options file created
gpg: you have to start GnuPG again, so it can read the new options file
이때는 그냥 다시 한번 위 명령을 실행시켜주면 된다.
$ gpg --gen-key
gpg (GnuPG) 1.0.6; Copyright (C) 2001 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.
gpg: /home/hhyoon/.gnupg/secring.gpg: keyring created
gpg: /home/hhyoon/.gnupg/pubring.gpg: keyring created
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
Your selection?
세가지 선택 항목이 있는데 이중에서 일반적으로 사용하는 것은 1번이다. DSA는 오직 사인만 할 수 있는 키이고, ElGamal은 사인과 암호화를 할 수 있다. 별다른 이유가 없다면 1번을 선택하면 무난하다.
Your selection? 1
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)
다음 질문은 "키의 길이를 얼마로 할 것인가"이다. 보통 기본으로 되어 있는 1024 비트를 선택하면 된다. 이 키의 길이가 길면 길수록 더 안전하기는 하지만 아무래도 암호화하는 시간이 더 걸리게 된다. 그래서 개인적인 용도로 사용하는 경우에는 1024 비트 정도가 적당하다.
What keysize do you want? (1024) 1024
Requested keysize is 1024 bits
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)
이 질문은 키의 유효 기간을 정하는 것이다. 상당히 보안에 신중을 기해야하는 경우가 아니라면 기본값을 선택한다.
Key is valid for? (0) 0
Key does not expire at all
Is this correct (y/n)? y
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:
이제 키에 들어갈 이름과 이메일 주소를 입력할 차례이다. Comment 항목에는 전화 번호나 간단한 문단과 같이 따로 적을 것이 있는 경우 입력한다. 물론 공백으로 남겨도 상관 없다. 그런 후, 모든 것을 제대로 적었다면 o를 눌러준다. 잘못된 것이 있다면 적절히 선택해서 다시 입력하도록 하자.
Real name: Hyunho Yoon
Email address: hhyoon@kldp.org
Comment:
You selected this USER-ID:
"Hyunho Yoon <hhyoon@kldp.org>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.
Enter passphrase:
이제 나오는 것은 키를 만드는데 있어 제일 중요한 부분이다. 바로 키의 암호를 입력하는 것인데, 이 암호는 비밀키를 잃어버리더라도 비밀키를 못쓰게 만들수 있으므로 아주 중요하다. 절대로 잊지 않도록 신중하게 선택해야 한다. 비밀번호를 두번 입력하고 나면, 이제 키를 만들어낸다.
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.
..+++++.+++++++++++++++++++++++++.++++++++++..+++++.++++++++++.+++++++++++++++.
++++++++++++++++++++++++++++++...+++++.++++++++++..++++++++++...+++++>+++++....
...............................+++++^^^
public and secret key created and signed.
이렇게 해서 공개키와 비밀키 한쌍이 만들어졌다. 이렇게 만들어진 키들은 ~/.gnupg 디렉토리 아래에 pubring.gpg와 secring.gpg라는 이름으로 저장되어 있다.
이제 공개키 목록에 저장되어 있는 키를 보기 위해 --list-keys 옵션을 사용한다.
$ gpg --list-keys
/home/hhyoon/.gnupg/pubring.gpg
----------------------------
pub 1024D/9962D0D9 2002-08-26 Hyunho Yoon <hhyoon@kldp.org>
sub 1024g/7C67B8B6 2002-02-04
실제로 공개키를 사용하기 위해서는 공개키를 다른 사람에게 전달해야 한다. pubring.gpg 파일을 주는 것은 아니고, 공개키를 하나의 파일로 만들어서 줄 수 있다. 이는 --export 옵션을 사용하면 된다.
$ gpg --output hhyoon.gpg --export Hyunho
여기에서는 --output 옵션을 사용해서 출력 파일을 지정해줬고, 공개키 목록에 있는 키 중에서 Hyunho라는 단어를 가지고 있는 키를 공개키로 만들어냈다. 이렇게 만들어진 키는 바이너리 형태의 파일이다. 그래서 보통 아스키 형태의 파일을 만드는데 이렇게 하기 위해서는 --armor 옵션을 사용한다.
$ gpg --output hhyoon.gpg --armor --export Hyunho
$ cat hhyoon.gpg
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
mQGhBDxeCMQRBACroHGVGWiGkFhBtuDsk3ecA9NavIxy8cl3XGkfbHV3SZOtnSOZ
ktL2kz7UPjTZcfW531FWp5KPt5KyiUgoulQpR9/2ShuBVjmFRXvjyKwh0CYMK5b4
iqOP/Uk4d77nEMcG9QhfRYeBul0zdvDLRQeT3OxYUZmddxvAwc9kP5IIuwCgk27f
f60iMXOzk3wgZGmVsOlM3WUD92V+qWc6cvXJIzI0xnTsdvODxnDoytSavFW5jWe0
iUZyUitiu2uXXW9P3MYf16ehk/CANcZEnGCVLaieCAkDAscgLIaLYPPV+5QXYbj9
nUeq2t9+yq1OBS8QtLnz887gTacJzHDTOUKH22vQEBrSEG/6XXjl+Amye0quPA4q
JOwEAKs3fQaaJbJCgO87u13AgRP5PdKRZfIJxmZyYLA2vGqPnb51kb78j0poqDem
AXxhw9QDRaTeh+wIltly0uQvr0/0cnutkq+objUXFX0x4kDhoLdAEkMSyas28r1r
1blHnHsHSTOoLbuyHEBMou2Bf3cDE6SY7OfrCj9SAAPiiLr9tB1IeXVuaG8gWW9v
biA8aGh5b29uQGtsZHAub3JnPohXBBMRAgAXBQI8XgjFBQsHCgMEAxUDAgMWAgEC
F4AACgkQihNmKWT46jnV8wCgjxXro+DYWnlLIUOE/2bWWDLsmGIAn1zAsPRJG8wv
YhQ1V8VCH0uMI2eQuQENBDxeCMgQBADSQ186tTpnIG4Uj1WpihyzDT6J3HzENUcX
zbFI06QVB+XsLr5EdgsDcDTBgpE7Bu3lpXneGCKE/XHTtMPY7Un58ByzD5iR2GLS
qeNnwfnyDsfUAusCqOvsmztqlRZsNTJ1EqNnRw1D7xRaIDkgZd7/sGKHMVaICkcD
U+VSjLKOIwADBgP+PRYMaY+hhtWcvmYQwZb6NVjVVyUrq2lNonGVBz/eWvoaPTv1
aZEmjSxjuUsO6WIMY3WwRhIAD4h3K3BlPeiLqhkzZqMLVlCXe+9fF2ntHSTeQNxG
DGXr/CAwxwspB1W6WMl2XxXKuqxkaqqdllq5o1aJOnFybgRB+mkxK80kexWIRgQY
EQIABgUCPF4IyAAKCRCKE2YpZPjqOX4oAJ4hO47+LDX9r/ycPZooYH/b69/YYgCf
cfJNcM0ZtJs3HaP+RLKbddIhD74=
=NcBw
-----END PGP PUBLIC KEY BLOCK-----
이렇게 만들어진 공개키를 다른 사람들에게 주면 그 사람은 이 공개키를 이용해서 암호화할 수 있다. 만약 다른 사람의 공개키가 필요하다면 그 사람에게 공개키를 달라고 해서, 받은 공개키를 자신의 공개키 목록에 추가하면 된다. 예를 들어 Hans라는 사람의 공개키를 받아 내 공개키 목록에 추가시키고자 할 때는 다음과 같이 한다.
$ gpg --import hans.gpg
gpg: key 5EB80483: public key imported
gpg: /home/hhyoon/.gnupg/trustdb.gpg: trustdb created
gpg: Total number processed: 1
gpg: imported: 1
$ gpg --list-keys
/home/hhyoon/.gnupg/pubring.gpg
----------------------------
pub 1024D/64F8EA39 2002-02-04 Hyunho Yoon <hhyoon@kldp.org>
sub 1024g/7C67B8B6 2002-02-04
pub 1024D/5EB80483 2002-03-19 Hans <hans@nobody.org>
sub 1024g/F830EF99 2002-03-19
이러한 방법으로 다른 사람의 공개키를 추가할 수 있으며, 서로 암호화된 혹은 사인된 문서를 주고 받을 수 있다.
| 배포판 | |
|---|---|
| 서버 프로그램 | |
| 시스템 도구 | |
| 시스템 보안 | |
| 시스템 설정 | |
| HOWTO 문서 | |
| 사용자 설정 | |
| 활용 | |
| 명령어 | |