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일에 무효화되며, 유효기간이 경과하는 날에 키가 필요하면 다시 요청할 것입니다.

키 서버로 키 보내기
이제 키를 보유했으니, 키 서버로 보내 보도록 하는게 어떨까 합니다. 키 서버는 전세계에 널려있고, 대부분의 키서버는 그들 사이에서 공용키를 주고받습니다. 이제 John Doe의 키를 subkeys.pgp.net 서버로 보내겠습니다. HTTP를 사용하므로 HTTP 트래픽에 대해 프록시를 사용한다면 이 설정을 잊지 마십시오. 키를 보내는 명령은 다음과 같습니다. 여기서 는 키 ID입니다. HTTP 프록시가 필요하지 않다면 --keyserver-options honor-http-proxy 옵션을 빼시면 됩니다.

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

키 서버에서 키 가져오기
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 :)).

서버 응답에서 보신바와 같이 키 서버로 몇가지 키를 제출했습니다만, 현재 B9F2D52A만을 사용합니다. 이제 John Doe가 이걸 받을 수 있고 키를 믿을 수 있다면 키에 서명할 수 있습니다.

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

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

젠투에서는 GPG 에이전트 프로그램을 제공합니다. 패키지에 참조할 것으로 간주할 수 있으며 이 문서에서 앞으로 사용할 요소를 넣었습니다.

gpg-agent와 pinentry 설정
GnuPG에는 와  가 있습니다. 는 gpg-agent로 하여금 그래픽 창 환경에서 암호를 요구할때 사용하는 도우미 프로그램입니다. 다음 세가지 방식이 들어있습니다. GTK+, Qt, curses 라이브러리를 사용하여 창을 띄울 수 있습니다.(의 USE 플래그에 달려있습니다).

한가지 이상의 창 띄우기 방식을 포함하여 를 설치했다면   명령으로 방식을 선택할 수 있습니다.

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

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

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

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

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

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

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

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

이 명령으로 이진 파일을 만듭니다. ASCII 파일을 만들려면 그냥 를 명령 시작 부분에 추가하십시오.

해독 및 서명 검증
암호화 된 파일을 받았다고 가정해보겠습니다. 해독할 명령은 입니다. 이 명령으로 문서를 해독하고 서명(이 있다면)을 검증합니다.

키 없이 암호화 및 해독
키 대신 암호를 사용하여 파일을 암호화 할 수 있습니다. 글쎄요, 암호 자체는 키 처럼 동작합니다 - 대칭 암호처럼 사용합니다. 의  인자를 활용하여 파일을 암호화 할 수 있습니다. 해독할때는 이전에 우리가 이야기 했던대로 같은 명령을 사용하시면 됩니다.

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

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

두 줄을 찾아서 주석 표시를 지워보십시오. 주석을 지운 줄을 통해 GnuPG에서는 언제든지 서명을 확인하려 하며, 로컬 키 모음에 공용키를 찾으려 하지 않을 것이고, subkeys.pgp.net 서버에 요청하여 공용키를 가져오려 시도할 것입니다.

다른 괜찮은 명령으로 가 있습니다. 이 명령은 옵션 파일에 지정한 키 서버와 연결하여 로컬 키 모음의 공용키를 새로 고치고, 폐기한 키, 새 ID, 키에 새 서명이 있는지를 검색합니다. 한달에 한 두번은 실행해서 어떤 사람이 자신의 키를 버렸는지 알 수 있어야 합니다.

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

GnuPG로 전자 메일을 서명/암호화 하는데 두가지 방법이 있는데, 예전 방법과 최근의 방법입니다. 예전 방법대로는 메시지는 평문으로 나타나지만, 가능한 형식을 갖추지 않고, 첨부한 파일에 대해서는 서명 및 암호화를 하지 않습니다. 여기에 예전 방식대로의 메시지 서명 예를 들도록 하겠습니다:

평문 서명

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

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

Kgpg
kgpg는 GnuPG용으로 사용하는 멋들어진 GUI 프로그램입니다. 주 화면에는 서명하거나 암호화 하려는 문장을 붙여넣을 수 있고, 해독하려는 암호화된 ASCII 텍스트도 붙여넣을 수 있습니다.

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

Seahorse
Seahorse는 그놈 데스크톱용 GnuPG GUI 인터페이스를 목표로 합니다. 이 프로그램은 빠르게 발전을 거듭해왔지만, kgpg나 명령줄 버전의 프로그램에서 대부분의 중요하다고 생각되는 기능이 빠져있습니다.

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

,,  ,  로 이동하면 KMail을 제대로 설정했는지 확인할 수 있습니다. GpgME 기반 백엔드 목록을 볼 수 있어야 하고, OpenPGP 확인 상자에 표시할 수 있어야 합니다. 목록에는 있는데 회색으로 표시되어 있다면, 을 누르십시오. GpgME 기반 백엔드가 그래도 회색으로 표시되어 있다면, KMail이 제대로 동작하고 있는 것은 아닙니다.

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

Claws-Mail
이 메일 보기 프로그램은 큰 용량의 메일함에 매우 빠르게 동작하며, gpg와 상당히 잘 동작하고, 메일 보기 프로그램에 바라는 세련된 모든 기능이 다 들어있습니다. 유일한 문제라면 예전 PGP 서명으로는 동작하지 않기 때문에 이런 메일을 받게 되면 서명을 직접 확인해야 합니다.

Claws-Mail에서 gpg 키를 사용하려면 계정설정으로 가서 개인정보 탭을 선택하십시오. 어떤 키를 사용할지 선택했으면 아마 대부분 사용자에게 기본 키를 넣어 보낼 것입니다.

기본 공용키 암호화 기법
공용 키 암호화 기법의 개념은 1976년 Whitfield Diffie 와 Martin Hellman이 고안했습니다. "공용키"와 "암호화 기법"을 지난 1993년 하나의 문장을 통해 보았을 때, 불가능할 것이라 생각했습니다. 그때에는 인터넷이란 것이 없었기 때문에(있을진 모르겠지만, 제가 있던곳엔 없었습니다) 공공 도서관을 찾아가서 책을 통해 암호화 기법을 찾아보았습니다. 그때 전 16살이었고, 도서관 직원분이 절 보고 경악하시더니, 애들을 위한 대체 암호와 관련된 책을 가지고 오셨습니다(거기에는 익히 잘 알려진 카이사르 암호 또는 ROT-13에 대한 내용이 있었습니다. (Tragbb Ebpxf, naq lbh xabj vg vf tbbq orpnhfr lbh ner ernqvat guvf qbp.), (  if you cannot read the preceding text)). 이걸 보고 확 돌아서 더 많은 내용을 찾아보기 시작했습니다. 곧 이야기 하겠지만 가족중 한사람이 나를 신세계에 빠져들도록 했기때문에 한 가족 내에 수학자를 보유하는 것이 좋습니다.

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

수학적 개념

35라는 숫자를 주고 이 숫자가 두 소수의 곱으로 지루어진 숫자임을 말해보라고 하면, 5와 7을 쉽게 언급할 것입니다. 다만 똑같은 질문을 1588522601이라는 숫자를 주고 한다면, 49811*31891임을 찾는데 엄청난 시간(또는 CPU 사이클)을 들일 것입니다. 그리고 이 숫자가 정말 큰 수라면 처리하기 "불가능할" 것입니다. 따라서 제가 아는 두 개의 소수 곱으로 이루어진 큰 숫자를 제시하면 그 아무도 두 개의 소수가 무엇인지 알지 못할 것임을 압니다.

이것이 바로 오늘날의 공용 키 암호화 기법(PKC)의 기본입니다. 이런 (비현실적인) 예제를 통해, 제가 정한 숫자를 어떤 사람에게 주고 그 사람이 이 숫자를 이용하여 저에게 메시지를 보낼때 암호화 하도록 하겠습니다. 누군가는 암호화한 메시지를 볼 수 있는데 저만이 그 메시지를 볼 수 있도록 바로가기 연결의 존재를 알 수 있습니다. 다만 다른 나머지는 메시지를 알아 볼 수 있게 하는 "따로 떨어진" 숫자를 먼저 받아야 하는데 짧은시간에 이것이 불가능하다는건 "엄연한 사실" 입니다(오늘날 방식과 전세계에서 가장 빠른 컴퓨터도 이 문제를 해결하는데 대략 수쳔년이 걸립니다),(다만, 최근에 일주일 내로 이 문제를 풀어내는 기법이 발견되었고, 이러한 사실은 "옛날 이야기"로 바뀌었습니다. 역자 주). 이 구성 과정에서 두 가지 큰 소수를 개인 키라고 하며, 소수가 아닌 큰 수를 공개 키라고 합니다.

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.

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

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

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

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

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

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

이제 이 안내서를 활용할 준비가 되었습니다. 1장으로 돌아가서 어떻게 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