이 페이지의 코드가 시작되지 않았습니다.

index.html을 폴더에서 바로 열면 브라우저가 JavaScript 모듈을 막습니다. 그래서 파일을 골라도 아무 일도 일어나지 않아요. 폴더를 http로 띄워서 여세요:

powershell -ExecutionPolicy Bypass -File serve.ps1

그런 다음 http://localhost:8080/을 여세요.

해시와 체크섬 — MD5, SHA-1, SHA-256, SHA-512

받은 파일을 배포처가 적어 둔 숫자와 맞춰 봅니다. 어디로도 보내지 않고요.

언어: 한국어
소스 보기
파일은 절대 업로드되지 않습니다. 서버가 아예 없으니까요.

체크섬은 파일의 바이트를 놓고 하는 계산이고, 그 계산은 여기, 이 페이지 안에서, 여러분 기기의 프로세서가 합니다. 파일은 디스크에서 4메가바이트씩 읽고 각 조각은 세고 나면 곧바로 버립니다. 그러니 어디에도 파일 전체가 모이지 않습니다. 메모리에도 그렇고 서버에는 더더욱 그렇습니다. 애초에 이 페이지 건너편에는 파일을 받아 줄 서버 자체가 없습니다.

실시간 확인: 확인 중…

오프라인: 확인 중…

말만 믿지 않으셔도 됩니다. 개발자 도구를 열고 네트워크 탭을 보면서 파일을 확인해 보세요. 어느 요청에도 파일의 바이트는 물론 이름도 크기도 실리지 않습니다. 아니면 인터넷을 끊고 그대로 확인해 보셔도 됩니다.

1 파일 고르기

2 체크섬

MD5와 SHA-256은 기본으로 계산합니다. 둘이면 세상에 있는 다운로드 페이지의 거의 전부를 덮기 때문입니다. 다른 것을 켜면 그것 때문에 파일을 다시 읽습니다. 느린 쪽은 읽기이므로, 파일을 고르기 전에 켜 둔 것은 한 번 읽는 동안 함께 나옵니다.

어떤 체크섬을 계산할지

3 원래 값과 맞춰 보기

다운로드 페이지가 준 체크섬을 붙여 넣으세요. 형식은 상관없습니다. 16진수만 있어도 되고, sha256sum 출력이어도 되고, SHA256SUMS 파일 전체여도 되고, SHA256 (파일) = … 형태여도 되고, script 태그의 integrity 속성이어도 됩니다. 어떤 알고리즘인지는 길이로 정해지므로 고를 것이 없습니다.

Markdown으로 보기

체크섬으로 받은 파일을 확인하는 방법

  1. 파일을 고릅니다. 상자 위에 끌어다 놓거나 직접 선택하세요. 디스크에서 바로, 조각을 나눠 읽습니다. 그동안 아무것도 어디로도 가지 않고, 여기서부터는 못 한다는 크기도 없습니다.
  2. 읽게 둡니다. MD5와 SHA-256은 기본으로, 한 번 읽는 동안 함께 계산합니다. 막대에 어디까지 왔는지와 얼마나 빠른지가 나옵니다. 큰 디스크 이미지는 복사하는 데 걸리는 시간과 비슷합니다. 읽는 양이 같기 때문입니다.
  3. 원래 값을 붙여 넣습니다. 다운로드 페이지가 준 것을 형태 그대로 붙여 넣으면 됩니다. 16진수만 있어도 되고, sha256sum 출력 한 줄이어도 되고, SHA256SUMS 파일 전체여도 되고, script 태그에서 떼어 온 integrity 속성이어도 됩니다. 어떤 알고리즘인지는 길이로 정해지고, 해당 칸은 알아서 켜집니다.
  4. 색이 아니라 문장을 읽습니다. 그 체크섬이 가리키는 파일이 맞는지 페이지가 한 문장으로 말해 줍니다. 맞으면 바이트가 배포처가 잰 것과 똑같다는 뜻입니다. 맞지 않으면 다른 것이니, 열기 전에 다시 받는 편이 낫습니다.
  5. 필요하면 체크섬을 챙겨 가세요. 하나만 복사하거나, 전부 복사하거나, 작은 텍스트 파일로 저장할 수 있습니다. 저장은 명령줄 도구들이 쓰는, 알고리즘 이름을 앞에 붙인 형식입니다. 숫자와 함께 알고리즘 이름도 같이 갑니다.

자세한 설명

체크섬으로 받은 파일을 확인하는 방법 윈도우, 맥, 리눅스나 브라우저에서 MD5, SHA-256 체크섬을 맞춰 보는 방법과 일치가 실제로 증명하는 것, 그리고 이 일 전체를 무의미하게 만드는 실수.

자주 묻는 질문

제 파일이 어딘가로 업로드되나요?

아닙니다. 여러분의 브라우저가 디스크에서 읽고 여러분의 프로세서가 4메가바이트씩 계산합니다. 이 도구에는 서버 쪽이 없고, 페이지의 Content-Security-Policy에는 접속할 수 있는 주소가 모두 적혀 있습니다. 그중 우리 것은 없습니다. 네트워크를 끊어도 계속 작동합니다.

크기 제한이 있나요?

없습니다. 파일이 통째로 어딘가에 놓이지 않습니다. 조각으로 읽고 각 조각은 세고 나서 버리므로, 40기가바이트짜리 디스크 이미지도 텍스트 파일과 같은 몇 메가바이트의 메모리만 씁니다. 드는 것은 시간이고, 얼마나 드는지는 페이지가 진행하면서 알려 줍니다.

알고리즘을 브라우저의 crypto.subtle.digest에 넘기지 않고 여기에 적어 둔 이유가 그것입니다. 그쪽이 더 빠르지만, 그 호출은 메시지 전체를 버퍼 하나로 받고 파일을 조각으로 건네줄 방법이 없습니다. 그것을 썼다면 확인할 수 있는 최대 파일 크기가 이 탭이 마침 얻은 메모리에 달려 있게 됩니다. 휴대전화라면 수백 메가바이트이고, 사람들이 가장 확인하고 싶어 하는 것은 디스크 이미지입니다.

체크섬이 맞았습니다. 정확히 무엇이 증명된 건가요?

디스크에 있는 바이트가, 누군가 그 숫자를 적을 때 앞에 두고 있던 바이트와 같다는 것입니다. 그뿐이고, 그 경계는 정확히 짚어 둘 만합니다.

증명된 것은 다운로드가 중간에 끊기지 않았다는 것, 고장 난 디스크에 상하지 않았다는 것, 오는 길에 바꿔치기되지 않았다는 것입니다. 그 파일이 안전하다는 것은 증명되지 않았습니다. 배포하는 쪽은 악성코드도 똑같이 정확하게 잴 수 있으니까요. 그리고 체크섬이 파일과 같은 페이지에서 같은 연결로 왔다면 증명된 것은 아주 적습니다. 한쪽을 바꿀 수 있었던 사람은 다른 쪽도 바꿀 수 있었습니다. 체크섬이 가장 값어치를 하는 때는 파일과 다른 길로 도착했을 때입니다. 서명된 SHA256SUMS 파일, 배포판의 릴리스 공지, 두 번째 미러, 또는 이미 그 값을 알고 있는 패키지 관리자 같은 경우입니다.

맞지 않습니다. 이제 어떻게 하죠?

먼저 같은 곳에서 다시 받아 보세요. 끊겼거나 이어받은 전송이 압도적으로 흔한 원인이고, 두 번째 사본이면 대개 정리됩니다.

두 번째 사본도 같은 값이 어긋난다면, 맞춰 보고 있는 줄이 맞는지 확인하세요. 릴리스 페이지에는 파일이 여럿 올라 있고, ARM 빌드의 체크섬이 x86 것과 맞는 일은 없습니다. 그다음 버전을 확인하세요. 그것까지 맞는데도 어긋난다면 그 파일은 열지 마세요. 다른 미러에서 받아 두 체크섬을 서로 비교해 보세요.

어느 것을 써야 하나요?

배포처가 공개한 것을 쓰면 됩니다. 상대의 숫자와 맞춰 보는 것이 목적이니, 상대 몫을 여러분이 고를 수는 없습니다.

확인하는 쪽이 아니라 만드는 쪽이라면 SHA-256을 쓰세요. MD5와 SHA-1은 중요한 의미에서 깨졌습니다. 같은 값을 갖는 서로 다른 파일을 일부러 만들 수 있다는 뜻이고, MD5는 몇 시간, SHA-1은 감당할 만한 비용이면 됩니다. 사고에 대해 쓸모없어졌다는 말은 아닙니다. 중간에 끊긴 다운로드가 우연히 원본과 같은 값이 될 일은 없으니까요. 다만 아무도 손대지 않았다는 말은 이제 못 합니다. SHA-384와 SHA-512는 문제없고 실제로 더 낫지도 않습니다. 공개하는 프로젝트가 있어서 여기에 두었습니다.

깨졌다면서 MD5는 왜 있나요?

여전히 그것이 적혀 있기 때문입니다. 미러, 펌웨어 다운로드, 대학의 소프트웨어 페이지, 그리고 수많은 제조사 사이트가 이십 년 전에 MD5를 올려 두고 그 뒤로 페이지를 손대지 않았습니다. 계산을 거부하는 도구는 방문자가 실제로 들고 온 물음에 답하기를 거부하는 셈입니다.

대신 할 수 있는 일은 그 답이 얼마만큼의 값어치인지 말해 주는 것이고, 체크박스 옆의 한 줄이 그 일을 합니다. 맞아떨어진 MD5는 지금도 망가진 다운로드를 걸러 냅니다. 일부러 손댄 것은 걸러 내지 못합니다.

비교 칸에는 어떤 형식을 붙여 넣을 수 있나요?

흔히 쓰이는 형식은 모두 되고, 어떤 것인지는 페이지가 알아서 가려냅니다.

16진수만 있어도 되고 사이에 공백이 있어도 됩니다. 뒤에 파일 이름이 붙은 md5sum이나 sha256sum의 출력 한 줄도 됩니다. 마흔 줄짜리 SHA256SUMS 파일 전체도 되고, 그럴 때는 고른 파일의 이름이 적힌 줄이 쓰입니다. BSD 형식인 SHA256 (disk.iso) = …도 되고, SHA-256: …처럼 앞에 이름표가 붙어도 됩니다. subresource integrity 속성인 sha384-…도 되는데, 이것은 16진수가 아니라 base64라서 비교 전에 디코딩합니다.

어떤 알고리즘인지는 길이에서 나옵니다. 16진수 32자면 MD5, 40자면 SHA-1, 64자면 SHA-256, 96자면 SHA-384, 128자면 SHA-512입니다. 길이가 같은 것은 둘도 없으니 고를 것도 없고 틀릴 것도 없습니다.

sha256sum이나 certutil과 같은 값이 나오나요?

네, 바이트 하나까지 같습니다. 공개된 테스트 벡터가 있는 정확한 규격이고, 여기 있는 알고리즘은 모두 빌드할 때마다 그 벡터와 운영체제의 구현 양쪽에 대고 확인합니다.

달라 보이는 것은 표기뿐입니다. 윈도우의 certutil -hashfile은 대문자에 공백을 넣어 찍고, 이 페이지는 소문자로 씁니다. 배포처가 거의 모두 쓰는 쪽이 소문자이기 때문입니다. 비교는 둘 다 무시하므로 certutil에서 복사한 값도 여기에 붙여 넣은 소문자 값과 맞습니다.

파일 두 개를 서로 맞춰 볼 수 있나요?

한 단계만 더 거치면 됩니다. 먼저 첫 번째 파일을 확인해 체크섬을 복사하고, 두 번째 파일을 고른 다음 그 체크섬을 칸에 붙여 넣으세요. 두 파일이 같으면 페이지가 그렇게 말해 줍니다.

체크섬이 조용히 가장 강한 자리가 이 경우입니다. 백업 드라이브의 사본이 노트북에 있는 것과 정말 같은 파일인지, 둘 다 같은 크기와 같은 날짜를 내세우고 있을 때 판가름을 내 줍니다.

제 파일이 바뀌나요?

아닙니다. 이 도구는 읽기만 합니다. 나오는 파일도, 다시 인코딩하는 일도, 되써지는 것도 없습니다. 내려받을 수 있는 것은 체크섬을 적어 둔 작은 텍스트 파일 하나뿐입니다. 원본은 디스크에 그대로 있고, 탭을 닫으면 어떻게 되느냐는 물음에 대한 정직한 답도 같습니다.

무료인가요? 계정이 필요한가요?

무료이고 계정도, 로그인도, 체험 기간도 없습니다. 파일 크기 제한도, 몇 개를 확인하든 횟수 제한도 없습니다. 이 사이트에는 광고가 있고 그것이 비용을 댑니다. 광고에는 여러분의 파일에 대해 아무것도 주지 않습니다.

오프라인에서도 되나요?

됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 그대로 작동합니다. 아무것도 업로드하지 않는다는 것을 확인하는 가장 간단한 방법이기도 합니다. 파일을 밖으로 보내 계산시키는 도구라면 선을 뽑는 순간 멈춥니다.