Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

네트워크 보안에서 MD5란 무엇인가? 개념부터 활용법까지 총정리

네트워크 보안에서 MD5란 무엇인가?

MD5(Message-Digest Algorithm 5)는 임의의 길이를 가진 데이터를 입력받아 항상 128비트 길이의 고정된 해시 값을 출력하는 해시 함수입니다. 이 결과물은 '메시지 다이제스트(message digest)' 또는 '디지털 지문(fingerprint)'이라 불리며, 입력 데이터가 아주 조금만 달라져도 전혀 다른 값이 생성됩니다. 이러한 특성 덕분에 파일이나 메시지가 원본 그대로인지 확인하는 무결성 검증에 널리 활용되어 왔습니다.

MD5라는 이름의 의미

MD5에서 'MD'는 Message Digest(메시지 다이제스트)의 약자이며, 숫자 5는 해당 알고리즘이 다섯 번째 버전임을 나타냅니다. MD5는 MD2와 MD4의 후속 버전으로 128비트 해시 값을 생성합니다. 한편 SHA1(Secure Hash Algorithm)은 이름 그대로 '보안 해시 알고리즘'을 뜻하며 최대 160비트 길이의 다이제스트를 만듭니다.

MD5의 작동 원리: 단계별 과정

MD5는 크게 다음과 같은 단계를 거쳐 해시 값을 계산합니다.

1. 패딩(Padding) 추가 — 원본 메시지 끝에 추가 비트를 덧붙여 처리 가능한 길이로 맞춥니다.
2. 원본 길이 기록 — 패딩된 데이터 끝에 원래 입력값의 길이 정보를 64비트로 덧붙입니다.
3. MD 버퍼 초기화 — 해시 계산에 사용할 내부 버퍼를 정해진 초기값으로 설정합니다.
4. 블록 단위 처리 — 메시지를 16워드 블록으로 나누어 순차적으로 압축 연산을 수행한 뒤, 최종적으로 128비트 다이제스트를 출력합니다.

MD5 해시 값 계산 방법

리눅스·macOS 터미널

터미널을 실행한 뒤 아래 명령어를 입력하고 Enter 키를 누르면 해당 파일의 MD5 값이 표시됩니다.

md5sum [파일명.확장자] [파일 경로]

참고로 경로를 직접 입력하는 대신 파일을 터미널 창으로 끌어다 놓아도 됩니다.

윈도우 10 명령 프롬프트

Windows + R 키를 누르고 cmd를 입력해 명령 프롬프트를 연 뒤, 파일이 있는 위치에서 다음 명령어를 실행합니다.

certutil -hashfile [파일명] MD5

출력된 체크섬 값을 원본 제공처가 공개한 값과 비교하면 파일 변조 여부를 확인할 수 있습니다.

MD5 체크섬이란?

MD5 체크섬은 파일로부터 계산된 32자리 16진수 값입니다. 두 파일의 MD5 체크섬이 동일하다면 두 파일이 같을 가능성이 매우 높습니다. 예를 들어 소프트웨어 설치 파일을 내려받은 후 체크섬을 계산해 공식 배포 페이지에 게시된 값과 대조하면, 다운로드 과정에서 파일이 손상되거나 변조되지 않았는지 검증할 수 있습니다.

MD5는 여전히 안전한가?

결론부터 말하면 MD5는 더 이상 보안 목적으로 안전하지 않습니다. 충돌(collision) 취약점이 발견된 이후 NIST는 MD5를 폐기(deprecated) 대상으로 분류했으며, NIST SP 800-131A 같은 공식 문서에서도 더 이상 권장하지 않습니다. 또한 RFC 5246과 RFC 7525에서는 MD5와 SHA1을 암호학적 해시 함수로 사용하지 말 것을 명시하고 있습니다.

MD5 vs SHA1: 어느 쪽이 더 안전한가?

두 알고리즘 모두 메시지로부터 고정 길이의 다이제스트를 생성한다는 점에서 작동 방식은 유사합니다. MD5는 SHA1보다 계산 속도가 빠른 반면, SHA1은 상대적으로 높은 수준의 보안성을 제공합니다. 다만 두 알고리즘 모두 이미 취약점이 알려져 있으므로, 보안이 중요한 환경에서는 SHA-256 이상의 강력한 해시 알고리즘을 사용하는 것이 좋습니다.

비밀번호 저장에 MD5를 써도 될까?

솔트(salt)를 적용한 MD5라 하더라도 비밀번호 저장에는 적합하지 않습니다. 문제는 MD5의 암호학적 결함 자체보다는 계산 속도가 너무 빠르다는 점입니다. 공격자는 고성능 GPU 하나만으로 초당 수십억 개의 비밀번호 후보를 시도할 수 있습니다. 따라서 비밀번호 저장에는 의도적으로 느리게 설계된 scrypt, bcrypt, PBKDF2 같은 해시 알고리즘을 사용하는 것이 바람직합니다.

PHP에서의 MD5 함수

PHP에서는 md5() 함수를 사용해 문자열의 MD5 해시를 간단히 계산할 수 있습니다. RFC 1321에 따르면 MD5 알고리즘은 길이에 관계없이 임의의 메시지를 입력받아 128비트 길이의 지문, 즉 메시지 다이제스트를 출력하는 방식으로 정의됩니다. 다만 보안 목적의 사용은 피해야 하며, 단순한 데이터 식별 용도로만 활용하는 것이 좋습니다.

MD5의 현재 용도

MD5는 원래 디지털 서명 인증을 위한 안전한 암호화 해시 알고리즘으로 설계되었지만, 현재는 의도치 않은 데이터 손상 감지와 파일 무결성 검증 정도로만 사용이 권장됩니다. 대용량 파일의 경우 MD5 해시 값이 일종의 디지털 서명 역할을 하여 파일이 온전한지 빠르게 확인할 수 있게 해줍니다. 해시 계산 시간은 파일 크기와 저장 장치 속도에 따라 달라지지만, MD5 자체는 매우 빠른 편입니다.