기사 공유하기

PGP는 Pretty Good Privacy(매우 좋은 프라이버시)를 뜻한다. 실제로 프라이버시에 매우 좋다. 제대로 이용하면, 심지어 자원이 많은 정부의 감시 프로그램으로부터도 메시지, 텍스트, 파일 등의 내용을 보호할 수 있다.

에드워드 스노든이 “암호화는 효과가 있다(Encryption works.)”고 말했을 때, 그가 얘기한 것은 PGP와 관련 소프트웨어이다. 정부가 특정인의 컴퓨터에서 (컴퓨터를 압수하거나 물리적으로 접근하여 멀웨어를 심는 방법으로, 혹은 피싱 공격을 통해) 개인 키를 훔쳐간 전례가 있다는 점은 주의할 필요가 있다. 그렇게 되면 보호를 무력화시키고 과거의 메일을 읽을 수도 있다.

PGP

이렇게 비유할 수 있다. 당신은 문에 절대 열 수 없는 자물쇠를 채워놨지만, 누군가 거리에서 당신의 열쇠를 소매치기해서 그것을 복사한 후 다시 당신의 주머니에 넣어 놓으면, 자물쇠를 굳이 깨지 않더라도 집에 들어갈 수 있을 것이다.

불행하게도, PGP는 IT 종사자가 아니라면 이해하거나 사용하기가 쉽지 않다. PGP가 사용하는 강력한 암호화(공개키 암호화)는 기발하지만, 이해하기가 어렵다. PGP 소프트웨어 자체는 1991년부터 있었으나, 그 외양은 이후 거의 변하지 않았다.

좋은 소식은 PGP의 예전 디자인을 감추고 다소 사용하기 쉽게 한, 많은 프로그램이 이제 존재한다는 점이다. 특히, PGP의 주 용도인 이메일의 암호화와 인증과 관련한 프로그램 말이다. 우리는 이 소프트웨어를 설치하고 운영하는 가이드를 포함했다.

그러나 PGP와 그것을 사용하는 프로그램에 대해 다루기 전에, 잠시만 시간을 내어 공개키 암호화를 이해해 보자. 그것이 무엇을 할 수 있고, 무엇을 할 수 없는지, 그리고 당신이 언제 그것을 이용해야 하는지.

두 개의 키 이야기

감시와 싸우기 위에 우리가 암호화를 이용할 때, 다음과 같이 하려고 한다.

  • 우리는 “안녕 엄마”와 같이 쉽게 읽을 수 있는 메시지를 가지고 있다.
  • 우리는 그것을 누군가 이해할 수 없는 메시지로 암호화한다. (예컨대, “OhsieW5ge+osh1aehah6,”)
  • 암호화한 메시지를 인터넷으로 보낸다.
  • 많은 사람이 그 암호화한 메시지를 읽을 수 있지만, 누구도 이해할 수는 없기를 바란다.
  • 우리가 원하는 수신자에게 암호화한 메시지가 도착했을 때, 그 수신자만 암호화하기 전의 원문으로 복호화할 방법을 가지고 있다.

다른 사람을 제외하고 오로지 수신자만 그 메시지를 복호화하는 방법을 어떻게 알 수 있을까? 이를 위해서는 다른 누군가는 모르는, 그들만의 어떤 추가적인 정보가 있기 때문이다. 그것은 암호 내의 메시지를 풀 수 있으므로 ‘복호화 키’라고 부르자.

그렇다면 어떻게 수신자는 그 키를 알까? 대부분, 발신자가 이전에 수신자에게 키를 얘기했기 때문이다. 예를 들어, “그 메시지를 거울에 비춰봐”라거나 “각 글자를 알파벳의 다음 글자로 바꿔봐”처럼 말이다.

그런데 이러한 방법에는 문제가 있다. 당신이 암호화된 메시지가 감시당할 것을 우려한다면, 그 키는 수신자에게 감시당하지 않고 어떻게 전달할 수 있겠는가? 만일 공격자가 암호화된 메시지를 풀 수 있는 키를 가지고 있다면, 정교하게 암호화된 메시지를 보내는 것은 의미가 없다. 만일 당신이 해독할 수 있는 키를 전달할 수 있는 비밀스러운 방법이 있다면, 차라리 비밀 메시지 자체를 보내는 데 사용하면 되지 않는가?

공개키 암호 방식은 이를 위한 근사한 해법이다. 대화의 양 당사자는 두 개의 키를 생성한다. 하나는 자기가 가지고 있으며 결코 다른 사람은 모르게 해야 하는 “개인키”이다. 다른 하나는 “공개키”인데, 이는 당신과 소통하고자 하는 누구에게라도 전달할 수 있다. 누군가 공개키를 보는 것은 상관없다. 누구라도 볼 수 있도록 온라인에 올려놓을 수 있다.

“키” 그 자체는 사실, 어떤 수학적 속성을 가진, 매우 큰 숫자이다. 공개키와 개인키는 연결되어 있다. 당신이 공개키로 어떤 것을 암호화하면, 누군가 그것과 부합하는 개인키로 복호화할 수 있다.

이것이 어떻게 작동하는지 보자.

  • 당신은 철수에게 비밀 메시지를 전달하고 싶다.
  • 철수는 자신의 개인키를 가지고 있으며, 자신의 개인키와 연결되는 공개키를 그의 웹페이지에 올려놓는다.
  • 당신은 철수의 공개키를 내려받아, 그것으로 메시지를 암호화한 후, 철수에게 보낸다.
  • 철수는 당신이 보낸 암호화한 메시지를 풀 수 있는데 왜냐하면, 그것과 매칭되는 개인키를 가지고 있기 때문이다. 그러나 다른 사람은 그렇게 할 수 없다.

공개키 암호화 예시

전자 서명

공개키 암호 방식은 복호화 키를 수신자에게 몰래 전달해야 하는 문제에서 벗어나게 해준다. 왜냐하면 그 사람은 이미 그 키를 가지고 있기 때문이다.

당신은 단지 수신자가 (스파이를 포함하여) 모두에게 전달하는, 수신자의 개인키와 매칭되는 공개키, 즉 암호화 키만 있으면 된다. 왜냐하면, 그것은 단지 메시지를 암호화하는 데에만 유용할 뿐, 누구도 그 메시지를 복호화하기 위해 사용할 수 없기 때문이다.

그러나, 더 알아야 할 것이 있다. 당신이 메시지를 어떤 공개키로 암호화한다면, 그것은 매칭되는 개인키로만 복호화할 수 있다. 그러나 그 반대도 가능하다. 당신이 어떤 개인키로 메시지를 암호화한다면, 그것은 매칭되는 공개키로만 복호화할 수 있다.

이것이 왜 유용할까? 첫눈에 보기에는, 전 세계 누구나 (최소한 당신의 공개키를 가지고 있는 누구나) 풀 수 있도록 당신의 개인키로 비밀 메시지를 암호화하는 것은 아무런 필요성이 없어 보인다.

그러나 내가 “난 철수에게 100만 원을 지급하기로 약속한다.”라는 메시지를 썼다고 가정해보자. 그리고 그 메시지를 개인키를 이용하여 비밀 메시지로 만들어보자. 누구나 그 메시지를 복호화할 수 있지만, 단지 한 사람만이 그것을 쓸 수 있다. 즉, 개인키를 가지고 있는 사람이다.

내가 개인키를 안전하게 보관하고 있다면, 그 메시지를 쓴 사람은 오로지 나일 것이다. 즉, 그 메시지를 내 개인키로 암호화함으로써, 그 메시지를 내가 썼다는 것을 보증할 수 있다. 다른 말로 하자면, 우리가 실세계에서 메시지에 서명하는 것처럼, 디지털 메시지에 대해 서명을 한 것이다.

서명은 메시지가 조작되지 않도록 한다. 누군가 “난 철수에게 100만 원을 지급하기로 약속한다.”라는 메시지를 “난 영희에게 100만 원을 지급하기로 약속한다.”로 바꾸려 한다 해도, 내 개인키로 다시 서명할 수는 없다. 따라서 서명된 메시지는 누가 그것을 보냈는지, 그리고 중간에 그것이 변경되지 않았음을 보증한다.

개인키로 서명한 메시지

따라서 공개키 암호 방식은 당신이 공개키를 아는 누군가에게 메시지를 암호화하여 안전하게 보낼 수 있도록 한다. 다른 사람이 당신의 공개키를 안다면, 그들은 당신에게 오로지 당신만 복호화할 수 있는 메시지를 보낼 수 있다. 그리고, 사람들이 당신의 공개키를 안다면, 당신은 메시지에 서명해서 사람들이 그 메시지를 당신이 보냈다는 것을 알 수 있도록 한다. 당신이 누군가의 공개키를 안다면, 그들이 서명한 메시지를 복호화해봄으로써 진짜 그들이 보낸 것인지 알 수 있다.

더 많은 사람이 당신의 공개키를 알수록, 공개키 암호 방식이 더 유용해진다는 것은 이제 명확해졌다. 당신의 개인키를 안전하게 보관해야 한다는 것도 명백하다. 누군가 당신의 개인키 복제본을 가지고 있다면, 그들은 당신인 것처럼 가장할 수 있고, 마치 당신이 쓴 것처럼 메시지에 서명할 수 있다.

PGP는 당신이 개인키를 “취소”하고 사람들에게 그것이 이제는 신뢰할 수 없다고 경고하는 기능을 가지고 있지만, 좋은 해결책은 아니다. 공개키 암호 방식을 사용하는 데 있어서 가장 중요한 점은 당신의 개인키를 매우 조심스럽게 보호하는 것이다.

PGP는 어떻게 작동하는가

PGP는 대부분 공개키와 개인키를 생성하고 이용하는 세부 사항들에 관계된다. 당신이 공개키/개인키 쌍을 생성하고, 개인키를 비밀번호로 보호하고, 개인키와 공개키를 텍스트에 서명하고 암호화하는 데 이용한다.

또한 “공개키 서버”에서 다른 사람의 공개키를 내려받고 당신의 공개키를 올리는데, 공개키 서버는 다른 사람들이 당신의 공개키를 찾을 수 있는 저장소이다. 이메일 소프트웨어에서 PGP 호환 소프트웨어를 어떻게 설치하는지는 “이메일 보안을 위한 PGP 사용법”에서 설명할 것이다.

[box type=”tip”]이 개요에서 당신이 반드시 배워야 할 한 가지가 있다면, 그것은 당신의 개인키를 어딘가에 안전하게 보관해야 하며, 긴 비밀번호로 보호해야 한다는 것이다. 당신의 공개키는 당신과 소통하고자 하는, 그리고 어떤 메시지가 정말 당신이 썼는지 알고 싶어 하는 누구에게나 줄 수 있다.[/box]

PGP 고급: 신뢰의 망

공개키 암호 방식에는 잠재적인 허점이 존재한다. 내가 버락 오바마의 공개키를 배포한다고 가정해보자. 사람들이 나를 믿는다면, 그들은 오바마에게 이 키로 암호화하여 비밀 메시지를 보내기 시작할 것이다.

혹은 사람들은 그 키로 서명된 어떤 것을 진짜 오바마가 쓴 것이라고 믿을 수도 있다. 이런 경우는 드물기는 하지만, 이 문서의 저자 중의 누군가에게 실제로 있었던 일이다. 그들에게 메시지를 보낸 사람들은 속았다! 이 경우 가짜 키를 만든 사람이 실제로 전송 중의 메시지를 가로채서 읽을 수 있었는지, 혹은 사람들이 안전한 대화를 하는 것을 불편하게 하려는 장난이었는지는 확실하지 않다.

또 다른 교묘한 공격은 공격자가 서로 대화 중인 두 사람 사이에서, 그들의 전체 대화를 감청하면서 때때로 대화 사이에 공격자의 오도된 메시지를 끼워 넣는 것이다. 서로 다른 많은 컴퓨터와 사적인 설비들을 거쳐서 메시지를 전달하도록 인터넷이 설계되었기 때문에, 이러한 공격은 전적으로 가능하다. 이를 “중간자 공격(man-in-the-middle attack)”이라고 부른다.

이러한 조건에서, 사전 합의 없는 키 교환은 매우 위험할 수 있다. “여기 내 키가 있어.”라고 오바마처럼 보이는 사람이 얘기하면서 공개키를 보낸다. 그러나 누군가 그것을 가로채서 자신의 키를 대신 끼워 넣는다면 어떻게 될까?

우리는 어떤 키가 진짜로 그 사람에게 속한다는 것을 어떻게 증명할 수 있을까? 하나의 방법은 공개키 소유자로부터 직접 받는 것이다. 그러나 이 방법은 누군가에게 드러나지 않고 비밀키를 주고받는 애초의 방식보다 나을 게 없다. 여전히 사람들은 그들이 사적으로 만날 때, 그리고 공개 암호 행사에서 공개키를 주고받는다.

PGP는 “신뢰의 망(web of trust)”이라는 조금 나은 해결책을 가지고 있다. 신뢰의 망에서, 내가 어떤 키가 특정인의 것이라고 믿는다면, 나는 그 키에 서명하여 그 키(와 서명)를 공개키 서버에 올려놓는다. 이 키 서버는 키를 요청한 누군가에게 서명된 키를 전달한다.

대략 얘기하자면, 내가 신뢰하는 더 많은 사람이 키에 서명했을수록, 그 키가 실제 소유자에게 속한 것이라고 믿을 가능성이 높아진다. PGP는 당신이 다른 사람의 키에 서명하도록 하고, 당신이 다른 서명자를 믿을 수 있도록 함으로써, 그들이 키에 서명하면 당신의 소프트웨어는 자동으로 그 키가 유효하다고 믿는다.

신뢰의 망 역시 그 자체의 문제를 가지고 있고, EFF와 같은 단체는 현재 더 나은 해결책을 찾으려고 하고 있다. 하지만, 현재로써는, 당신이 어떤 사람을 직접 만나서 키를 전달해주는 것이 아니라면, 신뢰의 망과 공개키 서버 네트워크를 이용하는 것이 가장 좋은 방법이다.

메타 데이터(통신 기록): PGP가 할 수 없는 것

PGP는 메시지의 콘텐츠를 비밀스럽게 전달하고, 원본이며, 누군가에 의해 조작되지 않았다는 것을 보증하는 것이다. 그러나 그것만이 당신의 프라이버시에 관계된 것은 아니다. 이미 언급했듯이, 당신의 메시지에 대한 정보 역시 콘텐츠를 드러낼 수 있다.

당신이 반체제 인사와 PGP 메시지를 주고받는다면, 그 메시지의 내용이 드러나지 않더라도, 단지 그들과 소통했다는 것만으로 위험에 빠질 수 있다. 실제로 어떤 나라에서는 암호화된 메시지의 복호화를 거부했다는 이유로 투옥되기도 한다.

[box type=”tip”]PGP는 당신이 누구와 얘기하고 있는지, 혹은 당신이 PGP를 사용하고 있다는 사실 자체를 감출 수는 없다. 당신이 공개키를 키 서버에 올리고, 다른 사람의 키에 서명한다면, 당신은 어떤 키가 당신 것이고, 당신이 누구를 아는지 드러내는 것이다.[/box]

당신이 꼭 그렇게 할 필요는 없다. 당신은 PGP 공개키를 조용히 간직할 수 있고, 당신이 안전하다고 믿는 사람들에게만 그것을 줄 수 있다. 그리고 그들에게 공개키 서버에 올리지 말라고 얘기할 수 있다. 당신은 키에 당신의 이름을 붙일 필요도 없다.

당신이 누구와 소통하고 있는지 속이는 것은 더 어렵다. 이를 위한 한 가지 방법은 소통하는 쌍방이 모두 익명의 이메일 계정을 사용하고, 토르(Tor)를 이용해서 접근하는 것이다. 이렇게 한다고 해도, PGP는 여전히 유용하다. 이메일 메시지를 다른 사람으로부터 안전하게 보호할 수 있고, 서로 그 메시지가 조작되지 않았다는 것을 증명할 수 있기 때문이다.

[box type=”note”]
이 글은 EFF의 An Introduction to Public Key Cryptography and PGP(2014년 11월 3일 마지막 업데이트)를 기초로 한 것입니다.
[/box]

관련 글