검수요청.png검수요청.png

"MD5"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
 
(사용자 5명의 중간 판 21개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''MD5'''(message digest 5)는 입력 [[데이터]]로부터 128 [[비트]] 메시지 축약을 만듦으로써 데이터 무결성을 검증하는데 사용되는 알고리즘이다.<ref name="데이터포털">〈[http://www.dbguide.net/db.db?boardUid=145958&boardConfigUid=9&boardIdx=107 제3장 DBMS_CRYPTO]〉, 《데이터 전문가 지식포털》</ref> MD5는 [[전자서명]] [[응용 프로그램]]들과 함께 사용할 목적으로 미국 [[MIT]]의 [[로널드 리베스트]] 교수가 개발하였으며, 큰 [[파일]]들은 [[RSA]]와 같은 [[공개키]] 암호 사용법하에서 [[개인키]]와 함께 암호화되기 전에 안전한 방법으로 압축되어야만 한다. MD5 규격은 현재 [[IETF RFC]] 1321에 명시되어 있다. MD5 규격에 따르면, MD5 알고리즘에 입력된 어떤 두 개의 메시지가 동일한 메시지 축약을 결과로 내거나, 또는 어떤 메시지 축약을 통해 엉뚱한 메시지가 만들어지는 것은 "계산적으로 불가능"하다고 한다. MD5는 리베스트가 만들어낸 메시지 축약 알고리즘으로는 세 번째이다. 초기의 8 비트 버전인 MD2, 그리고 MD4와 최신 버전인 MD5 등은 비슷한 구조를 가지고 있지만, MD2는 8 비트 컴퓨터에 최적화되어 있는데 비해, MD4와 MD5는 32 비트 컴퓨터에 최적화되어 있다.<ref>〈[http://www.ktword.co.kr/test/view/view.php?nav=2&m_temp1=1071 MD5, MD-5, MD4, MD-4 Message Digest 5, Message Digest 4]〉, 《정보통신기술용어해설》, 2016-04-04</ref> MD5 알고리즘은 [[MD4]]의 확장판인데, MD4에 비해 속도가 빠르지는 않지만, 데이터 보안성에 있어 더 많은 확신을 제공한다.<ref name="데이터포털"></ref><ref>Margaret Rouse, 〈[https://searchsecurity.techtarget.com/definition/MD5 MD5]〉, 《TechTarget》, 20187-07</ref>
+
'''MD5'''(message digest 5)는 입력 [[데이터]]로부터 128 [[비트]](bit) 메시지 축약을 만듦으로써 데이터 [[무결성]]을 검증하는데 사용되는 [[해시]] [[알고리즘]]이다. 1991년 미국 [[MIT]]의 교수 [[로날드 리베스트]](Ronald Rivest)가 이전 버전인 [[MD4]]의 결함을 보안하기 위해 개발했다.
 +
 
 +
==개요==
 +
MD5는 [[전자서명]], [[응용 프로그램]] 등 정보보호를 목적으로 개발한 해시 알고리즘이다. 프로그램이 위변조 되었는지를 확인하는 무결성 검사에 사용된다. 입력받은 메시지를 128비트로 압축하는 방식이며, 이전 버전으로는 [[MD2]], [[MD4]]가 있다. 1996년 보안상 결함이 발견되어 보안용으로 사용하는 것은 권장하지 않는다.<ref name="데이터포털">〈[http://www.dbguide.net/db.db?boardUid=145958&boardConfigUid=9&boardIdx=107 제3장 DBMS_CRYPTO]〉, 《데이터 전문가 지식포털》</ref> 큰 [[파일]]들은 [[RSA]]와 같은 [[공개키]] 암호 사용법하에서 [[개인키]]와 함께 암호화되기 전에 안전한 방법으로 압축되어야만 한다. MD5 규격은 현재 [[IETF RFC]] 1321에 명시되어 있다. <ref name="MD5">〈[http://www.ktword.co.kr/test/view/view.php?nav=2&m_temp1=1071 MD5, MD-5, MD4, MD-4 Message Digest 5, Message Digest 4]〉, 《정보통신기술용어해설》, 2016-04-04</ref>
 +
 
 +
==특징==
 +
* 임의의 길이로 입력받은 메시지를 512비트 단위로 처리해 128비트로 암호화한다.
 +
* 입력 메시지의 길이 제한이 없다.
 +
* 해시값 길이 : 128 비트
 +
* 패딩 처리 : 메시지 길이를 512 비트 정수배로 만든다
 +
* 해싱 충돌 방지 확률 : 약 2^64 <ref name="MD5"></ref>
 +
 
 +
==비교==
 +
* [[MD2]] : MD2는 8비트 [[컴퓨터]]에 최적화되어있는 반면 MD5는 32비트 컴퓨터에 최적화되어있다.
 +
 
 +
* [[MD4]] : MD4는 3라운드에 걸쳐 처리하지만 MD5는 4라운드에 걸쳐 처리한다. MD4보다 MD5가 더 느리지만 더 안정적이다.
 +
 
 +
* [[SHA-1]] : SHA-1은 MD [[해시 함수]]와 비슷한 방법을 사용하지만 SHA-1이 MD5보다 속도가 더 빠르며 더 안정적이다.
 +
 
 +
==알고리즘 구현==
 +
* '''Step1 : Append Padding Bits'''
 +
: 입력받은 메시지의 길이가 512비트의 배수가 되게 [[패딩]]해야 하지만, 첫 번째 단계에서는 512비트의 배수보다 64비트 모자라게(-64bit) 패딩해야 한다. 이때 마이너스 한 64비트는 패딩 전 원래의 서명문 길이를 의미한다.
 +
 
 +
* '''Step2 : Append Length'''
 +
: Step1에서 제외시켰던 64비트를 채워준다. 패딩 전 원래의 서명문 길이를 64비트로 표시하여 붙여준다. 이때 메시지의 길이가 2^64보다 클 경우, 낮은 64비트만 사용된다. 패딩이 완료되었다면 완료된 메시지를 16word단위로 M[0,,,,,,N-1]에 할당시킨다. 이때 M은 워드 단위를 의미하고, N은 16의 배수가 된다.
 +
 
 +
* '''Step3 : Initialize MD Buffer'''
 +
: MD 버퍼를 초기화한다. 128비트 버퍼는 해시 함수의 중간 값 그리고 최종 값을 저장할 때 쓰여지는데, 32비트의 레지스터 A, B, C, D로 표시한다. 메모리에 저장 시 MD5는 [[Little-endian]] 방식을 사용하길 규정하기 때문에 low order bytes를 먼저 저장해야 한다. 초기화한 형태는 아래와 같다.
 +
 
 +
word A: 01 23 45 67
 +
word B: 89 AB CD EF
 +
word C: FE DC BA 98
 +
word D: 76 54 32 10
 +
 
 +
* '''Step4 : Process Message in 16-Word Blocks'''
 +
: 16 word(512bit) block 단위로 Message Disgest를 수행한다.
 +
: 4라운드에 걸쳐 작업하는데
 +
 
 +
'''1Round''' F(x,y,z) == (x∧y)∨(~x∧z)
 +
'''2Round''' F(x,y,z) == (x∧z)∨(y∧~z)
 +
'''3Round''' F(x,y,z) == x⊕y⊕z
 +
'''4Round''' F(x,y,z) == y⊕(x∧~z)
 +
(∧,∨,~,⊕는 논리 연산자이다. )
 +
 
 +
: 이러한 형태의 함수로 3개의 32비트 워드(x, y, z)를 입력하여 32비트 워드의 출력을 생성하도록 정의한다. 각각의 라운드마다 16단계의 처리를 하는데, 4번의 라운드의 구조는 비슷하나 서로 다른 논리 함수로 구성된다. 각 라운드는 현재의 512비트 블록과 128비트 버퍼값인 A, B, C, D, 입력 메시지의 i번째의 32비트 내용의 입력으로 처리되며 입력 메시지의 i번째의 32비트 내용은 총 64개로 1/4씩 각각의 라운드마다 입력된다.
 +
 
 +
* '''Step5 : Output'''
 +
: 4번의 과정을 통해 나온 A, B, C, D의 값을 연결해 준다. 이때 A, B, C, D는 word이며 결과적으로 출력은 128bit(16byte)가 된다. 앞서 말했듯 [[Little-endian]]방식의 사용을 규정하기 때문에 low order bytes 순서대로 저장되어야 하며 ABCD의 순서 역시 어긋나면 안 된다.<ref>Dr Vikas Thada,〈[https://www.youtube.com/watch?v=-uRpRMpvdm0 Message Digest Algorithm: MD5]〉, 《유튜브》, 2018-04-24</ref> <ref>kimsumin75,〈[https://kimsumin75.blog.me/20056897254 MD5 알고리즘]〉, 《네이버 블로그》, 2018-11-11</ref>
 +
 
 +
==문제점==
 +
MD5는 원래 [[공인인증서]], [[마이에스큐엘]](MySQL), 데이터베이스 패스워드 알고리즘(DB Password Algorithm) 등 다방면에서 사용됐으나, 암호화의 방식이 MD5라는 것을 안다면 복호화가 쉽다는 문제점이 있다. 매년 독일 라이프치히에서 매년 열리는 카오스 커뮤니케이션 콩그레스(Chaos communication Congress)에서 2008년 국제 보안 연구팀이 MD5를 이용한 피싱 공격 기술에 관해 발표했는데, 이때 [[SSL]]의 인증서 변조가 가능한 것이 밝혀졌다.
  
 
{{각주}}
 
{{각주}}
  
 
==참고자료==
 
==참고자료==
 +
* Margaret Rouse, 〈[https://searchsecurity.techtarget.com/definition/MD5 MD5]〉, 《TechTarget》, 2017-07
 
* 〈[http://www.dbguide.net/db.db?boardUid=145958&boardConfigUid=9&boardIdx=107 제3장 DBMS_CRYPTO]〉, 《데이터 전문가 지식포털》
 
* 〈[http://www.dbguide.net/db.db?boardUid=145958&boardConfigUid=9&boardIdx=107 제3장 DBMS_CRYPTO]〉, 《데이터 전문가 지식포털》
 
* 〈[http://www.ktword.co.kr/test/view/view.php?nav=2&m_temp1=1071 MD5, MD-5, MD4, MD-4 Message Digest 5, Message Digest 4]〉, 《정보통신기술용어해설》, 2016-04-04
 
* 〈[http://www.ktword.co.kr/test/view/view.php?nav=2&m_temp1=1071 MD5, MD-5, MD4, MD-4 Message Digest 5, Message Digest 4]〉, 《정보통신기술용어해설》, 2016-04-04
 +
 +
== 같이 보기 ==
 +
* [[암호 알고리즘]]
 +
* [[블록체인]]
 +
* [[해시그래프]]
 +
 +
{{암호 알고리즘|검토 필요}}

2019년 7월 7일 (일) 03:41 기준 최신판

MD5(message digest 5)는 입력 데이터로부터 128 비트(bit) 메시지 축약을 만듦으로써 데이터 무결성을 검증하는데 사용되는 해시 알고리즘이다. 1991년 미국 MIT의 교수 로날드 리베스트(Ronald Rivest)가 이전 버전인 MD4의 결함을 보안하기 위해 개발했다.

개요[편집]

MD5는 전자서명, 응용 프로그램 등 정보보호를 목적으로 개발한 해시 알고리즘이다. 프로그램이 위변조 되었는지를 확인하는 무결성 검사에 사용된다. 입력받은 메시지를 128비트로 압축하는 방식이며, 이전 버전으로는 MD2, MD4가 있다. 1996년 보안상 결함이 발견되어 보안용으로 사용하는 것은 권장하지 않는다.[1]파일들은 RSA와 같은 공개키 암호 사용법하에서 개인키와 함께 암호화되기 전에 안전한 방법으로 압축되어야만 한다. MD5 규격은 현재 IETF RFC 1321에 명시되어 있다. [2]

특징[편집]

  • 임의의 길이로 입력받은 메시지를 512비트 단위로 처리해 128비트로 암호화한다.
  • 입력 메시지의 길이 제한이 없다.
  • 해시값 길이 : 128 비트
  • 패딩 처리 : 메시지 길이를 512 비트 정수배로 만든다
  • 해싱 충돌 방지 확률 : 약 2^64 [2]

비교[편집]

  • MD2 : MD2는 8비트 컴퓨터에 최적화되어있는 반면 MD5는 32비트 컴퓨터에 최적화되어있다.
  • MD4 : MD4는 3라운드에 걸쳐 처리하지만 MD5는 4라운드에 걸쳐 처리한다. MD4보다 MD5가 더 느리지만 더 안정적이다.
  • SHA-1 : SHA-1은 MD 해시 함수와 비슷한 방법을 사용하지만 SHA-1이 MD5보다 속도가 더 빠르며 더 안정적이다.

알고리즘 구현[편집]

  • Step1 : Append Padding Bits
입력받은 메시지의 길이가 512비트의 배수가 되게 패딩해야 하지만, 첫 번째 단계에서는 512비트의 배수보다 64비트 모자라게(-64bit) 패딩해야 한다. 이때 마이너스 한 64비트는 패딩 전 원래의 서명문 길이를 의미한다.
  • Step2 : Append Length
Step1에서 제외시켰던 64비트를 채워준다. 패딩 전 원래의 서명문 길이를 64비트로 표시하여 붙여준다. 이때 메시지의 길이가 2^64보다 클 경우, 낮은 64비트만 사용된다. 패딩이 완료되었다면 완료된 메시지를 16word단위로 M[0,,,,,,N-1]에 할당시킨다. 이때 M은 워드 단위를 의미하고, N은 16의 배수가 된다.
  • Step3 : Initialize MD Buffer
MD 버퍼를 초기화한다. 128비트 버퍼는 해시 함수의 중간 값 그리고 최종 값을 저장할 때 쓰여지는데, 32비트의 레지스터 A, B, C, D로 표시한다. 메모리에 저장 시 MD5는 Little-endian 방식을 사용하길 규정하기 때문에 low order bytes를 먼저 저장해야 한다. 초기화한 형태는 아래와 같다.
word A: 01 23 45 67
word B: 89 AB CD EF
word C: FE DC BA 98
word D: 76 54 32 10
  • Step4 : Process Message in 16-Word Blocks
16 word(512bit) block 단위로 Message Disgest를 수행한다.
4라운드에 걸쳐 작업하는데
1Round F(x,y,z) == (x∧y)∨(~x∧z)
2Round F(x,y,z) == (x∧z)∨(y∧~z)
3Round F(x,y,z) == x⊕y⊕z
4Round F(x,y,z) == y⊕(x∧~z)
(∧,∨,~,⊕는 논리 연산자이다. )
이러한 형태의 함수로 3개의 32비트 워드(x, y, z)를 입력하여 32비트 워드의 출력을 생성하도록 정의한다. 각각의 라운드마다 16단계의 처리를 하는데, 4번의 라운드의 구조는 비슷하나 서로 다른 논리 함수로 구성된다. 각 라운드는 현재의 512비트 블록과 128비트 버퍼값인 A, B, C, D, 입력 메시지의 i번째의 32비트 내용의 입력으로 처리되며 입력 메시지의 i번째의 32비트 내용은 총 64개로 1/4씩 각각의 라운드마다 입력된다.
  • Step5 : Output
4번의 과정을 통해 나온 A, B, C, D의 값을 연결해 준다. 이때 A, B, C, D는 word이며 결과적으로 출력은 128bit(16byte)가 된다. 앞서 말했듯 Little-endian방식의 사용을 규정하기 때문에 low order bytes 순서대로 저장되어야 하며 ABCD의 순서 역시 어긋나면 안 된다.[3] [4]

문제점[편집]

MD5는 원래 공인인증서, 마이에스큐엘(MySQL), 데이터베이스 패스워드 알고리즘(DB Password Algorithm) 등 다방면에서 사용됐으나, 암호화의 방식이 MD5라는 것을 안다면 복호화가 쉽다는 문제점이 있다. 매년 독일 라이프치히에서 매년 열리는 카오스 커뮤니케이션 콩그레스(Chaos communication Congress)에서 2008년 국제 보안 연구팀이 MD5를 이용한 피싱 공격 기술에 관해 발표했는데, 이때 SSL의 인증서 변조가 가능한 것이 밝혀졌다.

각주[편집]

  1. 제3장 DBMS_CRYPTO〉, 《데이터 전문가 지식포털》
  2. 2.0 2.1 MD5, MD-5, MD4, MD-4 Message Digest 5, Message Digest 4〉, 《정보통신기술용어해설》, 2016-04-04
  3. Dr Vikas Thada,〈Message Digest Algorithm: MD5〉, 《유튜브》, 2018-04-24
  4. kimsumin75,〈MD5 알고리즘〉, 《네이버 블로그》, 2018-11-11

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 MD5 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.