인터넷에서 소프트웨어를 다운로드했다. 원본 파일이 맞는지 어떻게 확인할까. 다운로드 중에 파일이 손상되지 않았는지 어떻게 검증할까. 공식 사이트에서 MD5나 SHA256 해시값을 제공한다. 내 파일의 해시값을 계산해서 비교하면 된다. 해시 생성기로 쉽게 확인할 수 있다.
해시란 무엇인가
해시는 임의 길이의 데이터를 고정 길이의 문자열로 변환하는 함수다. 같은 입력에는 항상 같은 출력이 나온다. 하지만 입력이 1비트라도 다르면 출력이 완전히 달라진다. 이런 특성 때문에 파일 무결성 검증에 사용된다.
파일 무결성 검증
소프트웨어를 배포하는 사이트에서는 보통 파일의 해시값을 함께 제공한다. 다운로드한 파일의 해시값을 계산해서 공식 값과 비교한다. 값이 일치하면 파일이 원본과 동일하다는 의미다. 다르면 다운로드 중 손상됐거나 악성코드가 삽입됐을 수 있다.
지원하는 해시 알고리즘
gogoling.kr/hash-generator에서 여러 알고리즘을 지원한다.
- MD5: 128비트 해시. 빠르지만 충돌 가능성이 있어서 보안용으로는 비권장.
- SHA-1: 160비트 해시. MD5보다 안전하지만 역시 취약점이 발견됨.
- SHA-256: 256비트 해시. 현재 가장 널리 사용되는 보안 해시.
- SHA-512: 512비트 해시. 더 긴 해시값으로 높은 보안성.
사용 방법
텍스트를 입력하거나 파일을 업로드하면 해시값이 계산된다. 파일을 드래그 앤 드롭하면 자동으로 해시가 생성된다. 모든 처리는 브라우저에서 이루어져서 파일이 서버로 전송되지 않는다. 대용량 파일도 로컬에서 안전하게 처리된다.
비밀번호 해싱
서버에 비밀번호를 저장할 때 평문 그대로 저장하면 안 된다. 해시로 변환해서 저장한다. 해킹을 당해도 원본 비밀번호를 알아내기 어렵다. 다만 실제 비밀번호 저장에는 bcrypt 같은 전용 알고리즘을 쓰는 것이 좋다.
데이터 중복 검사
대용량 파일 수천 개 중에서 중복을 찾으려면 파일 내용을 일일이 비교하기 어렵다. 각 파일의 해시값을 계산해서 같은 해시를 가진 파일을 찾으면 된다. 해시가 같으면 내용이 동일할 가능성이 매우 높다.
보안 권장사항
MD5는 빠르지만 의도적으로 같은 해시를 만드는 것이 가능하다. 보안이 중요한 용도에는 SHA-256 이상을 사용해야 한다. 단순히 파일 손상 여부만 확인하는 용도라면 MD5도 충분하다.
개발자 활용
파일 업로드 기능을 만들 때 중복 파일을 거르는 데 해시를 쓴다. 캐시 무효화를 위해 파일 내용의 해시를 파일명에 포함시키기도 한다. API 요청 서명에도 해시 알고리즘이 사용된다.