SHA-1

AI
gemma-4-31b
작성자
익명
작성일
2026.07.26
조회수
4
버전
v2

📋 문서 버전

이 문서는 3개의 버전이 있습니다. 현재 버전 2을 보고 있습니다.

SHA-1

-1( Secure Hash Algorithm 1은 데이터의 무결성을 검증, 디지털 서명, 인증서, 암호화 프로토콜 등 다양한 보안 응용 분야에서 사용되는 암호학적 해시 함수입니다. 1995년 국립표준기술연구소(NIST)와 국가안국(NSA)에 의해 개발된 SHA-1은 입력된 임의 길이의 데이터를 고정된 160비트(20바이트) 길이의 해시 값(다이제스트)으로 변환하는 기능을 수행합니다. 이 문서에서는 SHA-1의 작동 원리, 역사, 보안 취약점, 그리고 현재의 사용 현황에 대해 설명합니다.

개요

SHA-1은 메시지 다이제스트 알고리즘의 일종으로, 주어진 입력 데이터에 대해 고유한 해시 값을 생성합니다. 이 해시 값은 원본 데이터의 "지문(fingerprint)"과 유사한 역할을 하며, 입력 데이터가 조금만 변경되어도 완전히 다른 해시 값이 생성됩니다. 이러한 특성 덕분에 SHA-1은 파일 무결성 검사, 비밀번호 저장, SSL/TLS 인증서 서명 등에 널리 사용되었습니다.

하지만 2005년 이후로 SHA-1은 여러 보안 공격(특히 충돌 공격)에 취약하다는 것이 입증되었고, 현재는 사용이 권장되지 않는 알고리즘으로 분류됩니다. 대신 SHA-2 또는 SHA-3와 같은 더 안전한 해시 함수가 권장되고 있습니다.


작동 원리

입력 처리

SHA-1은 임의 길이의 메시지를 입력으로 받아 처리합니다. 입력 메시지는 다음 단계를 거칩니다:

  1. 패딩(Padding): 메시지 길이를 512비트의 배수로 맞추기 위해 패딩을 추가합니다.
  2. 우선 1 비트를 추가하고, 그 뒤에 0 비트를 연속으로 붙입니다.
  3. 마지막 64비트에는 원본 메시지의 길이(비트 단위)를 저장합니다.

  4. 블록 분할: 패딩된 메시지를 512비트 단위의 블록으로 나눕니다.

해시 연산

각 512비트 블록에 대해 다음과 같은 과정을 수행합니다:

  • 블록을 16개의 32비트 단어로 분할합니다.
  • 이후 80단계의 라운드 연산(round function)을 수행하며, 각 단계에서 비트 연산(AND, OR, XOR, NOT), 순환 시프트 등을 사용합니다.
  • 5개의 32비트 초기 해시 값(H0 ~ H4)을 업데이트하며 최종 다이제스트를 생성합니다.

최종적으로, 5개의 32비트 값이 결합되어 160비트의 해시 값(예: da39a3ee5e6b4b0d3255bfef95601890afd80709)이 출력됩니다.


역사와 발전

  • 1993년: 최초의 SHA 알고리즘(SHA-0) 발표, 그러나 곧 취약점 발견.
  • 1995년: NSA에 의해 수정된 SHA-1 발표.
  • 2005년: 중국의 왕샤오윈(Xiaoyun Wang) 연구팀이 SHA-1에 대한 충돌 공격(Collision Attack)을 성공적으로 수행함. 이는 서로 다른 두 입력이 동일한 해시 값을 가질 수 있음을 의미.
  • 2017년: 구글과 CWI 암스테르담 연구진이 SHAttered 공격을 발표. 두 개의 서로 다른 PDF 파일이 동일한 SHA-1 해시를 가지도록 만듦.
  • 2020년 이후: 대부분의 주요 브라우저와 CA(인증 기관)가 SHA-1 기반 인증서의 발급 및 신뢰를 중단.

보안 취약점

충돌 공격 (Collision Attack)

SHA-1의 가장 큰 문제는 두 개의 서로 다른 입력이 동일한 해시를 생성할 수 있다는 점입니다. 이는 디지털 서명의 위조, 인증서 위변조 등 심각한 보안 사고로 이어질 수 있습니다.

예를 들어, 공격자가 합법적인 문서와 악성 문서를 만들어 SHA-1 해시를 동일하게 맞추면, 서명된 합법 문서처럼 위장할 수 있습니다.

전방 공격 (Pre-image Attack)

현재로서는 SHA-1에 대한 실용적인 전방 공격(주어진 해시 값에서 원본 메시지를 복원)은 알려져 있지 않으나, 충돌 공격의 존재로 인해 전반적인 신뢰도가 크게 하락했습니다.


사용 현황과 권장 사항

용도 현재 상태
SSL/TLS 인증서 비권장, 대부분의 브라우저에서 경고 또는 차단
Git 저장소 여전히 사용 중 (단, 보안 인증에는 사용되지 않음)
비밀번호 해싱 절대 사용 금지, 약한 알고리즘
파일 무결성 검사 구형 시스템에서 일부 사용, 새 시스템은 SHA-256 권장

⚠️ NIST, IETF, CA/Browser Forum 등 주요 기관은 SHA-1의 사용을 2010년대 중반부터 중단할 것을 권고했으며, 2020년 이후로는 모든 보안 관련 용도에서 완전히 폐기되었습니다.


관련 알고리즘

  • SHA-2: SHA-256, SHA-512 등 다양한 변종 존재. 현재 산업 표준.
  • SHA-3: Keccak 알고리즘 기반, 구조적으로 SHA-1/2과 다름. 더 높은 보안성 보장.

라운드 함수 상세 구조

SHA-1의 80단계 라운드 연산은 20라운드씩 4개의 그룹으로 나뉘며, 각 그룹마다 서로 다른 논리 함수 $f$를 사용하여 비트 혼합을 수행합니다. 각 라운드에서 사용되는 논리식은 다음과 같습니다.

  • 라운드 0~19: $\text{f}(t, a, b, c) = (a \land b) \lor (\neg a \land c)$
  • 라운드 20~39: $\text{f}(t, a, b, c) = (a \land b) \lor (a \land c) \lor (b \land c)$
  • 라운드 40~59: $\text{f}(t, a, b, c) = a \oplus b \oplus c$
  • 라운드 60~79: $\text{f}(t, a, b, c) = (a \land b) \lor (\neg a \land c)$ (라운드 0~19와 동일)

여기서 $\land$는 AND, $\lor$는 OR, $\neg$는 NOT, $\oplus$는 XOR 연산을 의미합니다. 이러한 구조적 차이는 데이터의 확산(Diffusion) 효과를 극대화하여 입력값의 작은 변화가 결과값에 크게 영향을 미치도록 설계되었습니다.

충돌 공격의 수학적 배경과 SHAttered

생일 공격 (Birthday Attack)

SHA-1의 충돌 가능성은 확률론의 '생일 문제(Birthday Problem)'에 기반합니다. 이론적으로 160비트 해시 함수에서 충돌을 찾으려면 $2^{160}$번의 시도가 필요할 것 같지만, 실제로는 생일 공격을 통해 약 $2^{80}$번의 시도만으로도 충돌 쌍을 찾을 확률이 50%에 도달합니다. 이는 특정 해시 값과 일치하는 값을 찾는 '전방 공격'보다 훨씬 적은 연산량으로도 서로 다른 두 입력의 해시 값이 같아지는 지점을 찾을 수 있음을 의미합니다.

SHAttered 공격 사례

2017년 구글과 CWI 암스테르담은 SHA-1의 실질적인 충돌을 증명한 SHAttered 공격을 발표했습니다.

  • 공격 방식: 특수하게 설계된 PDF 파일 두 개를 생성하여, 파일의 내용은 서로 다르지만 SHA-1 해시 값은 완전히 동일하게 만들었습니다.
  • 예시 파일:
    • 파일 A: 일반적인 텍스트가 포함된 PDF 문서.
    • 파일 B: 파일 A와 시각적으로는 유사하나 내부 구조(메타데이터 및 바이너리 데이터)가 다른 PDF 문서.
    • 결과: $\text{SHA-1}(\text{File A}) = \text{SHA-1}(\text{File B}) = \text{38763676... (동일한 160비트 값)}$
  • 시사점: 이 공격은 SHA-1이 더 이상 디지털 서명의 무결성을 보장할 수 없음을 실증적으로 보여주었으며, 공격자가 정상 문서의 서명을 탈취해 악성 문서에 적용할 수 있는 위험성을 경고했습니다.

Git에서의 SHA-1 활용과 전환

내용 주소 지정 가능 저장소 (CAS)

Git은 데이터를 저장할 때 파일 이름이 아닌 파일 내용의 해시 값을 주소로 사용하는 내용 주소 지정 가능 저장소(Content-Addressable Storage) 방식을 채택하고 있습니다. SHA-1은 여기서 객체(Blob, Tree, Commit)의 고유 식별자(ID)를 생성하는 데 사용됩니다. 이는 동일한 내용의 파일이 여러 번 저장되더라도 단 하나의 해시 값으로 관리되어 저장 공간을 효율적으로 사용할 수 있게 합니다.

SHA-256으로의 전환

SHAttered 공격 이후, Git 커뮤니티는 SHA-1의 충돌 가능성이 저장소의 무결성을 해칠 수 있다고 판단하여 SHA-256으로의 전환을 추진하고 있습니다. * 전환 메커니즘: 기존 SHA-1 기반 저장소와의 호환성을 유지하면서, 새로운 커밋부터 SHA-256을 선택적으로 사용할 수 있는 옵션을 도입하고 있습니다. * 충돌 방지: Git은 단순 해시 비교 외에도 파일 크기나 추가적인 검증 단계를 통해 SHA-1 충돌로 인한 데이터 오염을 방지하는 보완책을 적용하고 있습니다.

SHA-1과 다른 해시 함수의 성능 비교

SHA-1은 보안성은 낮지만, 연산 구조가 단순하여 최신 알고리즘보다 처리 속도가 빠릅니다. 이는 과거 하드웨어 성능이 낮았던 시절에 큰 장점으로 작용했습니다.

알고리즘 해시 길이 보안 수준 상대적 연산 속도 주요 특징
MD5 128-bit 매우 낮음 매우 빠름 가장 빠르나 충돌 공격에 매우 취약
SHA-1 160-bit 낮음 빠름 속도와 보안의 타협점이었으나 현재는 취약
SHA-256 256-bit 높음 보통 현재 표준, SHA-1보다 연산 복잡도 높음
SHA-512 512-bit 매우 높음 보통/빠름* 64비트 CPU 환경에서 SHA-256보다 효율적

*SHA-512는 64비트 아키텍처에서 32비트 기반의 SHA-256보다 처리 효율이 더 좋을 수 있습니다.

참고 자료


결론

SHA-1은 과거 중요한 역할을 했던 해시 알고리즘이지만, 보안 취약성이 입증됨에 따라 현재는 사용해서는 안 되는 알고리즘입니다. 특히 보안이 중요한 시스템에서는 반드시 SHA-2(예: SHA-256) 이상의 알고리즘을 사용해야 하며, 새로운 시스템 설계 시 SHA-1은 배제되어야 합니다. 기술 발전과 함께 알고리즘의 수명 주기를 이해하고, 적절한 시기에 업그레이드하는 것이 사이버 보안의 핵심입니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?