어떤 데이터든 — 단어 하나, 소설 한 권, 4GB 영상 — 그것을 고유하게 식별하는 짧고 고정 길이의 문자열로 변환할 수 있다고 상상해 보세요. 원본에서 쉼표 하나만 바꿔도 문자열이 완전히 달라집니다. 그리고 이 과정을 되돌려서 원래 데이터를 복구할 방법은 없습니다.
이것이 바로 암호화 해시 함수가 하는 일입니다. 현대 보안의 가장 기본적인 구성 요소 중 하나이며, 온라인에서 하는 거의 모든 일을 조용히 보호하고 있습니다.
핑거프린트 비유
해시는 디지털 핑거프린트(지문)처럼 작동합니다. 지문이 개인을 고유하게 식별하지만, 지문에서 얼굴을 복원할 수는 없습니다. 마찬가지로, 암호화 해시는 데이터를 고유하게 식별하지만 그 데이터가 무엇인지 드러내지 않습니다.
어떤 입력이든 해시 함수에 넣으면 다이제스트(해시 값 또는 체크섬이라고도 함)를 얻습니다 — 고정 길이의 16진수 문자열입니다. 가장 일반적인 알고리즘 중 하나인 SHA-256은 입력 크기에 관계없이 항상 64자 출력을 생성합니다.
| 입력 | SHA-256 다이제스트(처음 16자) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Wikipedia 전체 덤프 | (여전히 64자) |
네 가지 본질적인 속성
함수가 암호화 해시로 인정받으려면 다음 속성을 만족해야 합니다:
- 결정론적. 같은 입력은 어떤 기계에서, 어떤 시간에든 항상 같은 출력을 생성합니다.
- 단방향(역상 저항). 해시 값이 주어졌을 때, 원래 입력을 찾는 것은 계산적으로 불가능합니다. 데이터를 "역해시"할 수 없습니다.
- 충돌 저항. 같은 다이제스트를 생성하는 두 개의 다른 입력을 찾는 것은 실질적으로 불가능합니다. SHA-256의 경우 우연한 충돌 확률은 대략 2^128분의 1입니다 — 관측 가능한 우주의 원자 수보다 큰 숫자입니다.
- 눈사태 효과. 입력에서 단 1비트를 변경하면 출력의 약 절반의 비트가 뒤집힙니다. 유사한 입력 간에 감지할 수 있는 패턴이나 관계가 없습니다.
중요한 구분: 해싱은 암호화가 아닙니다. 암호화는 키로 되돌릴 수 있지만, 해싱은 의도적으로 비가역적입니다. 전송 중 데이터를 보호하기 위해 암호화합니다. 데이터의 무결성을 검증하거나 원본을 보관하지 않고 증명을 저장하기 위해 해싱합니다.
일반적인 해시 알고리즘
MD5 (1991)
- 출력: 128비트(16진수 32자)
- 상태: 암호학적으로 깨짐. 연구자들이 노트북에서 수초 내에 충돌을 생성할 수 있음.
- 여전히 사용: 보안과 무관한 파일 다운로드 체크섬과 레거시 시스템.
SHA-1 (1995)
- 출력: 160비트(16진수 40자)
- 상태: 보안 용도 비권장. Google이 2017년에 실용적 충돌을 시연("SHAttered" 공격).
- 여전히 사용: 오래된 Git 리포지토리, 일부 레거시 인증서.
SHA-256 (2001)
- 출력: 256비트(16진수 64자)
- 상태: 현행 표준. 알려진 실용적 공격 없음.
- 사용: TLS 인증서, Bitcoin, 비밀번호 해싱, 전자 서명, 파일 무결성 검증.
SHA-3 (2015)
- 출력: 가변(일반적으로 256비트)
- 상태: 최신 표준. SHA-2 계열과 완전히 다른 내부 설계(Keccak 스펀지 구조)를 기반으로 함.
- 사용: 미래 지향적 시스템, Ethereum, 알고리즘 다양성이 필요한 상황.
| 알고리즘 | 출력 크기 | 안전한가? | 속도 |
|---|---|---|---|
| MD5 | 128비트 | 아니오 | 매우 빠름 |
| SHA-1 | 160비트 | 아니오 | 빠름 |
| SHA-256 | 256비트 | 예 | 보통 |
| SHA-3-256 | 256비트 | 예 | 보통 |
암호화 해싱이 사용되는 곳
비밀번호 저장
계정을 만들 때, 잘 설계된 시스템은 비밀번호를 평문으로 저장하지 않습니다. 해시를 저장합니다. 로그인 시 시스템은 입력된 것을 해싱하고 저장된 값과 비교합니다. 데이터베이스가 침해되어도 공격자가 얻는 것은 해시이지 비밀번호가 아닙니다.
현대 시스템은 더 나아가 무작위 솔트(해싱 전에 추가되는 추가 데이터)를 더하고, bcrypt, scrypt, Argon2 같은 의도적으로 느린 알고리즘을 사용하여 무차별 대입 추측을 비현실적으로 만듭니다.
파일 무결성 검증
소프트웨어 배포자는 다운로드 파일과 함께 SHA-256 체크섬을 게시합니다. 다운로드 후 자신의 기기에서 파일의 해시를 계산하고 비교합니다. 일치하면 파일이 전송 중 손상되거나 변조되지 않았음이 증명됩니다.
전자 서명
문서에 전자 서명을 할 때, 시스템은 먼저 문서를 해싱한 다음, 개인 키로 해시를 암호화합니다. 수신자는 공개 키로 복호화하고 자신이 계산한 문서의 해시와 비교합니다. 이것은 전체 문서를 암호화하는 것보다 훨씬 효율적이며, 작성자와 무결성을 모두 증명합니다.
블록체인
블록체인의 각 블록은 이전 블록의 해시를 포함하여, 변경 불가능한 체인을 형성합니다. 과거 거래를 변경하면 해당 블록의 해시가 바뀌어 그 지점부터 체인이 끊어지므로, 변조가 즉시 드러납니다.
MD5와 SHA-1이 깨졌다고 간주되는 이유
해시 알고리즘이 "깨졌다"는 것은 누군가 같은 해시를 생성하는 두 개의 다른 입력을 의도적으로 만들 수 있다는 것(충돌)을 의미합니다. 이는 고유성에 의존하는 모든 사용 사례를 손상시킵니다.
- MD5: 충돌을 수초 내에 생성할 수 있습니다. 연구자들은 MD5 해시가 동일한 두 개의 다른 PDF 파일을 만들었습니다.
- SHA-1: 2017년 SHAttered 공격은 SHA-1 해시가 동일한 두 개의 다른 PDF를 생성했습니다. 단일 CPU로 약 6,500년의 계산이 필요했지만 클라우드 리소스로 실현 가능했습니다.
실용적 규칙: 보안 관련 용도 — 비밀번호, 인증서, 전자 서명, 공격자가 관여할 수 있는 무결성 검사 — 에 MD5나 SHA-1을 절대 사용하지 마세요. 대신 SHA-256 또는 SHA-3를 사용하세요.
더 알아보기
해싱은 직접 실험해 보면 직관적으로 이해할 수 있는 개념 중 하나입니다. 문장을 해싱하고, 한 글자를 바꾸고, 눈사태 효과를 직접 관찰해 보세요.
- 해시 생성 및 검증 방법 — 단계별 튜토리얼
- 해시 생성기 — 브라우저에서 SHA-256, MD5, SHA-512 등을 즉시 계산
- 해시 식별기 — 알 수 없는 해시를 붙여넣고 알고리즘을 식별
