MD2 (해시 함수)

위키백과, 우리 모두의 백과사전.

MD2 메시지 다이제스트 알고리즘(MD2 Message-Digest Algorithm)은 1989년 로널드 리베스트가 개발한 암호화 해시 함수이다. 이 알고리즘은 8비트 컴퓨터에 최적화되어 있다. MD2는 IETF RFC 1319에 지정되어 있다. MD2의 "MD"는 "Message Digest"를 나타낸다.

MD2가 아직 완전히 손상되지 않았음에도 불구하고 IETF는 "약점의 징후"를 이유로 2011년에 MD2를 "역사적" 상태로 폐기했다. SHA-256 및 기타 강력한 해싱 알고리즘으로 인해 구식이 되었다.

그럼에도 불구하고 2014년 기준 MD2 및 RSA로 생성된 인증서의 일부로 공개 키 기반 구조에서 계속 사용되고 있다.

설명[편집]

모든 메시지의 128비트 해시 값은 블록 길이(128비트 또는 16바이트)의 배수로 패딩하고 16바이트 체크섬을 추가하여 구성된다. 실제 계산에는 48바이트의 보조 블록과 256바이트의 S-테이블이 사용된다. 상수는 π(pi)의 십진수를 기반으로 하는 의사 난수 생성기와 함께 더스텐펠트 알고리즘의 변형을 사용하여 정수 0에서 255까지 섞는 방식으로 생성되었다(내 슬리브 번호에는 아무것도 표시되지 않음). 알고리즘은 처리된 16개의 입력 바이트마다 보조 블록의 각 바이트를 18번 치환하는 루프를 통해 실행된다. 이렇게 하여 길어진 메시지의 모든 블록이 처리되면 보조 블록의 첫 번째 부분 블록이 메시지의 해시 값이 된다.

16진수로 표시된 S 테이블 값은 다음과 같다.

{ 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 
  0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA, 
  0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12, 
  0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A, 
  0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F, 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21,
  0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03, 
  0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1, 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6, 
  0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1, 
  0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02, 
  0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6, 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F, 
  0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26, 
  0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09, 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52, 
  0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A, 
  0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39, 
  0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4, 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A, 
  0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14 }

같이 보기[편집]