GnuPG/ko

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

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

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

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

Installing Kgpg ( emerge kde-base/kgpg ) might interest you if you use KDE. This small program allows you to generate key pairs, import keys from ASCII files, sign imported keys, export keys and a few more features.

키 만들기
To create your key, just run gpg --gen-key. The first time you run it, it will create some directories; run it again to create the keys:

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

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

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

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

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

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

The gpg --list-keys command lists keys in your public keyring. You may use it to see the ID of your key so that you can create the revocation certificate. Now it is a good idea to copy all the .gnupg directory and the revocation certificate (in ASCII armor - ) to some secure medium (two floppy's or a CD-R you store in safe location). Remember that can be used to revoke your keys and make them unusable in the future.

키 내보내기
To export your key, you type gpg --armor --output john.asc --export john@nowhere.someplace.flick. You can almost always use the key ID or something that identifies the key (here we used an email address). John now has a that he can send his friends, or place on his web page so that people can communicate safely with him.

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

Now we will be adding Luis Pinto's (a friend of mine) public key to our public keyring. After giving him a call and asking him for his key fingerprint, I compare the fingerprint with the output of the fpr command. As the key is authentic, I add it to the public keyring. In this particular case, Luis's key will expire in 2003-12-01 so I am asked if I want my signature on his key to expire at the same time.

키 서버로 키 보내기
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 keys.gnupg.net server. This uses HTTP, so if you need to use a proxy for HTTP traffic don't forget to set it ( export http_proxy= http://proxy_host:port/ ). The command for sending the key is: gpg --keyserver keys.gnupg.net --keyserver-options honor-http-proxy --send-key 75447B14 where 75447B14 is the key ID. If you don't need a HTTP proxy you can remove the --keyserver-options honor-http-proxy option.

또한 여러분이 서명한 다른 사람의 키를 키서버에 보낼 수 있습니다. Luis Pinto의 키를 키 서버로 보낼 수 있습니다. 이런 방법을 통해 여러분의 키를 믿는 사람이 Luis 의 키를 믿을 수 있게 놓은 서명을 사용할 수 있습니다.

키 서버에서 키 가져오기
이제 Gustavo Felisberto의 키를 검색하고 John Doe의 키 모음에 추가하도록 하겠습니다((그냥 이 경우에는 Gustabo Felisberto가 이 안내서의 작성자 임을 알아채지 못합니다 :))

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 에이전트가 무엇인가요?
가끔 몇가지 프로그램을 다루다보면 GPG키를 매우 빈번하게 사용하도록 요구하는데 이는 암호를 수도 없이 입력한다는 의미입니다. 그런 몇가지 프로그램들은 사용자들에게 편의 제공 목적으로 암호 캐싱 기술을 지원하는데 사용합니다. 그러나 프로그램 사이에서 이 캐시를 공유(보안이 어떻게 될까요?)하게끔 하는건 허락되지 않으며 프로그램에 하던 동작을 계속 하도록 강제하기도 합니다.

GPG 에이전트는 GPG가 안전한 표준 방식으로 암호를 캐싱하도록 사용하는 별개의 프로그램입니다. 이 프로그램은 다른 프로그램이 GPG를 동시에 사용하도록합니다. 한 프로그램을 사용중에 암호를 입력하면 다른 프로그램은 키 잠금을 풀기 위해 암호를 재차 요구하지 않고도 동작할 수 있습니다. GPG 에이전트가 이걸 허용하도록 했느냐면, 물론입니다.

젠투에서는 GPG 에이전트 프로그램을 제공합니다. 꾸러미에 참조할 것으로 간주할 수 있는 요소를 넣었으며, 이 문서에서 앞으로 활용하겠습니다.

gpg-agent와 pinentry 설정
GnuPG includes. Pinentry is a 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 libraries (depending on the USE flags set in ).

If you installed with more than one popup window type, it is possible to choose between them with the eselect pinentry command:

이제 파일을 만들고, 암호 입력 기본 제한시간을 정의하는 다음 줄을 입력한 후 (pinentry GTK+ 버전의 경우) 처음에 암호를 가져와야 하는경우 프로그램을 호출하도록 해보겠습니다.

이제 적당한 때에 에이전트를 사용하도록 GnuPG를 설정하겠습니다. 를 편집하여 다음 줄을 추가하십시오.

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

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

게다가 (시스템 범위)의 다음 줄을 제거하거나, 이 줄을  (로컬 사용자)에 추가하십시오:

각기 다른 그래픽 환경을 사용한다면, ( 를 사용하는 경우) 또는 (XDM/GDM/KDM을 사용하는 경우)에 (위에 적힌대로) 줄을 추가하십시오.

암호화 및 서명
이제 Luis에게 보내려는 파일이 있다고 해보겠습니다. 이걸 암호화 할 수 있고, 서명할 수도 있으며, 심지어는 암호화와 서명을 동시에 할 수도 있습니다. 암호화는 Luis만이 열 수 있음을 의미하며, 서명은 Luis에게 이 파일을 만든 진짜 사람이 여러분임을 알려줍니다.

다음 세가지 명령으로 암호화, 서명, 그리고 암호화 및 서명을 처리할 수 있습니다.

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

해독 및 서명 검증
Suppose that you have received a file which is encrypted to you. The command used to decrypt it is gpg --output document --decrypt encrypted_doc.gpg. 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 gpg --symmetric ; decrypting uses the same command as we talked about before.

GnuPG에서는 암호를 물어보고 암호 검증을 수행할 것입니다.

고급 기능
GnuPG에는 몇가지 고급 기능이 있습니다. 이를 찾아보려면 파일을 열어보십시오.

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 keys.gnupg.net and will try to fetch it from there.

Another nice command is gpg --refresh-keys. 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.

전자메일 서명하기
GnuPG를 전자 메일과 사용하는 시간의 95%는 보내는 메시지를 서명/암호화하고, 서명한/암호화한 메시지를 읽습니다. 따라서 이 이야기를 먼저 하는게 지극히 당연하겠습니다.

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:

이 방식 대로의 메시지는 HTML을 볼 수 있는 멋들어진 GUI와 전자메일 보기 프로그램이 있기에 최근에는 별로 좋지 않습니다.

이러하나 추가 문제를 해결하기 위해 MIME(다중목적 인터넷 메일 확장)을 만들었습니다. 이 규약을 통해 메일 보기 프로그램에 메시지 전체 내용을 서명했는지 암호화했는지를 알려주는 필드를 추가했습니다. 이에 대한 문제는 모든 메일 보기 프로그램이 이 기능을 지원하지 않는다는 점입니다. 그리고 내용을 잘라버리기도 합니다. 마이크로소프트 아웃룩은 이 기능을 지원하지 않기로 유명한 프로그램입니다.

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 wish to decrypt.

주 화면 내에서 또한 문장(암호도 적어야 합니다)을 해독할 수 있고 다른 파일을 암호화 할 수 있으며, 서명할 새 문장을 붙여넣을 수 있습니다....

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
USE 플래그를 설정했다면 KMail은 gpg 지원을 포함하여 컴파일 하며, OpenPGP/MIME 메일을 암호화하고, 자체 PGP 메일을 자동으로 암호화/해독 할 수 있습니다. OpenPGP/MIME 메일을 이와 같이 해독하려면(아마 그러고 싶으실 것입니다) GPG 에이전드를 실행하고 있어야 합니다.

To verify if KMail is properly configured navigate 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.

KMail에서 이 기능을 쓸 수 없다면, KMail PGP HowTo 에서 더 많은 내용을 알아보십시오.

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

To use your gpg key with Claws-Mail navigate to. 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.), ( emerge rotix 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 a lot 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 (today's 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.

실제로 100% 정확하진 않지만, 괜찮은 새로운 아이디어를 제시할 것입니다. 더 많은 정보는 Diffie-Hellman 프로토콜에 대한 위키피디어 문서를 확인하십시오. 이보다 더 많은 내용을 찾아보려거든 공공 도서관을 찾아가서 Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone 공저 "Handbook of Applied Cryptography"(원서)를 찾아보십시오. 이 책은 위 사이트에서 자유롭게 온라인으로 찾아볼 수 있습니다.

이 결과중 하나로 저에게 보내는 메시지를 암호화 하고 암호화 하지 않은 원본 메시지를 분실하면, 더 이상 암호화한 버전으로부터 원본 메시지를 되가져올 수 없습니다.

서명
우리 소유의 공용키를 가진 어떤 사람이 암호화 메시지를 어떻게 보낼 수 있는지 이미 살펴보았습니다만, 우리가 따지는 그 사람이 진짜 메시지의 작성자인지 어떻게 알 수 있을까요? 다른 말로 표현하자면, 제가 여러분한테서 전자 메일을 받았을 경우, 작성자가 어떻게 진짜로 여러분이었는지, 그 누구조차도 여러분이라고 따지는 사람이 없는 상황에서 알 수 있을까요?

제가 언급한 바대로 PKC가 그리 단순한 것이 아니라는걸 기억하십니까? 저에게 여러분이 보낼 메시지를 암호화 하면 여러분의 개인키로 서명하여 제가 받으면, 먼저 여러분의 공용키를 서명을 검증하는데 사용할 수 있고 메시지를 해독하는데 제 개인키를 사용할 수 있는 아이디어가 있습니다. 여러분이 보시는 대로 제가 이전에 설명한 설정에서는 그렇게 못합니다.

메시지에 서명하는 행위는 매우 중요하므로, 사전에 암호화 할 필요가 없습니다. 이제 누군가가 읽을 수 있는 메시지를 만들 수 있지만, 여러분을 "브랜딩(상징)"이 딸려옵니다. 메시지 상의 단일 문자가 바뀌면, 메시지가 삭제될 수 있(으며 그렇게 되겠)습니다.

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

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

키 서명이란 다른 사람의 공용키를 가지고 있고, 그 사람의 키(개인적인 친구이며, 실제 생활에서 알고 있다든가 등)인지 확실하게 알고 있다면, 공용키에 서명할 수 있고, 내 자신이 "이 키는 해당 키를 진짜로 보유하고 있다고 따지는 사람의 것이다."라고 이야기할 키 서버에 전달할 수 있습니다. 이 방식을 통해 내 공용키를 가지고 나를 신뢰하는 사람이 다른 키를 신뢰하기 위한 신뢰요소를 사용할 수 있습니다.

가끔은 햇갈릴 수 있으니 실제 상황을 예로 들어보도록 하겠습니다.

세 사람이 있다고 하겠습니다. John, Mary, Lisa가 있습니다. John은 Mary의 친구지만 Lisa를 모릅니다. Lisa 는 Mary의 친구지만 John을 모릅니다. 어느날 Lisa가 John에게 서명한 전자 메일을 보냈습니다. John은 Lisa의 공용키를 키서버에서 가져왔고 메시지를 확인합니다. 모든 것이 문제 없다면 누가 메시지를 썼든지간에 키가 만들어졌음을 볼 수 있습니다. 그런데 어떻게 그 사람이 보낸건지 내가 어떻게 따져서 알 수 있을까요?

그 다음 확인할 수 있는 Mary가 서명했음을 알아봅니다. 왜냐하면 Mary의 키를 이미 가지고 있고 해당 키를 전적으로 믿기 때문입니다. 이런 믿음의 연결 고리를 통해 받아본 해당 전자 메일을 Lisa가 진짜로 썼다는 결론을 내립니다.

이제 이 안내서를 활용할 준비가 되었습니다. 1장으로 돌아가서 어떻게 gpg를 활용하는지 알아보십시오.

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

The latest versions of gnupg don't seem to work with the gpg --send-keys that was used so send all keys in your keyring to the public server.

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

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

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

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


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

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