MD5, SHA-1, SHA-256 중 다운로드 검증에는 무엇을 쓸까?
다운로드한 파일을 확인할 때는 배포처가 제공한다면 언제나 SHA-256이나 SHA-512를 쓰세요. MD5와 SHA-1은 다운로드가 중간에 끊긴 경우처럼 우연한 손상은 여전히 잡아낼 수 있습니다. 하지만 연구자들은 서로 다른 두 파일이 같은 MD5나 SHA-1 해시를 갖도록 만들 수 있음을 보였습니다. 따라서 이 알고리즘에서 값이 일치한다고 해서 배포자가 만든 파일이라고 증명할 수는 없습니다. 해시는 지문과 같을 뿐 암호화가 아니며, 신뢰할 수 있는 출처에서 나온 경우에만 의미가 있습니다.
해시 생성기다운로드한 파일이 원본과 같을까요?무료로 사용하기해시가 하는 일과 하지 않는 일
해시 함수는 크기와 관계없이 데이터를 고정 길이의 지문으로 바꿉니다. 같은 입력은 언제나 같은 지문을 만들고, 한 바이트만 바뀌어도 전혀 다른 지문이 나옵니다. 그래서 비교에 유용합니다. 내 파일의 지문이 공개된 지문과 일치하면, 두 파일은 거의 확실히 같습니다.
해시는 암호화가 아닙니다. 파일을 복원할 수 없고 키도 사용하지 않습니다. 아무것도 숨기지 않으며, 그 자체로는 누가 파일을 만들었는지 아무것도 증명하지 않습니다. 체크섬은 배포자가 다운로드 옆에 비교용으로 적어 둔 해시일 뿐입니다.
흔히 쓰는 네 가지 알고리즘
| 알고리즘 | 출력 길이 | 용도 |
|---|---|---|
| MD5 | 128비트, 16진수 32자리 | 우연한 손상 확인용으로만 사용 |
| SHA-1 | 160비트, 16진수 40자리 | 구형 검사용; 보안 목적으로는 피하세요 |
| SHA-256 | 256비트, 16진수 64자리 | 다운로드에 가장 흔히 쓰는 선택 |
| SHA-512 | 512비트, 16진수 128자리 | 같은 계열, 더 긴 출력 |
MD5와 SHA-1로는 충분하지 않은 이유
충돌(collision)은 서로 다른 두 입력이 같은 해시를 갖는 것을 뜻합니다. MD5의 충돌은 2004년부터 알려져 있었습니다. 2017년 연구자들은 같은 해시를 가진 서로 다른 두 PDF 파일을 만들어 실용적인 SHA-1 충돌을 공개했습니다.
다운로드에서 이것이 중요한 이유는, 파일을 통제할 수 있는 공격자가 정상 파일과 같은 MD5나 SHA-1 해시를 가진 악성 버전을 만들 수 있기 때문입니다. 배포처가 MD5나 SHA-1만 제공한다면, 값이 일치해도 파일이 정품이라는 증거는 되지 못합니다. 해시 생성기의 FAQ도 같은 점을 말합니다. 보안과 관련된 용도에는 SHA-256이나 SHA-512를 쓰세요.
이 글을 쓰는 시점에는 실용적인 SHA-256 충돌이 알려져 있지 않아, SHA-256이 흔한 선택입니다. 단계별 방법은 SHA-256 체크섬 가이드에서 볼 수 있습니다.
상황에 맞는 해시 고르기
- 배포처가 SHA-256이나 SHA-512를 제공하면 그것을 쓰고, 보안 목적으로는 MD5와 SHA-1은 제쳐 두세요.
- MD5나 SHA-1만 제공된다면 해시 생성기로라도 확인하세요. 손상되거나 불완전한 다운로드는 여전히 잡아낼 수 있습니다. 일치하면 "정품"이 아니라 "손상되지 않음"으로 받아들이세요.
- 해시가 전혀 없다면 이 방식으로 무결성을 확인할 수 없습니다. HTTPS로 공식 페이지에서 내려받고, 프로젝트가 서명된 체크섬 파일을 공개한다면 서명을 확인하세요.
해시 생성기는 텍스트나 파일 하나에 대해 MD5, SHA-1, SHA-256, SHA-384, SHA-512를 한 번에 계산합니다. 파일은 브라우저에서 읽으며 아무것도 업로드되지 않습니다. 배포자의 해시를 예상 해시 칸에 붙여 넣으세요. 도구는 비교 전에 공백을 제거하고 대소문자를 구분하지 않으므로, 대문자로 적히거나 여러 덩어리로 나뉜 해시도 일치로 인식됩니다. 아주 큰 파일은 브라우저 메모리에 부담을 줄 수 있으니, 그럴 때는 Linux에서는 sha256sum, Mac에서는 shasum -a 256 같은 명령줄 도구를 사용하세요.
일치가 알려 주는 것
해시가 일치한다는 것은 내 복사본이 해시가 계산된 파일과 거의 확실히 같다는 뜻입니다. 누가 해시를 계산했는지, 또는 해시가 계산된 파일이 배포자가 의도한 파일인지는 말해 주지 않습니다. 이를 확인하려면 알고리즘보다 출처가 더 중요합니다. 해시가 배포처의 공식 릴리스 페이지에서 왔고, 메시지 속 링크가 아니라 직접 그 페이지에 들어갔다면 일치는 강한 근거가 됩니다. 해시가 댓글, 미러 사이트, 포럼에서 왔다면 신뢰할 수 있는 페이지에서 찾기 전까지는 검증되지 않은 것으로 보세요.
체크섬에는 신뢰할 수 있는 출처가 필요합니다
파일과 같은 서버에 있는 체크섬은 그 서버가 가진 파일과 복사본이 같다는 것만 증명합니다. 공격자가 파일을 바꾸면 옆에 있는 체크섬도 함께 바꿀 수 있습니다. 체크섬은 프로젝트의 서명된 릴리스 노트처럼 별도의 출처에서 왔거나, 다운로드 링크와 무관하게 독립적으로 찾아간 페이지에서 올 때 도움이 됩니다.
비밀번호용 해시는 다릅니다
비밀번호 저장에도 해싱을 쓰지만, 이때는 비밀번호용으로 설계된 느린 해시와 각 비밀번호마다 고유한 솔트(salt)가 필요합니다. 여기서 SHA-256 같은 빠른 해시는 잘못된 도구입니다. 다운로드에서 할 일은 비교이고, SHA-256은 그 일을 잘 해냅니다.
예외 상황
- 대소문자. 16진수 문자 A부터 F까지는 대소문자와 상관없이 같으니, 대소문자를 따지지 말고 비교하세요.
- 잘린 해시. 일부 사이트는 해시의 앞부분만 적어 둡니다. 짧게 일치해도 증명하는 힘이 약하니 전체 값을 비교하세요.
- 여러 파일. 일부 프로젝트는 릴리스 전체에 대해 체크섬 파일 하나를 공개합니다. 정확한 파일 이름이 있는 줄을 찾으세요. 다른 파일 줄과 일치해도 아무것도 증명하지 못합니다.
AI 도움을 받아 영어 원문에서 번역했어요.
댓글
아직 댓글이 없어요. 첫 댓글을 남겨 보세요.


