SHA-1
SHA-1
개요
SHA-1(Secure Hash Algorithm 1)은 미국 국립표준기술연구소(NIST)와 국가안보국(NSA)이 개발한 암호학적 해시 함수로, 임의 길이의 입력 데이터를 받아 고정된 160비트(20바이트) 길이의 해시값(또는 다이제스트)을 출력하는 알고리즘입니다. SHA-1은 1995년에 공식적으로 발표되어 디지털 서명, 인증서, 데이터 무결성 검사 등 다양한 보안 시스템에서 널리 사용되었습니다.
그러나 시간이 지남에 따라 암호학적 취약점이 발견되면서, 현재는 보안상 안전하지 않은 알고리즘으로 간주되며 대부분의 현대 보안 프로토콜에서 사용이 중단되었습니다. 대신 더 강력한 알고리즘인 SHA-2 및 SHA-3 계열이 권장되고 있습니다.
작동 원리
SHA-1은 입력 메시지를 처리하여 160비트 해시값을 생성하는 과정을 거칩니다. 이 과정은 다음과 같은 단계로 구성됩니다.
1. 메시지 패딩
입력 메시지는 먼저 길이를 조정하기 위해 패딩됩니다. 패딩 규칙은 다음과 같습니다:
- 메시지 끝에 비트
1을 추가합니다. - 이후 0 비트들을 추가하여 전체 길이가 512비트의 배수에서 64비트를 뺀 값(즉,
512n - 64)이 되도록 합니다. - 마지막 64비트에는 원본 메시지의 길이(비트 단위)를 빅엔디안 형식으로 저장합니다.
이를 통해 메시지는 512비트 블록 단위로 나눌 수 있게 됩니다.
2. 초기 해시 값 설정
SHA-1은 5개의 32비트 워드로 구성된 초기 해시 값을 사용합니다:
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0
이 값들은 MD5와 유사한 "기억하기 쉬운" 16진수 값으로, 초기 상태를 정의합니다.
3. 메시지 스케줄링 및 압축 함수
각 512비트 블록은 16개의 32비트 워드로 분할됩니다. 이후 이 값들을 확장하여 총 80개의 워드를 생성합니다. 확장 공식은 다음과 같습니다:
for i from 16 to 79:
w[i] = (w[i-3] XOR w[i-8] XOR w[i-14] XOR w[i-16]) leftrotate 1
이후 80라운드의 압축 함수가 수행되며, 각 라운드는 비선형 함수, 시프트 연산, 그리고 상수 값을 사용합니다. 라운드는 4개의 구간(0–19, 20–39, 40–59, 60–79)으로 나뉘며, 각 구간마다 다른 비선형 함수와 상수(K)를 사용합니다.
| 라운드 범위 | 비선형 함수 | 상수 K |
|---|---|---|
| 0–19 | (B ∧ C) ∨ (¬B ∧ D) | 0x5A827999 |
| 20–39 | B ⊕ C ⊕ D | 0x6ED9EBA1 |
| 40–59 | (B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D) | 0x8F1BBCDC |
| 60–79 | B ⊕ C ⊕ D | 0xCA62C1D6 |
각 라운드는 다음과 같은 연산을 수행합니다:
temp = (a leftrotate 5) + f(b,c,d) + e + w[i] + K
e = d
d = c
c = b leftrotate 30
b = a
a = temp
4. 최종 해시값 계산
모든 블록 처리 후, 최종 해시값은 초기 해시 값에 각 블록 처리 결과를 더한 값으로 계산됩니다:
h0 = h0 + a
h1 = h1 + b
h2 = h2 + c
h3 = h3 + d
h4 = h4 + e
최종적으로 5개의 32비트 값을 연결하여 160비트 해시를 생성합니다.
보안 취약점
SHA-1은 초기에는 충분한 보안성을 제공했으나, 2005년 중국의 왕샤오윈(Xiaoyun Wang) 연구팀이 충돌 공격(Collision Attack)을 통해 SHA-1의 해시값을 실질적으로 계산할 수 있음을 입증하면서 보안성이 크게 훼손되었습니다.
주요 공격 사례
- 2005년: 왕샤오운 팀이 SHA-1에 대한 충돌 공격을 제안 (이론적 수준).
- 2017년: 구글과 시큐레스트(CWI Amsterdam)가 SHAttered 공격을 발표. 두 개의 다른 PDF 파일이 동일한 SHA-1 해시를 가지도록 성공.
- 이 공격은 약 6,500년 분량의 CPU 계산을 GPU 기반으로 약 110년 분량으로 단축시켰으며, 실제로 실행 가능함을 보여줌.
이로 인해 SHA-1은 충돌 저항성(Collision Resistance)을 상실했으며, 신뢰할 수 없는 해시 함수로 분류되었습니다.
사용 현황 및 권고
사용 중단 권고
- NIST: 2010년 이후 SHA-1 사용 중단 권고, 2030년까지 레거시 시스템 외 금지.
- 브라우저(Chrome, Firefox 등): 2017년부터 SHA-1 기반 SSL/TLS 인증서 거부.
- Git: 내부적으로 여전히 SHA-1을 사용하지만, 충돌 공격 방지를 위한 마이그레이션 작업 진행 중.
권장 대체 알고리즘
| 알고리즘 | 출력 길이 | 특징 |
|---|---|---|
| SHA-256 | 256비트 | SHA-2 계열, 현재 가장 널리 사용됨 |
| SHA-3 | 가변 (224, 256, 384, 512비트) | 케이킨(Keccak) 기반, 구조적 차별성 있음 |
| BLAKE3 | 가변 | 고속, 경량, 현대적 설계 |
참고 자료
- NIST FIPS PUB 180-4: Secure Hash Standard
- SHAttered: The First Public Collision for SHA-1
- RFC 3174: US Secure Hash Algorithm 1 (SHA1)
관련 문서
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.