두 개의 키 이야기
암호화를 이용해 감시를 피하고 메시지를 주고 받는 과정을 생각해보자. 철수는 영희에게 ‘배고프다’ 라는 메시지를 안전하게 보내고 싶다. 철수는 이 메시지를 암호화한다.
철수는 암호화된 메시지를 영희에게 보낸다. 전달 과정에서 암호화된 메시지는 여러 사람들이 접근하고 읽을 수는 있지만 원문이 무엇인지는 알 수 없다. 그렇다면 영희는 어떻게 암호화된 메시지를 해석해서 볼 수 있을까?
철수와 영희에겐 다른 사람들에겐 없는, 암호화된 메시지를 풀 수 있는 추가적인 정보, 일종의 힌트가 있어야 한다. 이 추가적인 정보를 ‘복호화 키’라고 부른다.
영희는 이 키를 이용해 철수가 보낸 암호화된 메시지를 복호화하고 원문을 읽을 수 있다. 하지만 여기서 문제가 발생한다. 어떻게 하면 철수가 영희에게 복호화 키를 안전하게 전달할 수 있단 말인가?
공개 키 암호화 방식은 이를 위한 깔끔한 해결책이다.
철수와 영희가 공개 키 방식을 사용한다고 생각해보자.
영희는 ‘공개키(Public Key)’와 ‘개인키(Private Key)’, 이렇게 두 개의 키를 만든다.
개인키는 오로지 영희만이 가지고 있으며 그 누구에게도 공개하지 않는다.
공개키는 누가 알게 되더라도 상관없고, 누구라도 볼 수 있도록 인터넷에 공개해도 된다.
사람들은 영희의 공개키를 이용하여 메시지를 암호화할 수 있다. 하지만 이렇게 암호화된 메시지를 다시 영희의 공개키로 복호화할 수는 없다. 오로지 영희가 가진 개인 키만이 이 메시지를 복호화할 수 있다.
철수는 영희의 공개키를 이용해 ‘배고프다’ 라는 메시지를 암호화한다. 철수는 암호화된 메시지를 영희에게 보낸다. 전달 과정에서 암호화된 메시지는 여러 사람들이 접근하고 읽을 수는 있지만 원문이 무엇인지는 알 수 없다. 영희는 자신만이 가지고 있는 개인키를 이용해 해당 메시지를 복호화한다. 철수와 영희 사이에는 암호화된 메시지를 풀 수 있는 키가 공유될 필요가 없다. 이것이 공개키 암호화 방식이다.
전자 서명
당신이 어떠한 메시지를 철수의 공개키로 암호화한다면, 이것은 그 공개 키와 매칭되는 철수의 개인키로만 복호화할 수 있다. 그리고 그 ‘반대’도 가능하다.
만약 철수가 자신의 개인키로 어떠한 메시지를 암호화한다면, 이것은 그 개인키와 매칭되는 공개키로만 복호화할 수 있다.
갑자기 무슨 얘기일까? 철수의 공개키를 가지고 있는 사람이라면 전 세계 누구나 풀 수 있도록 암호화하는 것은 아무 의미도 필요성도 없어보인다. 그러나 철수가 ‘난 영희에게 100만원을 주겠어’ 라는 메시지를 썼다고 가정해보자. 그리고 철수는 이 메시지를 자신의 개인키로 암호화한다. 철수의 공개 키를 가지고 있는 사람이라면 누구나 그 메시지를 알아볼 수 있다. 하지만 그 메시지를 암호화시킬 수 있는 사람은 오로지 개인키를 가진 철수 뿐이다.
즉, 그 메시지를 철수 본인의 개인키로 암호화함으로써, 그 메시지가 철수에 의해 쓰여졌음을 보증할 수 있게 된다. 우리가 실제로 편지와 계약서에 서명하는 것처럼, 디지털 메시지에 대해 서명을 한 것이다. 이것이 바로 공개 키 암호 방식을 이용한 전자 서명이다.
전자 서명을 이용해 누군가 메시지를 조작하거나 변경하려는 것을 막을 수 있다. 누군가 “난 영희에게 100만원을 주겠어’ 라는 메시지를 ‘난 김민에게 100만원을 주겠어’ 로 바꾸려 한다 해도, 철수의 개인키가 없는 이상 다시 서명할 수는 없다. 따라서 철수가 개인키로 서명한 메시지는, 그것의 작성자가 철수임을, 그리고 그것이 중간에 공격 받아 변경되지 않았음을 보증한다.
따라서 공개키 암호 방식은 당신이 공개키를 아는 누군가에게 메시지를 암호화하여 안전하게 보낼 수 있도록 한다. 다른 사람이 당신의 공개키를 안다면, 그들은 당신에게 오로지 당신만 복호화할 수 있는 메시지를 보낼 수 있다. 그리고 사람들이 당신의 공개키를 안다면, 당신은 메시지에 서명해서 사람들이 그 메시지를 진짜 당신이 보냈다는 것을 알 수 있도록 한다. 당신이 누군가의 공개키를 안다면, 그들이 서명한 메시지를 복호화 해 봄으로써 진짜 그들이 보낸 것인지 알 수 있다.
더 많은 사람들이 당신의 공개키를 알수록, 공개키 암호 방식이 더 유용해진다는 것은 이제 명확해졌다. 당신의 개인키를 안전하게 보관해야 한다는 것도 명백하다. 누군가 당신의 개인키 복제본을 가지고 있다면, 그들은 당신인 것처럼 가장할 수 있고, 마치 당신이 쓴 것처럼 메시지에 서명할 수 있다.
이제 살펴볼 PGP는 당신이 개인키를 “취소”하고 사람들에게 그것이 더 이상 신뢰할 수 없다고 경고하는 기능을 가지고 있지만, 결코 완벽한 해결책은 아니다.
공개키 암호 방식을 사용하는데 있어서 가장 중요한 점은 당신의 개인키를 매우 조심스럽게 보호하는 것이다.
PGP란 무엇인가, PGP는 어떻게 작동하는가
PGP는 Pretty Good Privacy (아주 좋은 프라이버시)를 의미한다. 이름 그대로 프라이버시에 아주 좋다. 제대로 이용하면, 심지어 강력한 정부의 감시 프로그램으로부터도 메시지, 텍스트, 파일 등의 내용을 보호할 수 있다.
에드워드 스노든이 “암호화는 효과가 있다”고 말했을 때, 그가 얘기한 것은 PGP와 관련 소프트웨어이다.
불행하게도, PGP는 이해하거나 사용하기가 쉽지 않다. PGP가 사용하는 강력한 암호화(공개키 암호화)는 기발하지만, 이해하기가 어렵다. PGP 소프트웨어 자체는 1991년부터 있어왔으나, 그 외양은 이후 거의 변하지 않았다.
좋은 소식은 PGP의 예전 디자인을 감추고 다소 사용하기 쉽게 한, 많은 프로그램이 이제 존재한다는 점이다. 특히, PGP의 주 용도인 이메일의 암호화와 인증과 관련된 프로그램 말이다. 우리는 이 소프트웨어를 설치하고 운영하는 가이드를 포함하였다.
PGP는 대부분 공개키와 개인키를 생성하고 이용하는 세부 사항들에 관계된다. 당신이 공개키/개인키 쌍을 생성하고, 개인키를 비밀번호로 보호하고, 개인키와 공개키를 텍스트에 서명하고 암호화하는데 이용한다. 또한 “공개키 서버”에서 다른 사람의 공개키를 다운로드하고 당신의 공개키를 업로드하는데, 공개키 서버는 다른 사람들이 당신의 공개키를 찾을 수 있는 저장소이다. 이메일 소프트웨어에서 PGP 호환 소프트웨어를 어떻게 설치하는지는 <윈도용 PGP 사용법>을 참고하라.
PGP 고급 : 신뢰의 망
공개키 암호 방식에는 잠재적인 허점이 존재한다. 내가 버락 오바마의 공개키를 배포한다고 가정해보자. 사람들이 나를 믿는다면, 그들은 오바마에게 이 키로 암호화하여 비밀 메시지를 보내기 시작할 것이다. 혹은 사람들은 그 키로 서명된 어떤 것을 진짜 오바마가 쓴 것이라고 믿을 수도 있다. 이런 경우는 드물기는 하지만, 이 문서의 저자 중의 누군가에게 실제로 있었던 일이다. 그들에게 메시지를 보낸 사람들은 속았다! (이 경우에 가짜 키를 만든 사람이 실제로 전송 중의 메시지를 가로채서 읽을 수 있었는지, 혹은 사람들이 안전한 대화를 하는 것을 불편하게 하려는 장난이었는지는 확실하지 않다.)
또 다른 교묘한 공격은 공격자가 서로 대화 중인 두 사람 사이에서, 그들의 전체 대화를 감청하면서 때때로 대화 사이에 공격자의 오도된 메시지를 끼워 넣는 것이다. 서로 다른 많은 컴퓨터와 사적인 설비들을 거쳐서 메시지를 전달하도록 인터넷이 설계되었기 때문에, 이러한 공격은 전적으로 가능하다. (이를 “man-in-the-middle attack”이라고 부른다.) 이러한 조건 하에서, 사전 합의 없는 키 교환은 매우 위험할 수 있다. “여기 내 키가 있어”라고 오바마처럼 보이는 사람이 얘기하면서 공개키를 보낸다. 그러나 누군가 그것을 가로채서 자신의 키를 대신 끼워 넣는다면 어떻게 될까?
우리는 어떤 키가 진짜로 그 사람에게 속한다는 것을 어떻게 증명할 수 있을까? 하나의 방법은 공개키 소유자로부터 직접 받는 것이다. 그러나 이 방법은 누군가에게 드러나지 않고 비밀키를 주고받는 애초의 방식보다 나을 게 없다. 여전히 사람들은 그들이 사적으로 만날 때, 그리고 공개 암호 행사에서 공개키를 주고받는다.
PGP는 “신뢰의 망”이라는 조금 나은 해결책을 가지고 있다. 신뢰의 망에서, 내가 어떤 키가 특정인의 것이라고 믿는다면, 나는 그 키에 서명하여 그 키(와 서명)를 공개키 서버에 올려놓는다. 이 키 서버는 키를 요청한 누군가에게 서명된 키를 전달한다.
대략 얘기하자면, 내가 신뢰하는 더 많은 사람들이 키에 서명했을수록, 그 키가 실제 소유자에게 속한 것이라고 믿을 수 있는 가능성이 높아진다. PGP는 당신이 다른 사람의 키에 서명하도록 하고, 당신이 다른 서명자를 믿을 수 있도록 함으로써, 그들이 키에 서명을 하면 당신의 소프트웨어는 자동적으로 그 키가 유효하다고 믿는다.
신뢰의 망 역시 그 자체의 문제를 가지고 있고, EFF와 같은 단체는 현재 더 나은 해결책을 찾으려고 하고 있다. 하지만, 현재로서는, 당신이 어떤 사람을 직접 만나서 키를 전달해주는 것이 아니라면, 신뢰의 망과 공개키 서버 네트워크를 이용하는 것이 가장 좋은 방법이다.
메타 데이터(통신 기록) : PGP가 할 수 없는 것
PGP는 메시지의 콘텐츠를 비밀스럽게 전달하고, 원본이며, 누군가에 의해 조작되지 않았다는 것을 보증하는 것이다. 그러나 그것만이 당신의 프라이버시에 관계된 것은 아니다. 이미 언급했듯이, 당신의 메시지에 대한 정보 역시 콘텐츠를 드러낼 수 있다. 당신이 반체제 인사와 PGP 메시지를 주고받는다면, 그 메시지의 내용이 드러나지 않더라도, 단지 그들과 소통했다는 것만으로 위험에 빠질 수 있다. 실제로 어떤 나라에서는 암호화된 메시지의 복호화를 거부했다는 이유로 투옥되기도 한다.
당신이 꼭 그렇게 할 필요는 없다. 당신은 PGP 공개키를 조용히 간직할 수 있고, 당신이 안전하다고 믿는 사람들에게만 그것을 줄 수 있다. 그리고 그들에게 공개키 서버에 업로드하지 말라고 얘기할 수 있다. 당신은 키에 당신의 이름을 붙일 필요도 없다.
당신이 누구와 소통하고 있는지 속이는 것은 더 어렵다. 이를 위한 한 가지 방법은 소통하는 쌍방이 모두 익명의 이메일 계정을 사용하고, 토르(Tor)를 이용해서 접근하는 것이다. 이렇게 한다고 해도, PGP는 여전히 유용하다. 이메일 메시지를 다른 사람으로부터 안전하게 보호할 수 있고, 서로 그 메시지가 조작되지 않았다는 것을 증명할 수 있기 때문이다.