GnuPG/ko

이 작은 안내서에서는 보안 통신용 도구인 GnuPG 기본 사용 방법을 알려드립니다.

이 안내서에서 무얼 배울 수 있을까
이 안내서에서는 독자 여러분이 공용키 암호화 기법, 암호화, 디지털 서명에 대해 잘 알고 있음을 가정합니다. 만약 그렇지 않다면 이나 GnuPG 핸드북 2장을 보시고 여기로 다시 돌아오십시오.

이 안내서에서는 GnuPG 설치 방법, 키 쌍 만드는 방법, 키 모음에 키 추가하는 방법, 키 서버에 공용키를 제출하고 서명, 암호화, 검증, 보내고 받은 메시지 해독에 대한 모든 내용을 알려드립니다. 다른 사람들이 사용자 로컬 컴퓨터의 내용을 훔쳐보는걸 막기 위해 어떻게 파일을 암호화 하는지도 배웁니다.

필요한 프로그램 설치
간단한 수준에서 필요한 일은  명령의 실행입니다. 오늘날 많은 프로그램이 gpg 같은 기능을 지원하기에, USE 변수에 crypt 플래그를 추가하는 것이 좋습니다. 전자메일 클라이언트로 gnupg를 사용하려면 pine, mutt , 모질라 썬더버드 , 에볼루션 (에볼루션은 그놈의 마이크로소프트 아웃룩처럼 동작하는 프로그램입니다), KDE의 KMail을 사용하시면 됩니다.

KDE를 사용한다면 에 관심있을 것입니다. 이 조그마한 프로그램은 키 쌍을 만들고 ASCII 파일에서 키를 가져오며 가져온 키로 서명하고, 키를 내보내는 등 몇가지 기능을 가지고 있습니다.

키 만들기
키를 만들려면 그냥 를 실행하십시오. 처음에 실행할 때 몇가지 디렉터리를 만듭니다. 키를 만들려면 다시 실행하십시오:

사용하려는 키의 형식을 선택할 수 있습니다. 대부분 사용자는 기본 RSA 와 RSA를 사용합니다. 그 다음은 키 크기 입니다. 크면 클수록 좋지만, DSA/ElGamal 키로는 2048바이트 이상 사용할 수 없습니다. 일반적으로 보통 이메일에 대해서는 2048 바이트면 충분합니다.

경과 기간이 도래하면, 조금 작은 키가 낫지만, 대부분 사용자는 유효 기간을 없애거나 2~3년 정도 설정할 수 있습니다.

키 크기 지정

이제 여러분의 신상 정보를 입력할 떄입니다. 다른 사람에게 공용키를 보내려면 실제 전자 메일 주소를 사용해야 합니다.

사용자 정보 입력

이제 키 암호를 두 번 입력하십시오. 강력한 암호를 사용하는 것이 좋습니다. 누군가가 개인키를 얻거나 암호를 깨면, "여러분"이 서명한 메시지를 보낼 수 있으며, 다른 사람들은 "여러분"이 보낸 메일로 착각하게 할 수 있습니다.

그러면, GnuPG가 키를 만듭니다. 마우스를 움직이거나 백그라운드에 mp3를 재생하면 임의 데이터를 만드는 처리 과정을 더욱 빨리 진행하는데 도움이 됩니다.

폐기 인증 만들기
키를 만들고 나면 폐기 인증을 만들어야 합니다. 이 과정을 진행하면 여러분의 키에 대해 심각한 일이 벌어졌을 경우(누군가가 키 또는 암호를 가로챘을 때) 키 폐기를 할 수 있도록 합니다.

명령은 공용 키 모음의 키를 보여줍니다. 키 ID를 볼 때 이 명령을 사용해서 폐기 인증을 만들 수 있습니다. 이제, 모든 키를 .gnupg 디렉터리에, 안전한 매체(두 장의 플로피디스크 또는 안전한 위치에 보관할 CD-R)에 폐기 인증을 복사하시는 것이 좋습니다. 파일은 키를 폐기할 때 사용할 수 있으며, 한 번 사용하고 나면 나중에 다시 사용할 수 없음을 기억하십시오.

키 내보내기
키를 내보내려면 와 같이 입력하십시오. 거의 언제든 키 ID 또는 키를 식별할 만한 문자열(여기서는 이메일 주소를 사용합니다)을 사용할 수 있습니다. John은 이제 친구에게 보내거나 웹 페이지에 넣어 다른 사람들이 John과 안전하게 통신할 수 있도록 하는 파일을 가집니다.

키 가져오기
공용 키 모음에 파일을 추가하려면, 먼저 키를 가져온 다음, 키 지문을 확인해야 합니다. 지문을 인정한 다음에는 검증해야 합니다.

이제 Luis Pinto(원 저자 친구)의 공용키를 공용 키 모음에 추가해보도록 하겠습니다. 친구를 불러 키 지문을 요청한 다음,  명령으로 출력한 지문과 비교하도록 하겠습니다. 키를 확인하고 나면 공용 키 모음에 추가합니다. 이 경우, Luis의 키는 2003년 12월 1일에 무효화되며, 유효기간이 경과하는 날에 키가 필요하면 다시 요청할 것입니다.

키 서버로 키 보내기
Now that you have your key, it is probably a good idea to send it to the world key server. There are a lot of keyservers in the world and most of them exchange keys between them. Here we are going to send John Doe's key to the subkeys.pgp.net server. This uses HTTP, so if you need to use a proxy for HTTP traffic don't forget to set it. The command for sending the key is:  where   is the key ID. If you don't need a HTTP proxy you can remove the --keyserver-options honor-http-proxy.

You can also send other people's keys that you have signed to the keyserver. We could send Luis Pinto's key to the keyserver. This way someone who trusts your key can use the signature that you have placed there to trust Luis's key.

키 서버에서 키 가져오기
Now we are going to search for Gustavo Felisberto's key and add it to the keyring of John Doe (just in case you did not notice Gustavo Felisberto is the author this guide :)).

As you can see from the server response I have a few keys submitted to the key server, but I currently only use B9F2D52A. Now John Doe can get it and sign it if he trusts it.

GPG 에이전트가 무엇인가요?
Sometimes working with certain applications requires you to use your GPG key very frequently, which means that you have to type your passphrase a lot of times. Several applications used to support a passphrase caching mechanism to make life easier for users. However, this disallowed sharing this cache across programs (how secure would that be?) and forced applications to reinvent the wheel over and over again.

A GPG agent is a separate application that GPG uses to cache the passphrase in a standard and secure way. It allows applications to use GPG concurrently: if you enter your passphrase while working in one application, the other application can work with GPG without reiterating the request for the passphrase to unlock the key - if the GPG agent is configured to allow so, of course.

Gentoo provides a few GPG agent applications. The  package contains what could be considered the reference one, and will be the one we'll use in this document.

Configuring gpg-agent and pinentry
GnuPG includes  and. is the helper application that gpg-agent uses to request the passphrase in a graphical window. It comes in three flavors: it can popup a window using the gtk+, Qt, or curses library (depending on your USE flags in ).

If you installed  with more than one popup window type, you can choose between them with   :

Now create a file called and enter the following lines which define the default timeout of the passphrase (e.g. 30 minutes) and the application to be called for when the passphrase should be retrieved the first time (e.g. the gtk+ version of pinentry).

Now configure GnuPG to use an agent when appropriate. Edit and add the following line:

이제 GPG 에이전트를 시스템에서 사용할 수 있도록 설정이 (거의) 다 되었습니다.

GPG 에이전트 자동으로 시작하기
그래픽 환경으로 KDE를 사용한다면, 를 편집하여 (시스템 전체) 또는 (로컬 사용자)에 따라 주석을 제거한 후 다음 명령을 추가하여 KDE를 시작할때 자동으로 GPG 에이전트를 시작할 수 있게 하십시오:

Additionally, uncomment the following in (system-wide) or add it to  (local user):

If you use a different graphical environment, put that line (the same one as mentioned above) in (if you use   ) or  (if you use XDM/GDM/KDM/...).

암호화 및 서명
Let's say that you have a file that you wish to send Luis. You can encrypt it, sign it, or encrypt it and sign it. Encrypting means that only Luis will be able to open it. The signature tells Luis that it was really you who created the file.

The next three commands will do just that, encrypt, sign and encrypt/sign.

This will create binary files. If you wish to create ASCII files, just add a  to the beginning of the command.

해독 및 서명 검증
Suppose that you have received a file which is encrypted to you. The command to decrypt it is. This will decrypt the document and verify the signature (if there is one).

키 없이 암호화 및 해독
It is also possible to encrypt files using passwords instead of keys. Well, the password itself will function as the key - it will be used as a symmetric cypher. You can encrypt the file using  's   argument; decrypting uses the same command as we talked about before.

GnuPG will ask for a passphrase and a passphrase verification.

고급 기능
There are some nice advanced features in GnuPG. To find them, open the file.

Search for the above two lines and uncomment them. With this any time GnuPG needs to check a signature and it does not find the public key on the local keyring it will contact the key server at subkeys.pgp.net and will try to fetch it from there.

Another nice command is. This will contact the keyserver defined in the options file and refresh public keys in your local key ring from there, searching for revoked keys, new IDs, and new signatures on keys. You should probably run this once or twice a month so that if someone revokes his key you will be notified.

전자메일 서명하기
95% of the time you will use GnuPG with email, signing/encrypting your outgoing messages and reading signed/encrypted messages. So it is only fair that I talk about that first.

There are two ways two sign/encrypt a email with GnuPG, the old way and the new way :). In the old way messages would appear in plain text, with no possible formatting and attached files would be unsigned/unencrypted. Here is an example of a message signed the old way:

A plain text signature

Messages this way are no good in today's world, where we have nice GUIs and email readers that understand html.

To solve this an addition to the MIME (Multipurpose Internet Mail Extensions) was created. This adds a field to the email that tells the mail reader that the full content of the message is signed and/or encrypted. The problem with this is that not all mail readers support this. And some even mess up the content; Microsoft's Outlook is famous for not working with this.

Kgpg
Kgpg is a nice GUI for GnuPG. In the main screen you can paste the text that you wish to sign or encrypt, and you can also paste the ASCII armored text that you which to decrypt.

From within the main screen you can decrypt text (you will have to provide your password), encrypt other files, paste new text to sign....

Seahorse
Seahorse aims to be a GnuPG GUI interface for the Gnome desktop. The software has been evolving fast, but it still lacks many important features that can be found in Kgpg or the command line version.

KMail
If you have the  USE flag set, KMail will be compiled with gpg support, and will be able to encrypt and decrypt inline PGP mails automatically as well as encrypting OpenPGP/MIME mails. If you want to decrypt OpenPGP/MIME mails as well (which you probably want) you need to have a running GPG agent.

You can verify if KMail is properly configured by going to,  ,  ,. You should see a GpgME-based backend listed and you should be able to fill the OpenPGP checkbox. If it is listed but grayed out, click on. If the GpgME-based backend remains grayed out, KMail is not working properly.

If you still are unable to get KMail to behave, please see the KMail PGP HowTo page for more information.

Claws-Mail
This mail reader is very fast with big mailboxes, has all the nice features one wants in mail readers and works pretty well with gpg. The only problem is that it does not work with the old PGP signatures, so when you receive those kind of mails you have to hand check the signatures.

To use your gpg key with Claws-Mail just go to the account configuration and select the privacy tab. Once there just choose which key to use, probably most users will go with the default key.

기본 공용키 암호화 기법
The concept of public key cryptography was originally devised by Whitfield Diffie and Martin Hellman in 1976. When I first heard the words "public key" and "cryptography" in the same sentence back in '93 I thought to myself that it would be impossible to do such a thing. In those days there was no Internet (well there was, but not for me) so I went to the public library and asked for books on Cryptography. I must say that I was 16 at the time so the clerk there looked to me in astonishment and brought me a book for children on substitution cyphers (those where you change a letter for another like the famous Caesar Cypher or ROT-13 (Tragbb Ebpxf, naq lbh xabj vg vf tbbq orpnhfr lbh ner ernqvat guvf qbp.), (  if you cannot read the preceding text)). I was very upset with this and started to search for more info. It is good to have mathematicians in the family, because as soon as I talked to one of them I was introduced to a new world.

그리고 약간의 수학 개념이 들어갑니다:

수학적 개념

If I give you the number 35 and I tell you that this number is the product of two prime numbers it is easy to find that it was 5 and 7. But if I tell you the same for 1588522601 you will spend alot of time (or CPU cycles) to find it was 49811*31891. And if this number is really really big this task becomes "impossible". So now if I give the world my large number that is the product of two primes I know something about that number that no one else knows.

This is the basis for Public Key Cryptography (PKC) implementations today. As an (unrealistic) example, I give anyone my number and that someone will use if for cyphering a message to me. Anyone can see the cyphered message, because I am the only one who knows a shortcut to read it, anyone else will first have to "split" that big number to be able to read the message, and it is a "fact" that it is impossible to do that in a short amount of time (todays methods and the fastest computers in the world would take thousands of years to do that). In this setup the two large prime numbers would be called the PRIVATE KEY, and the large non prime number is the PUBLIC KEY.

In practice this is not 100% accurate with reality, but will give a good idea to the newcomer. For more information, check Wikipedia on the Diffie-Hellman protocol. For even more info go to the public library and grab a copy of the "Handbook of Applied Cryptography" by Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone. This book is also available online for free at the above site.

One consequence of the above is that if you cypher a message to me, and you loose the original uncyphered message you will no longer be able to retrieve it from the cyphered version.

서명
We already saw how someone can send us a cyphered message if they have our public key. But how do we know that the author of the message is really who he claims to be? Or in other words: If I receive an email from you how do I really know it was you and not someone else claiming to be you?

Remember me saying that PKC was not as simple as I had said? The idea is that when you cypher a message to me you sign it with your private key so that, when I receive it, I can first use your public key to check your signature and then use my private key to decypher the message. As you can see we could not do that in the setup I described before.

It's also very important to sign messages so that you don't have to cypher them beforehand. Now you can create messages that can be read by anyone, but that come with your "branding". And if any single character is changed in the message it can (and will) be detected.

키 서버와 서명 키
흠 .. 그런데 이전에 여러분이 메시지를 보내기 전에 여러분께 연락한적이 없었던 점을 얘기해보겠습니다. 여러분의 퍼블릭키를 어떻게 가져오고, 이게 어떻게 여러분의 키인지 제대로 알아낼까요?

이 문제를 해결하기 위해 공용 키 서버를 만들었습니다. 키 쌍을 만들면 (공용키 및 개인키), 공용키를 키 서버에 보냅니다. 이렇게 하고 나면 다른 모든 사람들이 여러분의 키를 키서버에서 받을 수 있습니다. 이렇게 해서 키를 찾는 문제를 해결합니다. 그런데 이 키가 작성자의 키인지 어떻게 알까요? 이쯤에서 반드시 이야기 해야 하는 개념을 위해, 키 서명이 존재합니다:

Key signing means that if I have the public key of another person, and I know for sure that it is really that persons key (it is my personal friend, someone I know in real life, etc.) I can sign that public key and send it to keyservers, that way I am telling the world: "This key really belongs to the person it claims to belong.". That way persons that have my public key and trust me can use that trust to trust other keys.

This can sometimes be confusing so let's see a real world situation.

Let's imagine a 3 person situation: John, Mary, and Lisa. John is a good friend of Mary but does not know Lisa; Lisa is a good friend of Mary but does not know John. One day Lisa sends John a signed email. John will fetch Lisa's Public Key from the keyserver and test the message, if all went ok he will see that whoever wrote that message also created that key. But how do I know it was really the person it claims to be?

He then sees that it is signed by Mary, which he can check because he already has Mary's key and he trusts that key. With this ring of trust he continues to conclude that the email he received was really written by Lisa.

You are now ready to use this guide, you can go back to chapter 1 and learn how to use gpg.

몇가지 문제
키에 들어간 사진에 약간의 문제가 있습니다. 어떤 버전을 사용하는지 확인하십시오. GnuPG 1.2.1-r1 이상이면 괜찮습니다, 그러나 그 이전의 버전이라면 문제가 있을 수 있습니다. 또한 대부분의 키 서버에서는 키랑 사진이 붙어있는걸 별로 좋아하지 않으므로, 사진을 추가하지 않는다면 괜찮습니다.

gnupg 최신 버전에서는 공용 서버로 키 모음의 모든 키를 보내는데 사용하는  명령이 동작하지 않는 것 같습니다.

여기에 없는 내용
는 매우 복잡한 도구라, 여기 언급한 내용 보다 더 많은 일을 할 수 있게 합니다. 이 문서는 GnuPG를 처음 다루는 사용자를 위한 것입니다. 더 많은 내용은 GnuPG 웹사이트를 참고하세요.

,,   그리고 윈도우즈 도구 같은 다른 도구에 대해선 적지 못했지만 나중에 이 문서의 내용을 좀 더 늘려보겠습니다.

고마운 사람들
John Michael Ashley의 GnuPG 핸드북은 초보자들에게 굉장히 좋은 책입니다.

Swift(Sven Vermeulen)가 이 글을 다시 작성하라고 독촉해주었습니다.


 * 1) gentoo-doc 에 있는 팀원 모두들 대단했어요.

Tiago Serra는 절 개인 정보 분야를 다시 맏게 해주었습니다.

Acknowledgements
이 안내서에 제공한 노고에 대해 다음 작성자와 편집자분들께 감사의 말을 전하고자 합니다:


 * Gustavo Felisberto
 * John P. Davis
 * Sven Vermeulen
 * nightmorph