MD 알고리즘에 대해서 질문이요.

chadr의 이미지

어떤 분께서 md알고리즘이 손실 암호화방식(?) 이라서 원문이 없이는 절대 복호화가 불가능하다고 하시던데.. 그게 맞는 말인가요?

이 질문을 올리기 전에 검색을 해봤는데 md 알고리즘으로 암호화를 해서 전송을 하시는 분이 계시더라구요.. 그럼 복호화가 안되는데 암호화라니..=_=

혼란입니다..

아래는 그 분께서 올리신 글의 내용입니다.

Message Digest (MD) 는 암호화 알고리즘의 일종입니다.
주로 데이터의 무결성을 보증하는 역할을 하는 암호화 알고리즘으로 그 자체가 데이터 전달의 목적은 될 수 없습니다.
원문이 유출되는 것이 큰 문제가 되지는 않으나 중간에 위조될 가능성이 있을 경우 원문 전체를 강력하게 암호화하는 것은 여러모로 거추장 스럽기 때문에, 원문의 모든 데이터를 근거로 수바이트밖에 안되는 짧은 문자열로 반환해주는 것으로서, 일종의 손실 압축 방식이라고도 볼 수 있습니다.
원문과 그 문서의 MD 키가 함께 주어졌을때 수신자가 원문을 다시 MD 로 암호화 해보고 두 MD 키가 같은지를 보는거죠..
물론 MD 키는 별도로 암호화를 해서 보내어 상대방이 복호화 해낼수 있게 해야 되겠죠.

따라서 MD 키로는 원문을 복구해내는게 절대 불가능하여 MD 키는 원문을 찾아내는 단서가 될 수 없으며, 일일이 원문을 대입해보는 Brute Force Attack 방식 외에는 복호화 방법이 없습니다.
그러나 일반적으로 MD 는 큰 문서나 파일을 손실 압축시킨 것인데다가 MD 키만 보고는 원문의 길이를 전혀 추정할 수 없으므로, Brute Force Attack 을 사용하는건 생각하기도 어려우며, 한마디로 "원문이 없을 경우" 송신자와 수신자를 포함해 누구라도 복호화가 원천적으로 불가능한 방식입니다.

또한 crypt알고리즘이 복호화가 가능하다고 하시던데-_-a

제가 알기로는 crypt알고리즘은 복호화가 불가능하다고 알고 있거든요.

어떤것이 맞는지..=_=

아래또한 그 분께서 올리신 글의 내용입니다.

RFC 1244 문서에서 발췌했습니다. 유닉스 시스템의 crypt 알고리즘은 제2차 세계 대전때 고안된 에니그마의 암호화 방식을 기반으로 하기 때문에 불안하다는 군요. 그리고 그 명령어로 파일들을 암호화하면 복호화되기 쉽다고 합니다.
Crypt

Similar to the DES command, the UNIX "crypt" command allows
a user to encrypt data. Unfortunately, the algorithm used
by "crypt" is very insecure (based on the World War II
"Enigma" device), and files encrypted with this command can
be decrypted easily in a matter of a few hours. Generally,
use of the "crypt" command should be avoided for any but the
most trivial encryption tasks.

goodfiend의 이미지

내용은 자세하게 잘 설명해 놓으셨네요..

몇가지 예를 들어보면..

파일 받으실때 MD5SUMS이런거 같이 다운 받아보신적 없나요?

중간에 누가 가로채서 그 파일에 백도어를 심어놓았을수도 있잖아요~

MD5로 체크해서 원본이 맞는지 아닌지 확인해보면 좋져..

이것 말고도 리눅스에서는 패스워드를 MD5로 저장해놓잖아요..(옛날엔 crypt로 저장했지만 취약점이 있기 때문에 대체되었죠)

복호화가 불가능하니깐 암호화된 패스워드를 도난당해도 패스워드를 맞추기가 상당히 힘들어지죠..

MD5도 완벽한건 아닙니다..

crypt와 MD5의 취약점에 대해서 자세히 알고 싶으시면 책이나 문서를 찾아보시는게 좋을거 같네요~

fliers의 이미지

md5 는 설명에도 잘 나와 있는 것 같군요.
손실압축에 포함시켜야 할지는 의문스럽긴 하지만,

어떠한 메시지라도 하나의 유일한 해시값을 만들어 내도록 하는 것이 md5 값입니다. 그래서 무결성체크로 많이 사용되고 있고요..
finger-print 지문이라고도 하죠...

crypt의 경우에는 일반적인 복호화 기능은 없지만 crypt를 위해 필요한 것이 암호에 해당하는 salt값과 원문장(비밀번호)가 필요합니다. salt를 이용해서 암호화 하게되는데 crypt결과값의 맨 앞에 따라붙죠...
그래서 방법이 간단한건 아니지만 우선 salt값을 가지고 사전데이터를 이용해서 일일히 crypt를 해봅니다. 그래서 딱 맞으면 그게 원문이 되는것이고요
그래서 약간 좋은 방법은 아니라고 생각됩니다.
옛날엔 /etc/passwd 빼내서 저러 방법으로 해킹하는것도 있었던 것 같네요..

Prentice의 이미지

손실압축은 인간의 감각기관으로 인지되는 내용을, 인간의 감각의 특성을 잘 활용하여 압축하는 방식을 의미합니다. Perceptual coding이라고도 하고, 오디오의 손실압축의 경우 psycho-acoustic compression이라고도 합니다.

압축+압축해제를 거치지 않은 원본과 압축+압축해제를 거친 결과물을 눈이나 귀로 구분하는 것이 쉽지 않게 하면서 용량을 줄이는 것이 손실압축의 목표입니다. 즉 정보를 효율적으로 전달하는 것이 손실압축의 목표라고 하겠네요.

MD5의 경우 정보를 전달하기 위한 것이 아니라, 정보의 무결성을 보증하기 위한 것이므로 손실압축과는 아주 거리가 멀다고 하겠습니다.

그리고 crypt 알고리즘으로 파일을 암호화하는 것은 가능한 것으로 알고 있습니다. mcrypt(1) man page 한번 봐보세요.

ihavnoid의 이미지

md가 이용되는 목적은 나중에 이 데이터를 해독하기 위함도 아니고, 압축을 하기 위함도 아닙니다.

이용되는 목적을 '예를 들어' 하나 정도 들어보죠.

도청을 당해도 괜찮고, 못 받으면 못 받았지, 절대로 '변조되어서는' 안되는 데이터가 있다고 해봅시다. 그리고 이 데이터를 A가 B한테 보내야 한다고 합시다.

연결회선은 두가지가 있습니다. 최첨단 암호화 알고리즘들로 보호되고 있고, 아무도 중간에 끼어들 수 없는 전용회선 하나와 그냥 동네 초딩들도 구경할 수 있는 그냥 회선. 문제는 첫번째 회선은 속도가 매우 느리면서 데이터 전송하는 데에 드는 비용은 무쟈게 비쌉니다. 근데 데이터가 엄청나게 많습니다.

이때 누가 위조하지 않았으리라 보장할 수 있는 방법은, 그 무쟈게 비싼 회선으로 MD로 암호화한 데이터를 보내고, 대량의 데이터는 싸구려 회선으로 전송을 합니다. 그런다음, 도착한 데이터를 다시 MD로 암호화 해서 두가지가 일치하는지 확인을 해 보면 되겠죠.

수백메가의 데이터를 암호화 해도 16바이트 정도의 데이터만 나옵니다. 이거를 안전하게 전송하는 것은 그렇게 힘들지 않죠. 하다못해 종이에 적어갖구 들고가서 비교해도 됩니다.

문제는, MD 알고리즘들은 여러가지 해킹에 매우 강해야 합니다.
만일 누가 위의 수백메가의 문서를 어떻게 잘 변조해서 똑같은 MD 암호화 결과물이 나오도록 한다면, 결국 그 해커는 맘대로 데이터를 변조할 수 있게 되겠고요.

Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24

펑키의 이미지

보안시스템을 보시면 MD5를 자주 보시게 될것입니다. 그런데 '암호화'는 대부분 MD5에 의존하는것이 아닌 빅넘버를 구해서 키를 가지고 하는 경우가 있고 MD5는 다른 분들이 말씀 해주신것 처럼 '무결성 검사'용이 대부분입니다. 물론 MD5로 한다기 보다 SHA1을 이용하는 경우가 대부분일것입니다.

MD5라는 말에서 풍기듯이 다이제스트 코드를 생성하는 것입니다. '0A E3 01'이라는 코드를 MD5로 생성하면 어쩌구 저쩌구 32바이트짜리(맞을런지) 다이제스트 코드가 생성됩니다. 이중 중간에 E3라는 부분을 다른것으로 변경하면 그 다이제스트 코드가 변경이 될것입니다. 그래서 암호화 복호화하는 의미가 아닌 무결성 검사라는 의미로 생각하시면 좋을것입니다.

저는 이것을 세션ID값으로 이용하고 있습니다. 사용자가 정상적으로 로그인하면 이것 저것 값을 조합해서 MD5값을 생성해주고 이것을 사용자에게 던저주면 세션이 유지되는 동안에는 저 값을 사용자에게 계속 유지해서 검사를 하고 있습니다. 물론 어떠한 경로를 통해서 저 값을 생성했는지 풀고자 한다면 풀수가 있지만 서버측에서 매 접속시마다 생성되는 알고리즘을 자동으로 바꿔주니깐 풀어봐야 뭐.. 헤헤~~

다시 말씀을 드리면

'0A E3 01' 코드를 이용해 '어쩌구 저쩌구 MD5 HASH'를 생성했다면 어쩌구 저쩌구 MD5 HASH라는것을 이용해 '0A E3 01'를 알아 내는것이 아니라 결과물을 가지고 최초 원본과 대조하여 맞나 않맞나 확인하는 정도.. 뭐 그렇게 이해 하시면 될겁니다.

PKI 툴들을 보시면 전자봉투라고 있습니다. 이곳에 위변조 방지를 위해서 서명을 넣을수 있는데 이럴때 이러한 것이 이용됩니다.(실제로는 SHA1을 이용)

이 전자 봉투라는것이 보통 세무사들이 사용하는데 데이터의 전송 경로가

세무사 -----> 기업 -----> 기타 기관(은행이나 정부 기관등등)

이러한데 데이터의 제출 주체는 기업인데 발급 주체는 세무사로 되어 있습니다. 따라서 세무사가 자신들의 공인인증서를 이용해 전자서명을 하게됩니다. 그러면 기타 기관에서 기업에 의해 위변조가 되었는지 확인이 가능합니다.

즐거운 하루 되세요. 어제(추석날)가 제 생일이었는데 올해는 어머니가 끓여주신 미역국맛이 조금 다르네요. 연세가 자꾸 드시니 음식맛도 변하는가봐요. 그런데 충격적인 통보를 들었는데 다음주부터 컴퓨터를 배우실테니깐 집에 컴퓨터 한대 사다 놓으시라고 하시네요. 아~~~~~~~ 정말 놀랬어요. 인터넷이라는것도 해보고 싶고 그걸로 그림도 그려보고 싶고... 하시는데.... 어머님 연세는 예슨일곱이십니다.

jj의 이미지

많은 분들이 답변해주셨군요...

md5와 같은 알고리즘은 특성은,,, 매우 작은양의 데이터가 변해도 확 바뀌죠...

수십 수백 메가의 데이터를 1bit 만 바꿔도 hash값은 완전히 틀려지는걸 볼 수 있습니다...

--
Life is short. damn short...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.