md5암호화도 완벽한건 아니군요
2012.04.06 17:04
운영하는 홈페이지에 보안이 얼마나 되는지 알고싶어서 디비가 탈취된후 md5로 암호화된게 얼마나 풀리나 테스트를 해봤는데... 꽤많은 수의 암호가 풀려버리네요...
음냐... 그리고 충격적인건 많은 분들의 암호가 111111이렸다능....
코멘트 11
-
piloteer
04.06 17:39
사실 그나마 제로보드같은건 암호화를 한번 돌려보기라도 하지 다른 곳은 쌩으로 저장하는 경우도 꽤 있습니다.
얼마전에 어떤 유명 사이트에서 비밀번호 찾기 기능을 썼더니 제 이메일로 제가 예전에 적어둔 비밀번호가 그대로 날아왔습니다-_-. 그때 그 황당함은 아직 잊혀지지 않습니다.
-
낙랑이
04.06 17:13
역암호화 알고리즘이 없다고 절대 못 푸는 건 아니죠. 암호라이브러리를 만들어 놓으면 비교하면 간단한건 다 나오니까요 ㅎㄷㄷ -
piloteer
04.06 17:16
md5는 이미 낡은 알고리즘입니다. 재대로 하려면 sha랑 md5같은걸 여러 번 섞어서 자체알고리즘을 만들어야 합니다.
일단 그렇게 하면 md5,sha1용으로 나온 해시 딕셔너리를 사용하는 딕셔너리 어택만큼은 막을 수 있습니다. 말씀하신 레인보우 테이블 같은 거 말이지요.
그래도 소스가 유출되면 부르트-포스 어택의 여지가 있으므로 재대로 보안을 하려면 부르트-포스시 속도가 느려지도록 키스트레칭을 해줘야 합니다. FPGA를 이용해 부르트-포스 어택을 감행할 경우 상당히 빠른 속도로 연산이 가능하기 때문에 부르트-포스로도 운이 나쁘면 키가 뚫릴 수 있습니다. 특히 딕셔너리에 나오는 키거나 주민번호같이 적은 조합으로 연산이 가능한 경우 더합니다.
문제는 그렇다고 키스트레칭을 너무 많이 하자니 웹서비스의 경우 속도저하가 일어나버리는 경우가 생깁니다. 결국 그나마 실용적인 방법은 적당한 알고리즘을 조합해낸 후에 소스라도 털리지 않도록 하는 거지요.
간단한 예제로는 이런 방식을 쓸 수 있습니다.
for(i:1..30) $hash = md5(sha1($hash)+"code");
(예제에선 md5와 sha1를 썼지만 실제로는 다른 암호화 방식을 같이 써야 안전합니다. 이것들은 완전 밑천이 들어난 방식들이라서요.)
제가 알기론 7z는 키스트레칭을 위해 sha256을 수십만 번 돌리는 걸로 알고 있습니다.
물론 무엇보다도 안전한 서버 보안 방법은 제로데이 어택조차 힘들도록 재때재때 서버를 패치해 주고 서버측 코드에 구멍이 없도록 해서 처음부터 안 뚫리는 거지요. 서버를 지속적으로 관리해주고 sql인젝션과 xss만 잘 막아도 거의 어지간한 초보 해커의 공격은 다 막습니다만...한국 사이트들은 위지윅을 사용하는 덕에 xss에 상대적으로 더 취약합니다. 당장 제로보드도 얼마 전에 xss약점이 공개되었지요.
-
현재 시점에서 md5는 그냥 CRC처럼 쓰기 위한.. ㅋㅋ
-
거의 그렇죠 ㅎㅎ
오류체크용ㅋㅋ;;; -
클라우드나인
04.06 17:20
md5는 딕셔너리가 나온지 7~8년 정도 됐고, sha-1도 뚫린지 꽤 됐습니다.
이거 두개는 암호화 알고리즘으로 가치 자체가 없습니다. 그런데 아주 많은 수의 사이트에서 이 방식으로 암호화합니다.
비단 md5, sha 뿐만 아니라, 현재 알려진 모든 암호화 알고리즘은
암호화된 문구가 털리더라도 마음만 먹으면 얼마든지 뚫을 수 있습니다.
게다가 표본수가 많으면, 거의 뚫립니다.
현재 mathematically secure cipher algorithm은 없으며,
그보다 한참 덜 안전한 pratically secure cipher algorithm도 없습니다.
털린 기업이 '현재 수준에서 최고의 암호화'라고 해도,
표본수가 많으면 거의 무조건 다 털립니다. 안전한 암호화 알고리즘 자체가 없거든요.
즉 네이트가 3000만명 털렸으면, 암호화를 하고 뭔 짓을 하건 상관없이, 죄다 다 털린겁니다.
참고로 mathematically secure cipher 알고리즘은 NP와 P가 같거나 다름을 증명한 후에야 '이론적 기초'가 생기는 분야이고, NP - P문제를 풀면 노벨상, 필즈상을 비롯해서 세계의 모든 상이란 상은 싸그리 다 받고
이건희는 물론, 빌게이츠 워렌버핏정도의 부는 그냥 하루아침에 벌 수 있습니다.
즉 mathematically secure cipher algorithm 만들면 '세계는 내꺼'가 되는거고,
다시 말해서 그런 알고리즘은 없습니다.
결론: 많은 표본이 털리면, 그냥 포기하고 다 털렸다고 봐야한다.
-
흠.. 이제는 영문 + 숫자 조합으로 8자리이상 만들라고 공문왔던데....
-
MD5는 Hash Table용도 아니었나요? :)
-
영문, 숫자, 특수문자의 조합으로 암호를 사용중인데..
암호 알아내는데 시간이 조금 더 오래 걸릴뿐.. 결국 알아낼 수 있죠.
개인정보만 알면 비밀번호 몇개만 쳐 봐도 알아 낼 수 있지요. 대부분의 사람들이 그렇게 사용하는 것에
놀랬습니다.
하긴 농협 뚤렸을때 root비번이 1234였다는...
-
저도 암호화의 위험을 잘 경험했습니다. 연구실에 공용으로 쓰라고 리눅스 서버를 깔고 암호를 1234로 했거든요. 다음날 전산팀에서 와서 서버를 통째로 들고갔습니다. 그 컴퓨터가 미라가 되서 스팸 메일을 수만개씩 보내고 있다었네요. -_-; 정말 그 짧은 시간에 뚫려서 좀비피씨까지 만들 수 있는 가에 대해서 그 기술력에 놀랐습니다.
그럼 결국 DB 털리면 대부분의 유저들의 비번 아이디도 함께 털린다는 이야기군요.
모든 사용자가 어려운 패스워드를 걸어놨을리 없으니 전부 털리진 않아도 각개로 신용카드 정보 격파...