SBS 네이트 비밀번호 암호화 3초 만에 풀려 보도는 성급했고 정확하지 않습니다. IT/정보

7월 29일 SBS는 “네이트·싸이 비번 암호화 3초 만에 풀려”란 보도를 했습니다.

제가 영문과 숫자를 조합해 6자리 비밀번호를 만들어 시중에 유통되는 암호해독 프로그램을 이용해 풀어보겠습니다. SK컴즈와 같은 방식으로 암호화한 비밀번호가 3초도 안 돼 화면에 뜹니다. 간단한 암호는 수 초 내에, 8자리 암호도 최장 30분이면 해독 가능합니다. http://news.sbs.co.kr/section_news/news_read.jsp?news_id=N1000960683


이 보도에 SK커뮤니케이션즈는

방송에서 시연한 방식은 일반적으로 사용하는 단방향 암호화 방식으로, 자사에서 보안이 강화된 방식과 다른 것, 사용자마다 알려지지 않은 값을 추가해 암호화했기 때문에 유출된 비밀번호는 안전하다
http://kr.ibtimes.com/article/news/20110730/5051741.htm

고 했습니다. 이 말이 사실이라면 SBS 기자는 성급했고 정확하지 않은 보도를 한 겁니다. TV 뉴스의 영향력을 생각한다면요. 같은 방식이라 말했으면 네이트 로그인창에 해독한 암호를 입력하여 실제 로그인이 되는지까지 검증하고 보여주어야죠.



여기서 “그게 그거 아니냐?”는 말을 할 수 있을 겁니다. 아닙니다. 매우 큰 차이가 있습니다. SK커뮤니케이션즈 말처럼 사용자마다 알려지지 않은 값(이것을 솔트salt라고 합니다.)을 추가하여 나온 값에 MD5 단방향 암호화(해시) 과정을 거친 값은 알아내기가 매우 힘듭니다.

일반적으로 MD5, SHA1, SHA256처럼 해시를 하게 되면 몇 가지 특성이 있는데 문자 하나만 달라져도 결과값이 확 달라진다는 점과 역방향 연산, 즉 역으로 알아내기 힘든 연산이라는 점입니다. 이것은 암호학에서 논문과 연구로 알려진 사실입니다. 따라서 사용자마다 솔트를 추가하여 MD5를 한 값과 솔트를 추가하지 않은 값은 전혀 다른 결과값이 나오며 두 결과값 사이에 연관 관계도 찾기 힘듭니다. 개인마다 달라지는 솔트값을 찾지 못하는 한 아주 오랜 시간이 듭니다. SK 커뮤니케이션즈가 솔트값을 바보처럼 8자리 이하 짧고도 간단한 영문이나 숫자로 하지 않은 이상 말이죠. SK커뮤니케이션즈는 이것을

해커가 네이트와 싸이월드 비밀번호를 찾아내는 데는 천문학적인 시간이 걸릴 수 밖에 없다. 이는 수사기관과 한국인터넷진흥원도 인정한 내용 http://kr.ibtimes.com/article/news/20110730/5051741.htm


이라고 했습니다. 역방향으로 알아낼 수 없으니 무작위 대입법을 써야 하는데 MD5만 쓰는 암호는 짧은 길이인 경우 이미 결과 테이블이 알려져 있지만 솔트가 추가된 MD5 결과값은 없기에 개인마다 주어진 솔트값을 무작위 대입법으로 구해야 합니다. 그래서 어마어마한 시간이 걸립니다. (왕박사의 차분 공격은 여기서 논외로 합니다)


마지막으로 네이트가 MD5를 썼는가 안 썼는가 문제인데 네이버 안랩 V 스쿨 카페 냥이러브님의 “역시 네이트 암호화 3초 뚫려는 sbs의 드립이었습니다” 글에 따르면

일개 sbs기자가 뭐 암호화를 네이트랑 같은방식으로 해서 뚫었다길래 기자한테 직접 메일을 보내봤습니다. 네이트 암호화 방식은 어떻게 알았느냐부터 이것저것 말이죠. 결론은 기자 간담회에서 md5암호화다라고 밝혔다네요. 그래서 md5 암호화 함수라는것만 가지고 abcd1234 암호화 해서 푸는데 30분 걸리고 3초 걸린건 abcd암호화 한거였다는게 밝혀졌습죠. 누가 이딴 암호 쓰니. http://cafe.naver.com/vgeneration/11048 (회원 가입하시거나 네이버에서 제목으로 검색해서 보시길)


하고 있습니다. SK커뮤니케이션즈에서 단방향 암호화말만 했지 그것이 MD5인지 SHA1인지, SHA256인지, ···· 정확히 밝히지 않았기에 지금으로서는 어떤 방법인지는 모르지만 위 글에 따르면 MD5를 쓰되 솔트를 추가하여 MD5를 했다고 보아야 합니다.


0000이나 1234나 abdc, sbs처럼 간단한 암호인 경우인 경우는 무작위 대입법을 쓰더라도 연산 시간이 매우 짧습니다. SBS 보도 내용 중에서 sbs119처럼 간단한 암호를 MD5 암호화한 것은 몇 초만에 뚫립니다. 하지만 sbs119Cv7@$KTkrU처럼 솔트를 추가하거나 특별한 연산을 하면 그 길이는 매우 길어지고 연산 시간도 매우 길어집니다. 이 16자리 암호의 경우 4,116,305,022,165,110번 연산을 해야 하고 초당 100번 연산을 한다 하면 476,424,192일( 비밀번호 경우의 수 어느 정도 클까?, http://hellonewworld.tistory.com/88)이 걸립니다.



--
추가 8월 2일 오전
솔트를 추가했더라도 완전히 안전한 것은 아닙니다. 간단하고 짧은 암호와 솔트로는 여전히 안전을 보장할 수 없습니다. CPU·GPU의 발전으로 연산 속도가 매우 빠르기 때문이죠. SBS는 보도하기 전에 네이트에 확인 전화를 했어야 합니다. 이거 보도시 당연히 거쳐야 하는 과정 아닌가요? 3초만에 뚫리다니 상식으로 생각해 볼 때 이상하잖아요? 그럼 방송을 내 보내기 전에 사실 관계 확인을 해야죠. 특종 건졌다 하는 생각을 하기보다는요. “기자 회견할 때 들은 바로 이렇게 실험을 했는데 3초만에 뚫렸다, 어떻게 된 거냐? 이런 내용으로 방송에 내보내도 되는가?” 묻고 네이트쪽 설명을 들은 후 “우리 실험 결과가 이랬다, 네이트는 이렇게 말했다. 하지만 이런 헛점이 있으니 이런 저런 점을 조심하고 조치를 취해야 합니다.” 이렇게 보도를 해야죠. 솔트를 추가한 것과 아닌 것은 큰 차이가 있는데 이런 점을 간과하고 먼저 방송을 내 보내는 태도는 옳지 않습니다. 방송의 영향력을 생각한다면요. 시청자는 방송만 보고 “3초만에 뚫렸대”만 말하거든요. 방송 보내기 전에 사실 관계 확인과 사실 관계 확인 후 심층 보도를 기대하는 것은 제 욕심인가요?


--
추가 8월 2일 오후
아래 덧글과 자료를 읽어 보니 솔트가 추가되더라도 비밀번호가 짧고 간단한 분은 심각하군요. 빨리 비밀번호를 바꿔야 할 듯. SK 커뮤니케이션즈에서 말한 천문학적 시간은 아주 길고 복잡한 비밀번호를 쓰는 분에게나 해당하지 짧고 간단한 비밀번호를 쓰는 분은 전혀 그렇지 않습니다.

덧글

  • 2011/07/31 21:52 # 비공개

    비공개 덧글입니다.
  • 웅이 2011/08/01 06:29 #

    네, 그 단순한 경향은 전 포스트( http://woongyee.egloos.com/3702796 )에 주의해야 한다고 말했고요, 그것까지 옹호(예를 들어 0000과 같은 비밀번호)하려는 것은 아닙니다. 짧은 비밀번호라도 솔트를 추가하면 일정 길이 이상이 됩니다. 최종 암호화되는 것은 솔트를 추가한 단어입니다. 그 길이는 보통 해독하기 힘든 길이로 했을 겁니다. (답변에 천문학적 시간이 걸린다고 한 것을 보면) 해커가 빼낸 비밀번호는 솔트를 추가한 암호화된 비밀번호이기에 그것을 해독하기에는 힘들다는 이야기입니다.
  • 후훗 2011/08/02 01:56 # 삭제

    salt 인자를 써도 blute-forct attack이 가능합니다. h*****t 툴은 모든 조합에 대한 블루투 포싱을 제공합니다.

    ex) md5($pass.$salt), md5(md5($salt).$pass), sha1(sha1(sha1($pass))) 등...

    단, 3500만명의 PW를 복호화 하는데에는 천문학적인 시간이 걸리겠지만요...
    10%만 복호화해도 350만명이고 1%만 복호화해도 35만명입니다.
    35만명의 PW유출은 아주 심각한 대형 사고입니다. 아니 더 양보해서 0.1%만 복호화해도 3만5천명입니다. ;;
    0.1% 복호화는 제 컴터에서도 하겠네요. ;; 고대 정보보호대학원 김승주 교수는 바보가 아닙니다. -_-;
    그리고 KISA나 NCSC나 METAN이나 안전하다고 검증한 적이 없는것으로 알고 있습니다.
  • 웅이 2011/08/02 07:22 #

    네, 맞습니다. 그걸 부정하는 것은 아니고 SBS는 sbs119가 MD5 방식으로 3초만에 뚫리는 것을 보여주었는데 그것은 솔트를 추가했을 때를 보면 시연 예로 적절하지 않죠. 오히려 후훗님이 말한 것을 주의시켜주었어야 합니다. 보도 내용을 보면 뚫렸다만 보여주었으니까요. 특종을 노린 성급함만 보였지 그렇다면 왜 우리가 안심하고 있어서는 안되는가 하는 것을 보도해야죠. 전문가도 있고하니까 후훗님이 말한 것을 포함해서요.
  • 지나가다 2011/08/02 02:05 # 삭제

    요즘 GPU 성능이 장난이 아닙니다.

    http://www.insidepro.com/eng/egb.shtml

    단순 MD5의 경우 420 million p/s 라는 경이적인 속도로 조합을 찾아내고, Salt 를 부착한 방식이 널리 알려진 방식인지, Salt 자체도 털렸는지에 따라 디테일은 좀 달라질 수 있겠지만 Brute-Force Attack 이 더 이상 "무식하기만 한" 방법은 아닌 시대입니다.
  • 웅이 2011/08/02 07:46 #

    네, 맞습니다.
    SBS라면 네이트 암호화 방식을 더 정확하게 알아낼 수 있을테고 전문가도 동원해서 더 전문 지식으로 정확하게 보도할 수 있을텐데 지나가다님이 말한 그런 주의점을 환기시켜 주어야죠. 방송인데 극단적 예만 부각시켜 불안하게 하지 말고요. 방송 내용만 보아서는 특종을 노린 기자의 무리수입니다. 기자의 취재 능력이 지나가다님보다 떨어지잖아요.
  • 낙서 2011/08/02 09:51 #

    SALT가 털린거죠 -_-
    왜냐면 ID 거든요.
  • 웅이 2011/08/02 10:14 #

    낙서님, 설마요? 그렇게 바보처럼 만들리가?
    솔트가 털렸다는 근거와 그것이 ID라는 근거는요?
  • 낙서 2011/08/02 09:56 #

    PW 뒤에 자신의 ID를 붙인 후 MD5 해쉬 1회 = 인증 데이터.
    SALT(ID)가 사용되었기 때문에 TMTO는 불가능.
    하지만 SALT가 이미 알려진 문자열(ID) 이기 때문에 PW에 대한 전수조사만 하면 됨
    결국 SALT 무용지물...

    결론: 숫자 문자로 이루어진 6자리 패스워드의 경우 3초면 Cracking 가능

    덧: 긴 패스워드도 사전공격이 가능할 만한 문자면 Crack 끝
  • 웅이 2011/08/02 10:12 #

    ID가 ID와 비밀번호 넣을 때 ID를 뜻하는 건가요, 개인마다 고유값을 뜻하는 건가요? 설마 전자일리가요? 솔트가 이미 알려진 문자열(ID)이라는 게 이해가 안 가는데요. 솔트 만드는 알고리즘을 빼내지 않은 한 알려진 문자열이라고 할 수가 있나요?

    PW 뒤에 자신의 ID를 붙인 후 MD5 해쉬 1회 = 인증 데이터. <= 어떻게 인증 데이터가 되는 건가요? 어디에서 어떻게 인증이 될 수 있는 데이터인지요?
  • 낙서 2011/08/02 12:45 #

    ID가 ID와 비밀번호 넣을 때 ID를 뜻하는 건가요?

    YES, 예를 들면 merong@nate.com 같은 겁니다.

    개인마다 고유값을 뜻하는 건가요?

    이것도 YES, 왜냐면 ID는 네이트온 시스템에서 자신을 식별 할 수 있는 데이터 이니까요. 그러니 개인마다 고유 데이터죠.
    질문의 요지는 압니다. 랜덤 생성기에서 Salt를 만들어서 사용하는 것 아니냐는 것이죠? 결론은 아닙니다.

    전자가 되버렸으니 뒤에 질문은 의미가 없고...


    어떻게 인증 데이터가 되는 건가요? 어디에서 어떻게 인증이 될 수 있는 데이터인지요?

    자동로그인 아시죠? ID와 PW을 넣지 않아도 알아서 로그인 되는 기능입니다. 그렇다면 자동로그인 과정에서 사용되는
    인증 데이터는 뭘까요? 걍 통짜 PW? 옛날에는 그랬습니다. 걍 PW를 인코딩해서 사용자 컴퓨터에 저장해 뒀지요.
    보안 문제가 되서인지 어느날 부터 MD5(PW+ID) 값으로 저장을 해두고 있습니다. 그렇다면 이 MD5 해쉬 값을 인증을 위해
    서버로 보낸다는 예기인데 서버에 같은 데이터(MD5 해쉬 값)이 없으면 올바른지 아닌지 판단 할 수 없겠죠? 즉, 서버는
    이 자동로그인을 위해서라도 반드시 MD5(PW+ID)값을 가지고 있어야 합니다. 그리고 요게 털린거죠 이번에...

    네이트온 메신저의 레지스트리 정보를 보면 Userkey란게 있습니다. 이 데이가 바로 Encrypt(Md5(PW+ID)) 입니다.
    여기서 Encrypt는 사용자 컴퓨터의 MAC을 KEY로 하는 무지무지 간단한(거의 인코딩 수준) 암호 알고리즘입니다.
  • 웅이 2011/08/02 13:52 #

    이해했습니다. 특히 마지막 두 줄을 알고 있는 것을 보니 믿음이 갑니다. 전에 어떤 블로그 리버싱 글을 읽었을 때(지금은 지워졌습니다, 네이트온 인증 과정 리버싱 화면을 갈무리하여 설명했었죠.)도 같은 내용이었습니다. (지금 스크랩한 것 읽어보니 리버싱하면 구체적으로 식이 나오는군요. 호, 그때는 대충 읽었나봐요. MAC값과 ID를 버무려서 암호화한 것만 기억하고 있었는데.) 이것 참, 네이트 DB를 해킹할 정도 실력이면 이런 정도는 알고 있다고 봐야 하는데 걱정이 밀려옵니다. 근데 블로그에 가보면 만화·공연 등인데 컴퓨터를 왜 이리 잘 아시는 거예요? 깜짝 놀랐습니다.
  • 낙서 2011/08/02 13:55 #

    -_- 제 티스토리쪽 블로그인 듯...
    제가 이제는 보안회사 소속이라 과거의 Cracking 관련 글들은 다 내렸습니다.
  • 웅이 2011/08/02 14:24 #

    아, 맞네요. 아이디와 프로필 사진이 같군요. 반갑습니다.
  • 낙서 2011/08/02 18:13 #

    거의 Bot만 들렀다가는 제 블로그에 오셨었다니 신기하네요.
    제 글을 봐주셨다는 것만으로도 영광입니다.
  • 희망의빛™ 2011/08/03 16:37 #

    뭐 아무리 암호화 됐다고 하지만 해커들에겐 식은죽 먹기죠. 안전하다는 건 유치한 변명입니다. 단적인 예로 현재 상업용 프로그램 프러덕트키에 사용되는 암호화도 거의다 뚫리고 있잖아요. 수십자리 키가 그냥 해독되더군요.
  • 웅이 2011/08/03 18:10 #

    그래서 그런지 네이트 공지가 비밀번호 바꾸는 것으로 바뀌었더군요.
    상업용 프로덕드키 암호화 깨는 것은 아무래도 수요가 있으니 그렇겠죠. 암호화 방법 바꾸면 분석해서 깨고 다시 바꾸고 반복되는 싸움.
  • ToTo 2012/10/29 09:30 #

    게시글과 댓글을 쭉 읽다보니 시간 가는 줄 모르겠네요 ^^
    Encrypt(Md5(PW+ID)) 충격적인데요? ㅎㅎ
  • 웅이 2012/10/29 09:52 #

    네, 저도 그걸 처음 알았을 때는 설마... 했는데 진짜로! 느낌이었습니다.
※ 로그인 사용자만 덧글을 남길 수 있습니다.


애드센스_200px 정사각형