기존에는 보안을 위해 쓰였으나, 1분만에 해시 충돌을 찾을 수 있을 정도로 빠른 알고리즘이 발견되어 현재는 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다.
✔️ MD5는 어떻게 작동하는가?
MD5는 수학적 해시 알고리즘을 통해 전체 파일을 읽어 원본 파일과 일치하는 서명을 생성한다.
이렇게 하면 수신된 파일이 전송된 원본 파일과 일치하는지 인증할 수 있으므로 올바른 파일이 필요한 위치에 있는지 확인할 수 있다.
MD5 해시 알고리즘은 데이터를 32자의 문자열로 변환한다.
파일을 다른 사람에게 보내면 해당 컴퓨터는 해시를 인증하여 보낸 파일과 일치하는지 확인한다.
파일의 1비트만 변경되어도 파일의 크기에 관계없이 해시 출력이 완전히 변경된다. 정확한 사본이 있다면 MD5 테스트를 통과할 수 있다.
✔️ MD5는 무엇에 사용되는지?
MD5는 주로 파일을 인증하는 데 사용된다.
MD5 해시를 사용하여 파일 복사본을 원본과 비교하는 것이 두 복사본의 데이터를 일일이 확인하는 것보다 훨씬 쉽다.
MD5는 한때 데이터 보안 및 암호화에 사용되었지만, 요즘에는 주로 인증에 사용된다.
해커는 완전히 다른 내용으로 동일한 해시를 가진 파일을 만들어낼 수 있기 때문에 누군가가 파일을 변조할 경우 MD5는 안전하지 않지만, 단순히 한 위치에서 다른 위치로 파일을 복사하는 경우 MD5가 적합하다.
✔️ 알고리즘
MD5는 임의의 길이의 메시지(variable-length message)를 입력받아, 128비트짜리 고정 길이의 출력값을 낸다.
입력 메시지는 512 비트 블록들로 쪼개진다.
▶️ 메시지를 우선 패딩하여 512로 나누어떨어질 수 있는 길이가 되게 한다.
▶️ 패딩은 다음과 같이 한다: 우선 첫 단일 비트, 1을 메시지 끝부분에 추가한다. 512의 배수의 길이보다 64 비트가 적은 곳까지 0으로 채운다. 나머지 64 비트는 최초의(오리지널) 메시지의 길이를 나타내는 64 비트 정수(integer)값으로 채워진다.
메인 MD5 알고리즘은 A,B,C,D라고 이름이 붙은 32 비트 워드 네 개로 이루어진 하나의 128 비트 스테이트(state)에 대해 동작한다.
▶️ A,B,C,D는 소정의 상수값으로 초기화된다.
▶️ 메인 MD5 알고리즘은 각각의 512 비트짜리 입력 메시지 블록에 대해 차례로 동작한다.
▶️ 각 512 비트 입력 메시지 블록을 처리하고 나면 128 비트 스테이트(state)의 값이 변하게 된다.
하나의 메시지 블록을 처리하는 것은 4 단계로 나뉜다.
(한 단계를 "라운드"(round)라고 부른다)
▶️ 각 라운드는 비선형 함수 F, 모듈라 덧셈, 레프트 로테이션(left rotation)에 기반한 16개의 동일 연산(similar operations)으로 이루어져 있다.
✔️ MD5 해시는 몇 바이트인지?
MD5 해시는 16바이트이다.
각 MD5 해시는 32개의 숫자와 문자처럼 보이지만 모두 16진수를 숫자를 문자열로 나타낸 것 뿐이며 각각의 숫자는 4비트를 나타낸다.