2011년 11월 13일 일요일

MD5 에 대하여



 파일 중복 검사 Python script 를 작성하기 위하여, 파일 무결성 검사에 사용할 수 있는 MD5 암호화 해시 알고리즘에 대하여 자료 조사를 하였다.
  • Definition from wikipedia.org
 MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다. 1991년에 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했다.
1996년에 MD5의 설계상 결함이 발견되었다. 이것은 매우 치명적인 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1와 같이 다른 안전한 알고리즘을 사용할 것을 권장하기 시작했다. 2004년에는 더욱 심한 암호화 결함[1]이 발견되었고. 2006년에는 노트북 컴퓨터 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 발표[2]되기도 하였다. 현재 MD5 알고리즘을 보안 관련 용도로 쓰는 것은 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있다. 2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표되기도 했다[3].
  • 작동 방식
 MD5 알고리즘은 임의의 길이의 입력 데이터를 받아, 128bit 길이의 해시 값을 출력한다. 512 비트씩 처리하기 때문에 입력 데이터를 512 비트에 맞춰 패딩한 다음 해시 함수에 처리되어 결과 값이 출력된다.
  • 정리
 MD5 는 해시 충돌이 발생할 수 있는 알고리즘이다. 서로 다른 내용을 가진 2가지의 입력이 해시 함수에 입력되었을 때 서로 다른 해시 값이 출력되어야 하지만 같은 값이 출력되는 것을 해시 충돌이라고 한다. 예를 들어, Java Map 객체에 <"1", "A"> 와 <"2", "B"> 를 차례로 입력하였는데, Map 객체가 사용하는 해시 함수가 해시 충돌이 있을 경우, 같은 저장소에 "A", 와 "B" 가 차례로 입력되어 결과적으로 하나만 입력된 상태가 되는 것이다.
 그렇기 때문에 아주 철저한 검사가 필요한 경우에는 MD5 로 무결성 검사하는 것은 맞지 않으며 더욱이 암호화 알고리즘으로는 맞지 않다.
  • 무결성 검사에 사용하는 방법
 어떤 파일의 MD5 값을 출력하고자 한다면 MD5 알고리즘의 입력에 파일의 내용을 넣으면 된다. 그러면 알아서 MD5 값인 128비트 스트링이 출력된다.
 이런 MD5 값을 산출할 수 있는 많은 유틸리티가 인터넷에 공개되어 있으므로 2~3분만 구글링하면 쉽게 유틸리티를 구할 수 있을 것이다.