ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안전한 메신저 사용을 위해 필요한 부분은?
    Security 2014. 11. 18. 08:00
    반응형

    최근 카카오톡이 핫이슈가 되었습니다. 도청, 감청에 대한 부분으로 인해 국내 최대 모바일 메신저인 카카오톡이 그 대상이 되었고 검찰의 영장 내용에 따라 서버에 저장된 대화내용을 제공한 것이 이슈가 되었습니다. 정치권 뿐만이 아니라 사용자들 사이에서도 논란이 되었죠. 그래서 텔레그램과 같은 해외 메신저로의 이동이 커졌고 그로 인해 사이버 망명이라는 좀 웃픈 상황도 벌어졌습니다. 게다가 지금도 계속 진행중이지요.


    한 나라 안에서 살고 있고 법이라는 구속력을 지닌 것이 있지만 사용자 입장에서는 자신의 사적인 대화내용을 누군가가 볼 수 있다는 점에 대해서 무척이나 민감하게 받아들이고 있는 것은 사실입니다. 이는 우리나라 뿐만이 아니라 미국이나 유럽에서도 마찬가지입니다. 사생활 침해(프라이버시 침해)는 큰 문제로 자리잡고 있지요. 구글이나 야후, MS와 같은 기업들도 이런 사생활 침해로 인해 많은 비판을 받고 있는 것이 사실이기도 하고요.


    뭐 이런 정치적인 이야기나 사회적인 이야기를 떠나서 오늘은 안전한 메신저에 대해서 기술적으로 접근해볼까 합니다. 안전한 메신저의 핵심은 역시나 보안에 대한 부분이지요.


    대화의 저장도 이제는 암호화가 필수


    일반적으로 모바일 메신저는 메신저 서버가 존재하며 사용자들은 메신저 서버에 접속하고 접속되어 있는 다른 사용자에게 접근하면서 메신저 서버에 대화 창구가 만들어지고 대화 창구를 통해 메시지를 주고 받습니다. 즉, 사용자 A → 서버의 대화 창구 → 사용자 B로 메시지가 흘러간다는 얘기입니다. 그래서 서버의 대화 창구에 사용자 A, 사용자 B가 대화한 내용이 저장되는 것이 일반적입니다. 저장하는 이유는 메시징을 전달할 때 제대로 잘 전달이 되어는가 확인하는 목적이 큽니다. 또한 기존 메시지를 다시 볼 때 편하게 하기 위함도 있습니다. 그리고 메신저 서비스마다 다르겠지만 보통은 대화가 끝난 후에도 나중에 복구를 위해 짧으면 하루, 길면 일주일정도를 보관하곤 합니다.


    예전에는 모바일 메신저의 대화가 일반 평문으로 오갔습니다. 그래서 쉽게 도청, 감청을 할 수 있었지요. 하지만 요즘은 기본이 다 암호화 통신입니다. 위에서 언급했던 것처럼 서버를 거쳐서 하는 경우에 서버와 모바일 메신저 클라이언트 사이에 암호화 세션이 만들어지고 인터넷을 통한 메시지 전송은 모두 암호화되어 오가게 됩니다. 그렇기 때문에 중간에 메시지 패킷을 스니핑(중간에 캡쳐, 가로채기 등으로 가져오는 해킹 방식) 한다고 하더라도 내용을 보기가 어렵습니다(거의 불가능합니다). 암호화가 되어있기 때문에 암호화 시 사용했던 키를 모르면 내용을 복호화 할 수 없지요. 게다가 대부분의 메신저가 요즘은 AES 128Bit 이상의 암호화 알고리즘을 사용하기 때문에 중간에 내용을 가로채서 내용을 본다는 것은 어렵습니다.


    문제는 서버에 저장된 대화 내용이 평문으로 저장되면 안된다는 것이지요. 이번에 카카오톡의 보안성에 논란이 된 것은 다름아닌 서버에 저장된 내용을 그대로 가져가서 확인할 수 있었다는 것입니다. 카카오톡은 서버에 저장된 대화 내용을 평문(Plain Text라고 하기도 합니다)으로 저장했다고 합니다. 물론 그 서버에 접근할 수 있는 방법을 무척이나 어렵게 해서 외부의 침입을 막았다고 합니다만 문제는 내부의 적에 대해서는 무방비였다는 것이죠. 사자나 호랑이, 하이애나와 같은 맹수들은 밖에서의 공격보다는 안에서의 기생충으로 인한 충격이 더 크다고 하지요. 비슷한 상황이었던 것입니다. 그래서 이번 논란이 난 이후에 카카오톡은 내부에 저장되는 대화 내용을 암호화하겠다고 했지요. 저장 기간도 일주일에서 2~3일로 줄인다고 하고요. 안전한 메시징의 조건 중 하나는 통신의 암호화 외에도 저장되는 곳에도 모두 암호화가 진행되어야 한다는 것입니다.


    1:1 통신에서는 종단간 암호화


    또한 이번 카카오톡의 안전성 논란 중에 하나가 다름아닌 종단 암호화 관련 이슈였습니다. 위에서 언급했듯 많은 메신저들이 서버를 거쳐서 통신을 하기 때문에 서버와 메신저간의 통신 구간은 암호화가 되었습니다. 서버가 양쪽 메신저와 암호화 통신을 하기 때문에 메신저 입장에서는 상대방와 암호화 통신을 하고 있다고 봐도 아주 틀린 말은 아닐 것입니다. 그런데 여기서 구멍(보안에서는 홀이라는 단어를 더 많이 씁니다만)이 하나 있습니다. 서버를 거쳐서 가기 때문에 서버에서는 평문 상태로 존재하게 됩니다. 그렇기 때문에 내부에서 서버에 접근할 수 있는 권한이 있다면 대화의 내용을 옅볼 수 있다는 얘기지요. 그리고 두 사용자간의 대화가 하나의 암호화 방식으로 가는 것이 아니라 중간에 바뀌기 때문에 바뀌는 부분에 대해서 얼마든지 공격할 수 있는 소지는 있다고 볼 수 있습니다.


    종단간 암호화 이야기가 나온 것은 메신저와 메신저 사이에서만 통용되는 암호화 방식을 쓰자는 것입니다. 어차피 메시지 내용은 서버는 알 필요가 없지요. 서버는 보관 및 전달의 기능만 있으면 되니까요. 시간 값과 대화 내용만 있으면 되는데 대화 내용은 암호화가 되어 있더라도 상관없다는 얘기입니다. 종단간 암호화를 하게 되면 두 메신저 사이에서만 사용할 수 있는 암호화 방식 및 키를 사용하기 때문에 중간에 거치는 부분에서 대화 내용이 평문으로 바뀌어서 처리되는 경우는 없습니다. 또한 서버를 거친다고 하더라도 암호화가 되어있기 때문에 서버쪽에서의 스니핑도 어렵습니다. 저장된다고 하더라도 암호화되어 저장되기 때문에 평문 저장보다는 훨씬 더 안전하지요. 물론 문제도 있습니다. 종단간 암호화의 가장 큰 이슈는 역시나 단체 대화일 경우입니다. 1:1 대화는 문제가 안됩니다. 서로 암호화 키를 공유하면 되니까요. 그런데 1:N 방식이라면 문제가 되지요. 예를 들어, 1, 2, 3, 4, 5라는 사용자가 단체로 대화하고 있을 때 종단간 암호화가 적용되면 1이 2로 메시지를 보내면 2는 볼 수 있지만 3, 4, 5는 못보게 됩니다. 단체 대화방에서 말이죠. 1, 2 사이에는 키가 공유되어있지만 3, 4, 5는 키가 없기 때문이지요. 모두가 볼 수 있을려면 모두가 서로의 키를 다 갖고 있어야 합니다. 아니면 공통 키를 사용하는 방식도 있는데 초기 대화 시 시스템의 부하가 좀 들어가는 것이 문제입니다. 그래서 카카오톡도 종단간 암호화를 도입하겠다고 했지만 단체 대화방에서는 좀 더 고민하겠다고 하는 이유가 여기에 있습니다. 어찌되었던 1:1 대화에서는 종단간 암호화는 이제는 안전한 메신저를 위한 필요조건처럼 받아들여지고 있습니다.


    암호화 알고리즘보다 이제는 키 공유의 안전성이 더 시급


    이 외에도 더 다양한 보안적인 요소가 필요합니다. 앞서 얘기했던 것처럼 안전한 메신저를 위한 조건은 보안의 강화고 그 핵심에는 암호화가 있습니다. 통신 상에서의 암호화는 이미 많이 도입되어 있어서 문제는 안됩니다만 저장 내용의 암호화가 이제는 필수가 되는 것이고 또 1:1 통신에서의 종단간 암호화도 이제는 필수요소가 되어가고 있습니다. 그리고 무엇보다도 암호화의 필수 요소인 암호화 키를 어떻게 관리하고 공유시킬 것인가도 문제가 됩니다. 최근 해킹을 보면 암호화 알고리즘을 공격하는 경우는 별로 없습니다. 그 전에 암호화 키를 서로 공유하곤 하는데 그 키 공유 방법을 공격합니다. 아무리 암호화 알고리즘이 견고하더라고 키가 노출되면 무용지물이기 때문입니다. 안전한 키 공유 방식에 대해서는 여러가지 방법이 있을 수 있겠습니다만 그 중에 하나가 공개키 알고리즘을 이용하는 방법입니다.


    암호화에는 공개키 알고리즘 방식과 대칭키 알고리즘 방식이 있습니다. 많이 사용하는 AES나 국내에서 만든 ARIA, SEED와 같은 암호화 알고리즘은 대칭키 알고리즘 방식입니다. 하나의 키가 있어서 그것을 갖고 암, 복호화를 진행하기 때문입니다. RSA 암호화 알고리즘이라 불리는 방식이 있는데 이게 공개키 암호화 알고리즘입니다. 공개키 암호화 알고리즘은 공개키와 비밀키의 2가지를 사용합니다. 공개키로 암호화하고 비밀키로 복호화를 하는 방식입니다. 암호화 키와 복호화 키가 다르기 때문에 둘 다 유출되지 않는 이상 안전합니다. 그래서 공개키를 상대방에게 보내서 그 공개키로 암호화 통신을 위한 키(보통은 대칭키 방식을 많이 사용하는데 공개키 방식은 계산이 많이 필요로 해서 시스템 성능을 많이 잡아먹는다는 단점이 있습니다)를 암호화해서 보내게 하고, 그렇게 암호화되어 온 키를 비밀키를 이용해서 풀어서 공유하는 방식입니다. 물론 이 방식도 문제가 있기는 합니다만 그 부분은 나중에 얘기하도록 하고요. 이 방식이 가장 무난한 키 공유 방식으로 알려지고 있습니다.


    이렇게 안전한 메신저를 위해서는 암호화를 이용한 보안 강화가 필수며 여기에 키를 안전하게 공유하는 방식이 함께 어우러져야 한다는 점입니다. 카카오톡 뿐만이 아니라 국내 메신저 앱들도 이 부분에 이제는 더 많이 신경을 써야하지 않겠는가 하는 생각을 해봅니다.


    이 글은 LG CNS 블로그에 기고했던 글의 원본입니다. 기고한 글은 [여기]에서 보실 수 있습니다.

    반응형

    댓글

Designed by Tistory.