2026. 03. 14
SHA 해시란 — MD5·SHA-256·SHA-512 비교와 파일 무결성 확인
MD5·SHA-1·SHA-256·SHA-512 알고리즘 비교와 파일 무결성 확인 방법. OS별 checksum 명령어와 비밀번호 해싱에서 솔팅이 필요한 이유.
해시 함수가 하는 일
해시 함수는 임의의 크기를 가진 입력을 받아 고정된 길이의 값으로 변환한다. 1KB 문서든 10GB 파일이든 같은 알고리즘으로 처리하면 항상 같은 길이의 출력이 나온다.
단방향성: 해시 값에서 원본을 되돌릴 수 없다. sha256("hello")는 항상 같은 값이지만, 그 값으로 "hello"를 역산할 수 없다.
눈사태 효과(Avalanche Effect): 입력이 조금이라도 바뀌면 출력이 완전히 달라진다. 파일이 단 1바이트라도 변조됐는지 확인하는 데 활용된다.
알고리즘별 비교
| 알고리즘 | 출력 길이 | 보안 상태 | 권장 여부 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 충돌 공격 가능 | 보안용 불가 |
| SHA-1 | 160비트 (40자) | 충돌 공격 입증 | 보안용 불가 |
| SHA-256 | 256비트 (64자) | 안전 | 권장 |
| SHA-512 | 512비트 (128자) | 안전 | 높은 보안 요구시 |
MD5는 2004년에 충돌이 발견됐고, SHA-1은 2017년 구글 연구팀이 실제 충돌을 만드는 데 성공했다. 보안 목적에는 SHA-256 이상을 써야 한다.
파일 무결성 확인 — OS별 명령어
Windows (PowerShell)
Get-FileHash .\setup.exe -Algorithm SHA256
또는 certutil 사용:
certutil -hashfile setup.exe SHA256
macOS
shasum -a 256 setup.dmg
Linux
sha256sum setup.tar.gz
레인보우 테이블과 솔팅
레인보우 테이블은 자주 쓰이는 비밀번호들의 해시 값을 미리 대량으로 계산해서 저장해둔 표다. 유출된 해시 값을 이 표와 대조하면 원본 비밀번호를 찾을 수 있다.
솔팅(Salting)은 이 공격을 막기 위한 방법이다. 비밀번호에 무작위 문자열(솔트)을 덧붙인 후 해시한다. 같은 비밀번호라도 솔트가 다르면 다른 해시가 나와 레인보우 테이블을 무력화한다.
비밀번호 저장 전용 알고리즘
웹 개발에서 비밀번호 저장에 SHA-256을 직접 쓰면 안 된다. SHA-256은 빠르게 처리되도록 설계됐는데, 이것이 무차별 대입 공격에 취약하게 만든다.
bcrypt: 의도적으로 느리게 설계됐다. PHP의 password_hash(), Python의 bcrypt 라이브러리가 구현한다.
Argon2: 2015년 Password Hashing Competition에서 1위를 차지한 알고리즘으로 현재 가장 권장되는 방법이다.