MD5 는 보안상 위험한가요?

pogusm의 이미지

md5("key"+"0") = 21f402f25b1a0fd722b83169e10509f8
md5("key"+"1") = c2add694bf942dc77b376592d9c862cd
md5("key"+"2") = 78f825aaa0103319aaa1a30bf4fe3ada
md5("key"+"3") = 3631578538a2d6ba5879b31a9a42f290
md5("key"+"4") = caf8e34be07426ae7127c1b4829983c1
md5("key"+"5") = 3daa9b9a0cd29195de716a044c73783f
md5("key"+"6") = 646df7a169a38bbff2f196188a0f78c6
md5("key"+"7") = f99154cdd994fbe94f74ecc986589eee
md5("key"+"8") = 5d418dbd02ac1097f9ca517b13c92edb
md5("key"+"9") = 0cd6c8eb4cfdc48041d33e121648a17e
md5("key"+"10") = f127d518e798ab8e3d66716af7e2d54b
...

위처럼 MD5(키값+정수) 샘플이 100만개~1억개가 있을때
키값을 알아내는것이 가능한가요?
(키값은 [a-f0-9]의 32문자로 이루어져 있으며, 무작위 입력을 통한 방법으로 쉽게 알 수 없음)

단 하나의 md5 결과값의 원값을 아는것은 불가능하다고 알고 있습니다.
하지만, 같은 결과값을 갖는 값을 알아낼 수도 있다고 알고 있습니다.
레인보우테이블을 이용해서 알아낼 수도 있고요..

그런데, 만약 위와 같이 일정한 규칙을 갖는 조건하에
100만~1억개의 md5 결과값이 있다면 어떨지...
궁금합니다.

gilgil의 이미지

1. md5 have value는 2^128개의 경우의 수가 있기 때문에 1억개로는 안되죠.
2. key(password)의 md5 값을 salt key와 조합한다면 더 어려워 집니다.

red10won의 이미지

서버 스펙이 좋으시다면,,

md5 결과물을 다시 base64로 다시 sha1 로 암호화해서 저장하는것도 한 방법입니다.
접속자가 많고 접속시 속도가 조금 느릴수 있으나

패스워드가 유출되었어도 단어장이나 무작위 대입으론 한번 암호화한것보다 힘들겁니다.

결국 md5같이 복호화불가능한건 쉬프트연산해서 데이타를 짤라 버리는거니 복호화는 불가능하고
다만 그게 해슁 테이블에서 패턴을 대입해서 일치 하는지 여부만 아는거죠,,

md5크랙이라고 하는건 사실 다 개소리 라고 생각하는 1인입니다.

단적인 예로 md5("1234") 결과를 구글에 돌리면 검색되겟지만
a= md5("1234");
b= base64(a);
c= sha1(b);
c값은 구글에 검색해도 안나오겠죠;;
혹시나 나올수도 있겠지만요 ㅎ

익명 사용자의 이미지

선무당이 사람 잡는다더니, 이렇게 하면 단지 결과만 길어질 뿐이지 SHA1 함수에 입력으로 들어가는 값은 결국 사용자가 원래 입력한 값이 아니라 MD5 돌린 값이기 때문에 삽질만 더 할 뿐이지 MD5보다 나을 것이 거의 없습니다. 요즘에는 GPU 성능이 워낙 좋아져서 MD5 정도는 뚫을 수 있습니다.

차라리 HMAC, bcrypt, scrypt를 쓰는 게 더 낫습니다.

pokev25의 이미지

이론상으로는 원글자를 찾는건 안됩니다.

하지만 사전기반으로 사전단어를 md5해놓은걸 DB구축한다면? 그걸 실행에 옮긴 사이트가 있습니다.

http://md5.rednoize.com/

물론 모든 단어가 다 있지는 않습니다만 사전기반 단어는 100% 나옵니다.

SHA1도 마찬가지입니다.

여러가지 기법이나 암호화 함수가 있는데

http://helloworld.naver.com/helloworld/318732

이글을 참고 하시기 바랍니다.

Stand Alone Complex의 이미지

위험합니다.
쓰지마세요.
md5 해시 알고리즘에 대한 많은 공격 방법이 공개되어 있습니다.

내가 못할 것 같다고 공격자도 못할거라고 생각한다면, 그건 경기도 오산입니다.

RET ;My life :P

오산주민의 이미지

왜 오산이죠?

송효진의 이미지

md5 해시가 노출되는게 아닌이상 db 털렸을 경우를 위해 암호화를 하는건데,
md5 를 하지 말아야 하는게 아니고, salt 를 줘서 db 화 된 것에 대입이 안되도록 해야 하는거라 생각합니다.

어떠한 해시 알고리즘이라도 결과가 랜덤한게 아니라면 마찬가지라고 생각합니다.

해시는 해당 해시로 해싱되는 문자열을 계산해 낼 수 있습니다.
salt 를 주면 그 문자열로 db 턴 사이트에는 로그인이 가능하더라도,
타 사이트에도 같은 문자열로 로그인을 하지는 못하겠죠.

md5(password + 'db화 된 자료 검색 못하게 문자열열열')

salt 를 줘서 해싱을 하면 '진짜 원본 문자열'은 알아낼 수 없고,
같은 해시가 나오는 문자열로 다른 사이트에 로그인 할 수 없다는 것 정도가 비밀번호 해싱의 한계일 것 같습니다.

db 털린 사이트를 보호하는 방법은 비밀번호 초기화 밖에 없다고 생각합니다.

cpu + gpu 로 무식하게 돌려보는것에 대응하기 위해 좀 더 큰 결과값을 가지는 다른 해시 알고리즘을 사용하는 것에는 찬성합니다.

pogusm의 이미지

md5(salt+"0") = 3d0ab36f5b60d3f812175ac3c2ad4d6f
md5(salt+"1") = d2a3f3f88f151297222fc630a0565855
md5(salt+"2") = c00c3511ce5f2715a85c2859c21e64ad
md5(salt+"3") = c790d21d72f0fefa8fb0a34cf1d30ee9
md5(salt+"4") = f6709de7d6f206aa8f044a0511154b90
md5(salt+"5") = 3e04eb1bc01377f91c1a5541cd8e39c4
...

결론은
"MD5 생성 문자열의 규칙성"과 "결과값"을 다량으로 알고 있더라도
salt 값을 정확히 알아내는 것은 거의 불가능 하다
인것 같네요.

감사합니다.

익명 사용자의 이미지

위키백과 내용에 따르면 2006년에 노트북 한대로도 수십시간 안에 해시값 충돌을 찾을 수 있는 알고리즘이 발표되서 보안이라는 측면에서는 거의 못쓰게 됬다네요
앞에 분들이 이야기한 무작위 대입법은 수학적인 알고리즘이라면 당연히 시간이 오래 걸리지만 md5의 경우에는 알고리즘 상의 결함으로 인해 무작위 대입법이 아닌 다른 알고리즘을 쓸 경우 훨씬 빠르게 뚫린다는 겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.