http://crackstation.net/ 에서는 본인들이 가지고 있는 암호화 알고리즘을 통해 주어진 값을 매치시킴으로써 완벽한 데이터를 얻는 알고리즘을 선별합니다.
좀 전에 카카오톡 암호 설정된 것을 해제하는 방법을 밝혔습니다. 예상했던 대로였고요.
http://m.clien.net/cs3/board?bo_table=cm_iphonien&bo_style=view&wr_id=1222863&page=&sfl=wr_subject&stx=%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1&spt=-195113CLIEN
EncryptedPasscode라길래 설마 일반화된 알고리즘을 쓰겠어?라고 생각했는데,
네. 설마가 사람 잡네요.
충격적이게도 암호화가 무색한 암호화를 사용합니다.
카카오톡이 암호를 Encrypt할 때 사용하는 것은 SHA1 알고리즘입니다.
몇 번 시도해봤는데, 맞네요. Encrypt하는 문자열은 aXXXX(비밀번호가 6439이면 a6439)이고 이를 SHA1로 암호화시키네요.
솔직히 암호화는 카카오에서 자체적으로 개발할 줄 알았습니다. 물론 그래봤자 0000부터 9999까지 무식하게 다 쳐서 찾던지, 아니면 disassemble을 통해 어떻게든 막을 수 있겠지만요. 그래도 그 정도는 해야죠. 이렇게 쉽게 안 뚫리게 하는 것이 목적이니까요.
그런데 그것도 아니네요. 공개된 저장소에 저장하면서 아무 의미 없는 암호화를 해놓는 것은 사실상 그냥 비밀번호를 그대로 저장하는 것과 하등 다를 것이 없습니다.
사실, 다른 앱은 이보다 더하면 더했지 덜하지는 않을 것 같다는 생각이 들어서 더 충격적입니다...
from CLIEN+
글에 써진 방식으로 알고리즘을 찾는걸 방지하기 위해 보통 Salt 라는것을 씁니다. 암호화를 적용하기 전에 원본 값에 임의 내용을 집어넣는 것인데, 카카오톡은 거기까지 할 정성은 없었나 봅니다.
Salt를 쉽게 이해하실 수 있도록 언급한 것이었습니다. Encryption이라는 것이 기본적으로 사용자가 깰 수 없게 하는 것이 목적인데, 이미 깨어져 버렸지 않습니까. 그것도 아주 간단하게. SHA1인 것을 몰라도 풀 만큼 간단한 Raw data를 그대로 해싱하니까요. 아니면 아예 찾지 못할 만큼(풀려면 한참은 걸릴) 긴 문장을 해싱했어야 합니다.
그도 아니면 탈옥을 하고 역어셈블링을 할 때까지 찾아내지 못하게 하거나, 그럴 자신도 없으면 서버에 저장하고 https 따위를 써서 통신하는 것이 낫습니다. 일단 이 방법으로 모든 사용자의 카톡 비밀번호는 죄다 노출되는 셈이고 그 네자리가 다른 곳(통장이나 카드 등)에도 쓰였다면 범죄에도 악용될 수 있는 소지가 다분합니다.
각별한 주의를 요하기 위해서 쓴 글입니다. 오늘 이를 정리해서 카카오팀과 신문사에 제보할 생각입니다.
from CLiOS
카톡 비번 알려면 아무 컴퓨터에다가 백업받고 백업데이터 뒤지면 되겠군요!
from CLiOS
iTools만으로도 몇 분, 빠르면 1분 안에 뚫리는 구조입니다. 상당히 취약합니다.
from CLiOS
"http://crackstation.net/ 에서는 본인들이 가지고 있는 암호화 알고리즘을 통해 주어진 값을 매치시킴으로써 완벽한 데이터를 얻는 알고리즘을 선별합니다."
(문장이 좀 어색하지만 설명하면 <평문_k,hash_k> 데이터를 무식하게 많이 저장해 두고 입력된 hash_q값 과 같은 hash_i를 찾으면 해당 평문_i를 리턴해주는 겁니다.)
숫자4자리에 a만 붙여 놓으니 기존 DB에 a6439는 SHA1로 암호화 한 hash 값을 가지고 있는 것이고 이 hash값이 같으니 이 hash 는 a6439를 SHA1로 암호화 한거다! 라고 알려주는 거지
hash 값을 복호화 한게 아닙니다
즉, 제가 보기에는 SHA1 암호화가 존재 이유가 없을 정도로 잘못 만들었습니다.
앞에 a를 붙일 정성을 보였으면 K@K@OT@LK등 좀 더 복잡한 문자를 붙였으면 풀리지 않았을 겁니다. 임의의 암호화 알고리즘으로 wrapping 하지 않더라도요.
저런 간단한 4자리 숫자가 암호화 할 평문이라면 저런식으로 하면 안됩니다. 암호학에 아주 초보적인 이해가 안된 사람이 짰다고 볼 수 밖에 없어요.
암호는 그 만드는 규칙이 외부에 노출되는 순간 취약해집니다. 이를 극복하고자 역산이 매우 어려운 방식으로 암호를 기록하고 이를 다시 풀 수 없도록 기록합니다.
네. 말씀하신 부분대로 이루어져야 지당합니다. 애초에 암호가 저장된 위치도 몰라야 이상적이겠지만요.
그런데 네버다웃님이 써주신 것처럼 이건 사실상 역산(?)이 알려져버린 경우와 같습니다. 파일에 저장된 EncryptedPasscode를 SHA1 알고리즘으로 만들어진 DB에 대입하고 비교하면 되니까요. 해싱하는 값이 너무 짧고 평이합니다. 본문에 적은 것처럼 그냥 온라인으로도 풀었습니다. 풀지 못하도록 길게 하던지, 아니면 Salt를 쓰던지, 아니면 서버에 저장하던지 해야 암호의 제 역할을 해낼 수 있으리라고 봅니다.
저 또한 보안의 개념이 부족한 사람이, 아니면 비밀번호가 뚫리든 말든 대충 비밀번호 기능이랍시고 구색을 갖추고 싶은 사람이 아주 허술하게 코딩했다고밖엔 보이지 않습니다.
from CLiOS
염려해주셔서 감사합니다.
from CLiOS
from CLiOS
from CLIEN+
큰 문제 없다고 봅니다.
그 기능에 대단한 보안이 솔직히 필요있나요?
암호화 방식이 문제가 아니라
보안적으로 중요한 자료가 카톡에 있다는것 자체가 문제 아닙니까...
카톡으로 주고받는 메시지는 카톡 서버에도 저장되는데요...
집열쇠 하나 만드는데 미국방부와 csi의 보안성이 필요할까요?
카톡의 저러한 암호화는 딱 그 용도에 맞춰보면 큰 문제가 없습니다.
핸드폰 잠깐 딴 사람 줬을때 내 카톡 내용 못보게 하는거요...
용도에 맞춰볼때 지금 방식으로도 별 문제 없는데
뭐 대단한 이슈인마냥 글을 적우셨네요...
카카오톡에 저장된 대화내용을 이제 누구나 확인할 수 있다는 것이 문제인겁니다.
만일 작성자분의 폰이 분실되어 이렇게 허술하게 사생활이 노출된다는 것이 문제점인거지요.
작성자 분께서 비유를 하신 것처럼 집에 열쇠를 걸어잠그는 이유가 뭡니까? 경찰을 못들어오게 필요한 것일까요? 그게 아닌 아무나 들어오지 못하게 하려는 목적인데, 이제 그 아무나 들어올 수 있다는 것이지요.
카카오톡 서버에 저장되는 대화는 수사기관이나 법적으로 필요할 때 열람할 수 있는 것이지 그 아무나 열람할 수 있는게 아니잖아요?
from CLIEN+
뚫지않는 이상 어떻게 뚫지요?
애초에 내 폰의 보안을 무력화 할때까지
가만히 두고 보는 상황이 이상한 거지요...
아무리 보안이 뛰어나도
0000 ~9999 까지 근성만 있다몀 뚫겠는데요
그럼 뭐, 카톡 진입하는 비번에
공인인증서라도 달아야 하나요?
카톡 비반칠때마다 데이터 사용하겠네
집에 항상 우리가 있는 것이 아니지요. 잠시 외출하였을 때를 위해서 만든 목적도 있습니다.
마찬가지로 휴대전화도 항상 우리가 24시간 손에 쥐고 있는 건 아니지요. 잠시 책상에 두고 나갈 수도 있고 충전한다고 꼽아놓고 볼일 을 볼수도 있고 아니면 실수로 분실할 수도 있습니다.
지금은 그러한 경우가 문제가 될것이다 하는거죠.
물론 0000~ 9999까지 눌러보게 하는것도 문제가 되리라 생각합니다. 그래서 몇번이상 틀리면 몇분간격으로 해제할 수 있게 하는 등 다른 방법이 필요해보입니다.
from CLIEN+
요약하자면 '문제 없음. 뭐 이리 호들갑? 너가 뭐 대단한 거 발견한 마냥 호들갑?'인 것이고요.
보안 관련 이슈는 언제나 조심하는 것이 옳다고 생각합니다만? 막말로 친구와 커피숍에서 커피마시다가 화장실 간다고 휴대폰을 두고 나가면 그 사이에 뚫리는 것 아닌가요? 분실한 경우는요? 내가 의도하지 않은 때에도 내 데이터는 안전하게 보관되어야 합니다. 분명 제가 대안을 제시했지 않습니까. 서버에 저장해두고 SSL로 통신해도 됩니다. 데이터를 많이 쓸까봐 그렇게 걱정되신다면 로컬에 저장하되 해독이 어렵게 하면 되고요. 무슨 공인인증서까지 거론되나요?
앞 댓글들에는 분명히 밝혔지만 여러 사람들의 경각심을 일깨우고 주의하도록 하기 위해 쓴 글입니다. 문제가 있나요? 그냥 그런가보다 하고 지나가야 하는 일이었나요? 어느 대목에 문제가 있나요? 본인이 의도하지 않게 비밀번호가 노출될 수 있다는 내용이요?
앱 내부의 암호라면 그렇게까지 경계할 필요는 없다고 생각됩니다
일반인 수준에서 생각해야지 2중 3중 키를 걸어놓고 암호화했다한들 능력자는 다 뚫습니다
비밀번호 말고도 대화내용도 저장되고 사진도 임시폴더에 암호화없이 저장되는데 그게 더 문제 아닌가요?
from CLiOS
듣고 보니 사진도 문제가 될 수 있을 법 합니다. 아직 안 봐서 모르겠지만 사진도 그대로 저장되나요?
sha1과같은 해시 알고리즘을 사용해서 사용자 비밀번호를 저장하는 방법은 과거 유닉스나 리눅스의 사용자 비밀번호를 저장할때도 같은 방법을 사용할정도로 일반적인 방법이어서 방법자체가 문제가 되진 않을듯해요..
다만 sha1 에 salt까지 적용하지 않은 것이 아쉬움인듯하네요... 또 카카오톡의 비밀번호특성이 4자리 숫자라는 아주 간단한 비밀번호이기에 이런일이 또 나온것같고.. 카카오톡 개발자들이 이부분까지는 미처 생각을 못했던듯하네요~^^
이 토론의 내용이
잘전달된다면 조만간 패치버전이 올라오겠네요^^
from CLiOS
일단은 이를 정리해서 오늘 내로 카카오에 알리고자 합니다. 조만간 저도 SI에 몸을 담을 것 같아서 반가운 느낌이 들었습니다. 선배로써 말씀 감사드립니다.
여러모로 아쉬운 것 같습니다. 국내 1위 메신저인데 말이죠...
인터넷 사이트의 경우 한번 로그인하면
로그아웃 하기 전까지는 일반적인 경우
재로그인을 요구하지않습니다.
하지만 카톡은 다릅니다.
메시지 주고 받을 일이 많은 사람이 있다면
그 사람은 매번 카톡을 확인 할때마다 비번을 쳐야 합니다.
그런데 보안강화를 위해 숫자4자리가 아닌
(어차피 숫자는 0000~9999 니까)
영문 숫자 특수문자 혼합 최소 8자리 로 입력하라고 한다면
이거 힘들어서 쓰겠습니까?
아... 이렇게 해놓으면 또 인터넷 사이트들 비밀번호랑 같으면 어떻게 하냐고 말하겠군요.
그럼 은행처럼 공인인증서를 넣어야 겠네요.
카톡 확인할때마다 공인인증서 인증 받아야 겠네요...
아이폰 설정에 가서
암호설정 하시면 됩니다.
간단한암호 풀면 길고 어려운 암호도 입력 가능합니다.
단순무식하게 0000 ~ 9999 까지만 넣어도
풀리는건 어떻게 생각하시는지요.
이건 암호화 방식이 문제가 아닌데.
본문에 써있긴 하지만... 그게 무슨 의미가 있는지...
이이폰 기본 연락처나 사진앱에 잠금 기능이 없는건 어떻게 생각하시는지요...
생각해보면 말씀주신것처럼
이미 아이폰자체에서 여러 보안기능을 제공하기에...
아이폰 자체 비밀번호락이나 find my iphone 서비스등...
이런것들을 잘활용하면 개인정보유출을 어느정도는 막을수있지 않을까 생각은했습니다..
하지만 국내 1위 메신저로써 효용성이 있냐 없냐를 떠나서 보안에도 이만큼 신경써주면 좋은일 아니겠습니까~~~ 그렇게 좋게좋게 생각했습니다
from CLiOS
하지만 일반적으로 보안의 강화는 사용자의 편의와 반비례 합니다.
보안이 뛰어나질수록 사용자는 불편해지는 것이죠.
그래서 생각해봐야 하는게...
과연 이 사람이 얼마만큼의 보안을 필요로 하냐 라는 겁니다.
일명 목적과 용도죠...
사용자의 편의를 위해
어느정도의 보안은 포기해야 하는게 맞습니다.
모든 어플의 보안수준이 은행어플과 같을 필요는 없죠.
장미칼 이것저것 잘린다고 유명하든데
종이 자르는데 장미칼은 필요없습니다...
용도에 따라서는 문방구에서 파는 싸구려 칼이 더 좋아요.
카톡에 암호를 왜 거는지요...
그 용도를 생각해봐야 합니다.
과연 카톡에 고도화된 암호체계가 필요한지...
그로인해 사용자들이 불편함을 감수할수 있을지...
어차피 현 방식으로는 0000 ~ 9999 까지
넣으면 풀리는데 이 방식을 포기하지 않는 이상
암호체계를 강화한들 무슨 의미가 있는지...
애초에 보안적으로 중요한 자료를 카톡에 저장한 사람도 잘못이 있는건 아닌가 생각해야 합니다.
(카톡 대화내용은 카톡서버에도 저장되니까요...
카톡 서버가 해킹당할수도 있는거구요)
지금 이 글에서 이야기 하는건 암호/복호화의 문제이지, 사용자가 뭐 수십자리 암호를 만드네 마네 하는 이야기가 아니란 말입니다.
계속 딴소리만 하시니....
그냥 딴지걸기위한거로밖에 안보이는....
여기서 말하는 논지는 비유하면 집 열쇠가 있습니다. 그 열쇠가 특수한 장비나 기술이 없어도 쉽게 풀린다는 겁니다. 즉, 있으나 마나 한것이란거죠.
0000~9999까지 눌러보는 것에 제가 해결책을 제시했습니다. iOS처럼 오류 횟수에 따라 특정 시간만큼 대기하도록 하는 방법이 있다 하였습니다.
from CLIEN+
보안문제는 모든 IT업계에 치명적인 이슈라서 다음업데이트때 개선되겠네요..
그리고.. 음..
혹시 카카오만 이런건가요?? 라인이나 마미피플.. 와츠앱이나 바이버도 좀 알아봐주시면 감사하겠습니다
솔직히 암호화 적용하면서 sha1 적용하면서 평문이 "a1234"로 들어간다는 것은 프로그램할때 보안따위 신경 끄겠다는 뜻입니다.
뭐 따지면 이런 앱 한두개가 아닐듯 하지만.. 그렇다고 카톡 같은 전국민이 쓰는 앱이 욕 안먹을 이유는 안되죠.
이 건은 문제가 있어 보이네요.
위에 몇몇분은 문제없다고 말씀하시기도 하는데...애초에 암호거는기능이 없다면 모를까...암호기능이 있는데, 실효성이 떨어지는 상황은...ㅎㅎㅎ
자기집 현관을 늘 열쇠로 잠그고 다녔는데, 알고보니까 아무키나 꽂으면 열리는 구조였던 상황이네요...
from CLIEN+
그리고 카톡에 비번걸 정도면 아이폰비번은 기본으로 걸지 않나요?
아이폰 비번을 안걸면서 카톡만 건다는게 더이상하다는... 사진, 주소록, 통화목록 다 보일텐데...
그리고 어짜피 사전방식으로 비번 찾아주는건 모 해커그룹에서 16자리 모든 영어,숫자,특문의 조합은 만들어서 뿌리지 않았나요.... 최소 16자리 이상은 해야 되는거네요..
(뭐 32자리까지 곧 만들어진다고 발표한거 같지만요...)
http://www.mimul.com/pebble/default/2013/02/18/1361189648941.html
from CLiOS
암호화가 무색한 수준. 마음만 먹으면 1분도 안걸려서 뚫겠네요
from CLiOS
해시된 값이 탈취 가능하고 salt도 약하고 제한된 입력으로 쉽게 원문을 추적가능한 건 확실히 문제가 맞습니다.
여기서의 논점은 SHA1이 문제가 아니라 위에 나열된 조건들로 인해 원문이 추적가능한게 논점이구요, 이부분에 대해서는 개선해달라고 하는게 맞지요.
그리고 이부분은 편의 기능이기 때문에 이 기능을 대화내용 보호의 절대적인 방안으로 생각하고 접근하는건 아니라고 봅니다. 위에서 말했듯이 개인이 설정해 놓은 의미있는 원문값이 유출되는게 가장 큰 문제이지요.