해시 생성기
텍스트나 파일의 SHA-256, SHA-1, SHA-512, MD5 해시값을 계산합니다. 파일 무결성 검증에 사용합니다.
MD5와 SHA-1은 충돌 공격이 실증되어 보안 용도로는 폐기된 알고리즘입니다. 파일 체크섬 확인 같은 비보안 용도로만 쓰세요. 텍스트와 파일 모두 브라우저 안에서만 처리되며 업로드되지 않습니다.
해시란 무엇인가
해시 함수는 임의 길이의 데이터를 고정 길이의 값으로 바꾸는 단방향 함수입니다.
같은 입력은 항상 같은 결과를 냅니다. 그리고 입력이 한 글자만 달라져도 결과가 완전히 달라집니다. 이 성질 덕에 파일이 변조되었는지 확인할 수 있습니다.
| 알고리즘 | 결과 길이 | 상태 | |---|---|---| | MD5 | 32자 (128비트) | 폐기됨 — 충돌 공격 실증 | | SHA-1 | 40자 (160비트) | 폐기됨 — 충돌 공격 실증 | | SHA-256 | 64자 (256비트) | 현재 표준 | | SHA-512 | 128자 (512비트) | 현재 표준 |
비밀번호를 해시로 저장하면 안 되나요
범용 해시로는 안 됩니다. 이유는 두 가지입니다.
첫째, MD5와 SHA-1은 이미 깨졌습니다. 서로 다른 두 입력이 같은 해시를 갖도록 만드는 충돌 공격이 실증되었습니다. 2017년 구글은 같은 SHA-1 해시를 갖는 두 개의 서로 다른 PDF를 실제로 만들어 냈습니다.
둘째, 더 근본적인 문제로 범용 해시는 너무 빠릅니다. 현대 GPU는 초당 수십억 개의 SHA-256을 계산합니다. 데이터베이스가 유출되면 흔한 비밀번호는 순식간에 역산됩니다.
비밀번호 저장에는 의도적으로 느리게 설계된 알고리즘을 써야 합니다.
- bcrypt — 오래 검증된 표준
- scrypt — 메모리도 많이 쓰도록 설계
- Argon2 — 2015년 비밀번호 해싱 경진대회 우승, 현재 권장
이들은 솔트(salt)를 내장하고 반복 횟수를 조절할 수 있습니다.
솔트가 왜 필요한가
같은 비밀번호는 같은 해시를 냅니다. 그래서 123456의 SHA-256 값은 전 세계 어디서나 동일합니다.
공격자는 흔한 비밀번호의 해시를 미리 계산해 표로 만들어 둡니다. 이를 레인보우 테이블이라고 합니다. 유출된 해시를 이 표에서 찾기만 하면 원본이 나옵니다.
솔트는 사용자마다 다른 무작위 값을 비밀번호에 덧붙이는 것입니다. 같은 비밀번호라도 사용자마다 다른 해시가 나와 미리 계산해 둔 표가 무용지물이 됩니다.
그럼 MD5는 왜 아직 쓰이나요
보안이 필요 없는 용도에는 여전히 쓸모가 있습니다.
- 다운로드 파일 무결성 확인 — 파일이 전송 중 손상되지 않았는지
- 중복 파일 찾기
- 캐시 키 생성
이런 용도에서는 "누군가 악의적으로 같은 해시를 만들어 낼 수 있는가"가 중요하지 않습니다. 단순히 "우연히 달라졌는가"만 확인하면 되기 때문입니다.
다만 배포처가 제공하는 체크섬을 검증하는 용도라면 SHA-256을 쓰는 것이 맞습니다. 공격자가 파일을 바꿔치기하면서 MD5를 맞추는 것이 이론적으로 가능하기 때문입니다.
파일 체크섬 확인하는 법
리눅스 배포판이나 오픈소스 프로그램을 받으면 SHA-256 체크섬이 함께 공개됩니다. 받은 파일의 해시를 계산해 공개된 값과 비교하면, 파일이 온전한지 확인할 수 있습니다.
이 도구의 '파일' 탭에 파일을 넣으면 네 가지 해시가 모두 계산됩니다. 파일은 업로드되지 않고 브라우저 안에서만 처리됩니다.
명령줄에서는 이렇게 확인합니다.
# macOS / Linux
shasum -a 256 파일명
# Windows PowerShell
Get-FileHash 파일명 -Algorithm SHA256
해시를 원래대로 되돌릴 수 있나요
수학적으로는 불가능합니다. 해시는 정보를 압축하면서 버리는 단방향 함수입니다. 100MB 파일도 64자로 줄어드는데, 그 64자에서 100MB를 복원할 방법은 없습니다.
다만 짧거나 흔한 입력은 사정이 다릅니다. 미리 계산해 둔 표에서 찾으면 됩니다. "해시 크랙" 사이트들이 하는 일이 바로 이것입니다. 진짜로 역산하는 것이 아니라 데이터베이스에서 조회할 뿐입니다.
그래서 짧은 문자열이나 전화번호, 이메일 주소를 해시로 익명화하는 것은 익명화가 되지 않습니다. 전화번호는 경우의 수가 적어 전수 계산이 가능하기 때문입니다.
큰 파일도 처리되나요
이 도구는 파일을 브라우저 메모리에 올려 계산합니다. 수백 MB까지는 대체로 문제없지만, 기기 사양에 따라 한계가 있고 파일이 클수록 시간이 걸립니다.
기가바이트 단위 파일은 위에 적은 명령줄 도구를 쓰시는 편이 빠릅니다.
함께 확인하면 좋은 것
되돌릴 수 있는 인코딩이 필요하다면 Base64 인코더·디코더를, 토큰 구조 확인은 JWT 디코더를 이용하세요.