브라우저 주소창의 HTTPS 자물쇠 아이콘, Git 커밋의 40자리 해시값, 다운로드 페이지의 'SHA-256 체크섬'——이 모든 것의 배경에는 SHA 패밀리가 있습니다. SHA(Secure Hash Algorithm)는 현재 가장 주류인 암호화 해시 표준이지만, 단일 알고리즘이 아닌 알고리즘 패밀리입니다. 각 버전의 차이를 이해하는 것은 모든 개발자에게 필수적인 기초 지식입니다.
1. SHA의 유래
SHA는 NSA(미국 국가안보국)가 설계하고 NIST(미국 국립표준기술연구소)가 FIPS(연방 정보처리 표준)로 발표했습니다. 발전 역사:
- 1993년:SHA-0 발표, 설계 결함으로 즉시 철회
- 1995년:SHA-1 발표, 160비트 출력
- 2001년:SHA-2 패밀리 발표 (SHA-256, SHA-512 등)
- 2015년:SHA-3(Keccak)이 FIPS 202로 표준화
MD5와 마찬가지로 SHA는 단방향 해시 함수이며 암호화 알고리즘이 아닙니다. SHA 해시값에서 원본 데이터를 복원하는 것은 불가능합니다.
2. SHA-1:역사 속으로
SHA-1은 한때 인터넷 보안의 근간이었지만, 2017년 Google과 CWI 암스테르담 연구원이 「SHAttered」 공격을 발표했습니다:내용이 다르지만 SHA-1이 동일한 두 PDF 파일을 성공적으로 생성했습니다. 이는 암호학 역사상 최초의 실용적인 SHA-1 충돌 공격이었습니다.
이후 주요 브라우저, CA(인증 기관), Git은 모두 SHA-1을 더 이상 사용하지 않기로 했습니다.
3. SHA-2 패밀리:현대 표준
SHA-2는 출력 크기로 명명된 6개 멤버로 구성된 패밀리입니다. SHA-256이 가장 널리 사용되는 이유:
- 충분한 보안 마진:256비트 출력이 128비트 충돌 저항성 제공
- 하드웨어 가속 지원:현대 x86 및 ARM에 SHA-256 전용 명령어 내장
- 광범위한 생태계 지원:모든 주요 언어 표준 라이브러리 및 TLS 스택 지원
4. SHA-3:완전히 새로운 설계 철학
SHA-3은 SHA-2의 개선판이 아닌 완전히 다른 아키텍처를 가진 새 알고리즘입니다. Keccak으로도 알려져 있으며, 「스펀지 구조」를 채택하여 길이 확장 공격에 본질적으로 면역입니다.
5. SHA 패밀리 전체 비교
| 알고리즘 | 출력 길이 | 보안성 | 속도 | 권장 사용 사례 |
|---|---|---|---|---|
| SHA-1 | 160 bit | 취약 (SHAttered 2017) | 빠름 | 새 시스템에서 사용 불가 |
| SHA-256 | 256 bit | 안전 (알려진 충돌 없음) | 중간 (HW 가속) | TLS·인증서·코드 서명·일반 용도 |
| SHA-512 | 512 bit | 안전 (더 높은 마진) | 64비트에서 SHA-256보다 빠름 | 고보안 요구 사항·64비트 시스템 |
| SHA3-256 | 256 bit | 안전 (다른 설계) | 느린 편 | 길이 확장 공격 저항·설계 다양성 |
6. 사용 사례별 선택 가이드
- ✅ TLS/HTTPS 인증서 → SHA-256 (SHA-1은 모든 브라우저에서 거부)
- ✅ 코드 서명 및 소프트웨어 배포 → SHA-256
- ✅ 파일 무결성 검증 → SHA-256
- ❌ 패스워드 저장 → SHA 사용 불가, bcrypt/Argon2 사용
- ✅ 메시지 인증 코드 (MAC) → HMAC-SHA256
7. 계산 예제
# 커맨드라인 (Linux/macOS)
sha256sum file.txt # Linux
shasum -a 256 file.txt # macOS
# PHP
hash('sha256', 'hello')
# Python
import hashlib
hashlib.sha256(b'hello').hexdigest()
hashlib.sha3_256(b'hello').hexdigest() # SHA-3
# JavaScript (Node.js)
const crypto = require('crypto')
crypto.createHash('sha256').update('hello').digest('hex')
8. 요약
SHA 패밀리의 진화는 암호학 연구의 지속적인 발전을 반영합니다. SHA-1은 충돌 공격으로 역사 속으로 사라졌고, SHA-256은 현대 보안 인프라의 핵심입니다. SHA-512는 고보안 요구 사항이나 64비트 환경에서 장점이 있으며, SHA-3은 완전히 새로운 스펀지 구조로 설계 다양성을 제공합니다. 이러한 차이를 이해함으로써 시스템 설계와 기술 선택에서 더 정확한 판단을 내릴 수 있습니다.