월간 <네트워커> - 정보화에 대한 다른 시각
4호 이동영의
공개키 암호화 디지털
컨텐츠 관리의 한계

이동영  
조회수: 4252 / 추천: 58
공개돼서는 안 되는 내용을 비밀리에 전달하고 싶을 때 우리는 그 정보를 암호화한다. 디지털화 된 정보는 복제가 손쉽고 인터넷에서는 통신하는 내용은 누가 엿듣고 있을지 알 수 없기 때문에, 암호화는 사용자의 프라이버시를 보호한다는 점에서 매우 중요하다. 그밖에 디지털 서명도 암호화 기술을 바탕으로 이루어진다.
데이터를 암호화하고 다시 풀 때 열쇠 역할을 하는 것이 키(열쇠, 암호)이다. 일반적인 암호화 방법에서는 암호화할 때나 암호문을 다시 풀 때 같은 키를 사용한다. 즉 어떤 내용을 암호화해서 전달한다고 할 때, 그것을 보내는 쪽이나 받는 쪽 모두 같은 암호를 공유하고 있어야 한다는 뜻이다. 그렇다면 암호화 방법이 완벽하다고 하더라도 이 암호를 어떻게 비밀리에 미리 전달한 것인가란 문제가 남는다. 더군다나 불특정 다수의 사람들이 암호화된 데이터를 주고받는 경우를 생각해 보면 이 문제는 더욱 심각하다.

누구나 알고 있는 암호?
다행히 이 문제에 대한 해결책은 있다. 바로 공개키 암호화, 혹은 비대칭키 암호화라고 불리는 방법이다. 여기에서는 신기하게도 데이터를 암호화할 때와 그것을 다시 풀 때 서로 다른 키를 사용한다. 즉 A 와 B 두개의 짝으로 이루어진 암호가 있고, A를 사용해서 암호화한 데이터는 B를 사용해서 풀 수 있고, B를 사용해서 암호화한 데이터는 A를 사용해서 풀 수 있다. A를 사용해서 암호화한 데이터를 같은 A를 사용해서는 풀 수 없고, B를 사용해서 암호화한 경우도 마찬가지이다. 서로 다른 키를 사용하므로 비대칭키 암호화라고 불리고, 반대로 같은 키를 사용하는 일반적인 암호화 방법은 대칭키 암호화라고 한다.
그렇다면 이 방법이 어떻게 암호 전달 문제를 해결할 수 있는 것일까? 먼저 암호문을 받는 쪽(영희라고 하자)이 비대칭키 암호 짝을 만들어서 그 중 하나를 상대방(철수)에게 알려주고, 나머지 하나는 자신만이 간직한다. 상대방에게 알려주는 키는 누구든지 알아도 상관이 없으므로 공개키라고 하고, 자신이 갖고 있는 키는 비밀키라고 부른다. 공개키 암호화라는 이름도 여기에서 나왔다. 그러면 이제 철수가 영희에게 비밀 편지를 보내고 싶으면 그 내용을 영희의 공개키로 암호화해서 보낼 수 있다. 공개키는 누구나 알고 있지만 그것을 사용해서 이 내용을 풀 수는 없다. 오직 비밀키를 알고 있는 수신자(영희)만이 암호문을 풀 수 있는 것이다.

디지털 서명
공개키 암호화는 데이터를 비밀스럽게 전달하는 기능 외에도 다른 용도로도 사용할 수 있다. 디지털 서명을 하는 기능이 그것이다. 여기에서는 공개키와 비밀키를 이전과 반대로 사용한다. 즉 서명을 하는 사람이 자신의 비밀키를 사용해서 문서를 암호화해서 서명을 만들고, 이것을 원래 문서에 덧붙인다. 그러면 다른 사람들은 그 사람의 공개키를 사용해서 서명을 해독할 수 있다. 서명을 해독한 결과는 원래의 문서이므로 이것과 본문을 비교해 보면 본문의 내용이 변조되었는지를 알 수 있는 것이다. 또한 두 개가 일치하면 비밀키를 알고 있는 사람은 본인밖에 없으므로, 그 사람이 서명을 했다는 것을 알 수 있다.
디지털 서명은 여러가지 용도로 쓰인다. 먼저 상대방의 신원을 확인하기 위해 임의의 데이터를 주고 거기에 서명하도록 해 볼 수 있다. 비밀키를 알고 있는 사람은 본인밖에 없으므로 서명을 제대로 할 수 있는지를 보면 그 사람이 맞는지를 알 수 있다. 그리고 데이터가 중간에 변조되었는지 확인할 수도 있고, 실생활에서 문서에 서명하는 것과 마찬가지로 나중에 딴소리를 하지 못하게 하는 (전산학 용어로 “부인봉쇄”라고 한다) 증거로 사용할 수도 있다.

공개키 암호화의 단점
그런데 공개키 암호화 기술에도 문제점이 있다. 일반적인 대칭키 암호화 방법에 비해 속도가 매우 느리다는 점이다. 그래서 암호문 전체를 공개키 암호화 방법으로 암호화할 경우에는 상당한 시간이 걸리게 된다. 이 문제를 해결하기 위해 사용하는 방법은 대칭키 암호화와 공개키 암호화를 조합하는 것이다. 즉 먼저 암호화할 내용을 속도가 빠른 대칭키 방법으로 암호화한 후, 이때 사용된 키를 공개키 암호화 방법으로 암호화해서 덧붙이는 것이다. 그러면 받는 사람은 먼저 대칭키가 무엇인지 해독한 후 그것을 사용해서 본문을 풀어낼 수 있다.
디지털 서명도 비슷한 방법으로 빠르게 할 수 있다. 문서 전체를 비밀키로 암호화하는 대신, 메시지 다이제스트라고 불리는 문서의 축약본을 만들어 그것을 비밀키로 암호화한다. 메시지 다이제스트는 긴 문서도 일정한 크기로 축약하는데 (따라서 축약본에서 원래 내용을 복구할 수는 없다), 문서의 내용을 조금이라도 바꾸면 그 결과가 달라지고 서로 다른 문서가 같은 축약본을 갖도록 하는 것이 거의 불가능하다. 그래서 축약본이 서명되어 있으면 본문이 서명된 것과 마찬가지라고 간주하는 것이다.
내가 누구인지 말할 수 있는 자는?
공개키 암호화 기술이 제대로 쓰이기 위해서는 각자의 공개키가 무엇인지 알아야 한다. 위의 철수와 영희의 예에서 영숙이가 영희인 척하고 가짜 공개키를 만들어서 철수한테 주고 철수가 그것을 사용하면, 영희가 아니라 영숙이가 편지 내용을 읽을 수 있게 되는 것이다. 디지털 서명의 경우도 마찬가지이다. 디지털 서명은 결국 서명한 사람이 어떤 공개키와 짝이 되는 비밀키를 가지고 있다는 것을 확인하는 것이다. 그러므로 누가 서명했는지를 확인하려면 그 사람의 공개키가 무엇인지를 확실하게 알아야 한다.
그렇다면 어떤 사람의 공개키가 무엇인지를 확실하게 알 수 있는 방법은 무엇일까? 답은 신뢰할 수 있는 인증기관(Certificate Authority, CA)이 “철수의 공개키는 이것이다”라고 디지털 서명을 해 주는 것이다. 이 디지털 문서를 인증서라고 한다. 그렇다면 인증기관의 공개키는 어떻게 알 수 있을까? 또 다른 인증기관이 서명을 해 줄 수도 있지만 결국 마지막 인증기관의 공개키는 무언가 다른 방법으로 알고 있어야 한다는 결론이 따른다. 마이크로소프트의 인터넷 익스플로러의 경우에는 몇몇 최상위 인증기관의 인증서 목록을 가지고 있다. (관심있는 사람은 인터넷 익스플로러의 ‘도구-인터넷 옵션-내용’ 메뉴를 살펴보기 바란다.) 대부분의 사용자들이 이 프로그램을 사용하므로, 결국 마이크로소프트사에게 신원 인증 문제를 의존하고 있는 셈이다.

추천하기