4. 키 이용하기

4.1. 키 만들기

다음 명령을 이용하여
    gpg --gen-key
    
새로운 키쌍을 만든다. (여기서 키쌍이란 key pair로 비밀키와 공개키 두 가지를 쌍으로 묶어서 일컫는 것이다) 첫번째 질문은 어떤 알고리즘을 이용할 것인가다. 여러분은 PGP DH 대 RSA FAQ 혹은 응용된 암호화 방법에서 알고리즘에 대해 더 읽을 수 있다. 여러분은 손쉽게(아마 사용해야만 할 것이다 - 왜냐면 굉장히 널리 사용하고 있기 때문에) DSA/ElGamal을 이용할 것이다. 이것은 특허가 나 있지 않다.

다음 질문은 키의 길이다. 이것은 아주 사용자 의존적인 것이다. 여러분은 보안과 계산 시간 사이에서 선택을 할 필요가 있다. 키가 긴 경우에는 메시지가 샌 경우 크랙킹에 대한 위험은 줄어든다. 하지만 키가 크면 계산 시간 역시 증가한다. 계산 시간이 문제라면 여러분은 어떤 경우에 그 키를 이용하기를 원하는지 고려해야만 한다. 우리 모두는 연산 성능이 아주 빨리 올라가고 있다는 것을 안다. 새로운 프로세서는 갈수록 빨라지고 있다. 그러므로 이걸 새겨두자. GnuPG가 요구하는 최소한의 키 길이는 768비트이다. 하지만 어떤 사람들은 여러분더러 2048비트(현재로서 GnuPG에서 쓸 수 있는 최대이기도 하다) 길이의 키를 사용해야 한다고 말한다. DSA의 경우 1024가 표준 크기이다. 보안이 최우선이고 성능이 덜 중요하다면 여러분은 최대한 큰 키 크기를 선택하여야 할 것이다.

시스템은 이제 이름, 코멘트 그리고 이메일 어드레스를 넣어달라고 할 것이다. 여기 입력한 사항을 기반으로 하여 코드를 계산한다. 이 설정값은 나중에 변경할 수 있다. 키쌍 관리하기 부분을 보도록 하자.

마지막으로 여러분은 암호(사실 암호문장이 더 적절하다. 왜냐면 공백도 사용할 수 있기 때문이다)를 입력하여야 한다. 이 암호는 여러분의 비밀키에 속한 기능을 이용 가능하도록 하는데 사용한다. 좋은 암호문장은 다음과 같은 요소를 갖는다:

어떤 경우에는 CaPItaLs와 같이 대문자를 섞어서 그리고 어떤 경우에는 SOMEtimes와 같이 하면 여러분은 보다 나은 보안환경을 만들 수 있다. 암호를 만들 때에는 여러분이 확실히 잊어버리지 않는 것으로 만들어야 한다. 만약 여러분이 암호를 잊어버리면 암호화된 메시지를 읽을 수 읽을 수 없고 여러분이 비밀키를 사용한 의미도 사라진다. 이러한 정보를 담은 인증서와 같은 것을 만들어 보는 것도 현명할 수 있다. (물론 어느 누구도 여러분의 암호문장을 입수하지 않도록 주의하여야 한다) 폐기 부분을 보기 바란다.

모든것을 입력한 후에 시스템은 키를 만들기 시작한다. 시간이 약간 걸린다. 이 시간동안 많은 무작위 데이터를 수집해야 한다. 다른 화면에서 작업함으로써 여러분은 시스템이 변하는 무작위 데이터를 수집하는 것을 도울 수 있다. 여러분이 지금까지 이해한 것처럼, 키는 항상 값이 다르다. 만약 여러분이 지금 키를 생성한 후 5분 뒤에 정확히 같은 데이터로 키를 성성해 보면 두 개의 키가 다르다는 것을 알 수 있다. 이제 왜 여러분이 여러분의 암호를 잊지 말아야 하는지를 이해하여야만 한다.

4.2. 키 내보내기

어떤 사용자에 대해 키를 내보내기 위한 명령은 다음과 같다:

    gpg --export [UID]
   

UID를 지정하지 안은 경우에는 현존하는 모든 키를 내보낸다. 기본적으로 출력은 stdout(표준출력, 즉 화면)이다. -o 옵션을 이용하면 이를 파일로 내보낸다. 키를 바이너리 파일 대신에 7비트 아스키 파일로 쓰려면 -a 옵션을 이용하는 것이 좋다.

공개키를 내 보냄으로써 여러분은 여러분의 활동범위를 키울 수 있다. 다른 사람들이 안전하게 여러분과 접촉을 시작할 수 있다. 여러분이 여러분의 홈페이지, 핑거 서비스, http://www.pca.dfn.de/dfnpca/pgpkserv/와 같은 키 서버 혹은 여러분이 생각하는 어떠한 방법을 이용해서 공개키를 누구나 볼 수 있도록 공개하면 된다.

4.3. 키 가져오기

여러분이 어떤 사람의 공개키(혹은 여러개의 공개키)를 받은 경우 이를 사용할 수 있도록 여러분의 키 데이터베이스에 이들을 추가해야만 한다. 다른 사람의 공개키를 데이터베이스로 가져오는 명령어는 다음과 같다:
    gpg --import [파일명]
   
만약 파일명을 생략하면 키는 stdin(표준 입력)을 통해 받게 된다.

4.4. 키 폐기하기

서너가지 이유 때문에 여러분은 현재 있는 키를 폐기하고자 하는 경우가 생길 수 있다. 예를 들어, 비밀키를 분실하거나 비밀키가 다른 사람 손에 들어간 경우, UID가 변경된 경우, 더 이상 그 키는 충분히 크다고 할 수 없는 경우 등이다. 이러한 모든 경우에 해당 키를 폐기하는 명령은 다음과 같다:

    gpg --gen-revoke
   

이 명령은 폐기 인증서를 생성한다. 이를 할 수 있도록 하기 위해서는, 여러분은 비밀키가 필요하고, 다른 사람도 여러분의 인증서를 폐기할 수 있다. 이것은 하나의 단점을 가진다. 만약 자신이 암호문장을 모르면 키는 쓸모가 없게 된다. 하지만 자신 역시 키를 폐기할 수 없다! 이러한 문제를 극복하기 위해서 여러분이 키쌍을 생성할 때 폐기 라이선스를 만드는 것이 현명하다. 그리고 여러분이 그렇게 한 경우에 라이선스를 안전하게 보관해야 한다! 보관은 디스크, 종이 등과 같은 것에 할 수 있다. 이 인증서가 확실히 다른 사람 손에 들어가지 않도록 해야만 한다!!! 이를 허술하게 보관하는 경우 제 3자가 여러분의 키에 대한 폐기 인증서를 발행하여 키를 쓸모없게 만들 수 있다.

4.5. 키 관리

GnuPG 시스템에는 마치 데이터베이스 역할을 하는 파일이 들어있다. 이 파일에는 키와 관련한 모든 정보와 키에 대한 모든 데이터가 저장된다. (소유자 신용도 값 - Ownertrust 값까지 모든 것까지: 이와 관련한 더 자세한 정보는 키 서명하기 부분을 읽기 바란다) 다음 명령을 이용하면

    gpg --list-keys
   

현존하는 모든 키를 볼 수 있다. 서명까지 보려면 다음과 같이 입력한다:

     gpg --list-sigs 
   

(더 자세한 내용은 키 서명하기 부분을 보기 바란다). 지문을 보고자 한다면 다음과 같이 입력한다:

    gpg --fingerprint 
   

여러분이 어떤 누군가가 정말로 그들이 주장하는(전화통화에서처럼) 그 사람인지를 확인하기 위해 "지문"을 보길 원한다. 이 명령어는 상대적으로 작은 숫자의 목록을 결과로 보여준다. 비밀키의 목록을 보고 싶다면 다음과 같이 입력한다:

    gpg --list-secret-keys
   

비밀키에서 뽑아낸 지문과 서명을 목록으로 보는 것은 어떻게 하든간에 쓸데없는 행동이라는 것에 주의하기 바란다.

공개키를 지우기 위해서는 다음과 같이 입력한다:

    gpg --delete-key UID 
   

비밀키를 지우기 위해선 다음과 같이 입력한다:

     gpg --delete-secret-key 
   

키를 가지고 작업하는 데 관련한 중요한 명령어가 하나 더 있다.

    gpg --edit-key UID
   

이 명령을 이용하여 여러분은 키의 유효 일자(다른 것들 가운데서), 지문 추가, 키 서명을 할 수 있다. 비록 너무 논리적이어서 언급하기에 뭐하지만. 이를 위해서는 여러분은 여러분의 암호문장이 필요하다. 이 명령을 입력하면 여러분은 명령행을 보게 될 것이다.

4.6. 키 서명하기

앞서 서론에서 언급했다시피 이 시스템에는 중요한 아킬레스건이 하나 있다. 바로 공개키의 신빙성 문제이다. 만약 여러분이 잘못된 공개키를 갖는 경우 여러분은 여러분의 암호화 값에 빠빠이를 할 수 있다. 그러한 위험을 극복하기 위해 서명하는 키에 대한 여지가 있다. 그러한 경우 여러분은 그 키에 대해 서명을 넣을 수 있고, 이렇게 하면 이 키는 확실히 맞는 것이구나라고 확신할 수 있다. 이러한 방법은 서명을 통해 키에서 언급한 사용자 신분이 실제로 그 키의 소유자라는 것을 알려주는 상황으로 이끌어간다. 그렇게 재확인함으로써 여러분은 암호화를 시작할 수 있다.

서명이 필요한 해당 키에 대해 gpg --edit-key UID 명령을 이용하므로써 여러분은 sign 명령으로 서명할 수 있다.

여러분은 여러분이 그 키가 정말로 믿을 수 있는 것이라고 절대적으로 확실한 경우에 확실한 키라고 서명하여야 한다!!! 그러므로 여러분이 확신한 경우 여러분은 키를 스스로 갖거나(마치 키 서명 단체에서 처럼) 다른 수단을 통해 키를 입수한 경우에는 지문-메카니즘을 이용하여 해당 키를 확인하기(예를 들어 전화를 이용하여) 바란다. 어떤한 경우라도 절대 추측해서 키에 서명해서는 안된다.

현재 가용한 서명과 "소유자 신용도"를 기초로 하여 GnuPG는 키의 유효성을 결정한다. 소유자 신용도란 하나의 값으로 키의 소유자가 어떤 특정 키에 대한 신용도 수준을 결정하는 데 이용하는 것이다. 그 값은 다음과 같다.

만약 사용자가 서명을 신용하지 않는 경우 그 서명은 무시한다고 할 수 있다. 신용도 정보는 키와 동일한 파일에 저장하지 않고, 따로 다른 파일에 저장한다.