HANGUL.WIKI

해시 함수

Hash Function

번역 제공
2026-09-06
목차 (24개 섹션)

해시 함수 (Hash Function)

개요

해시 함수(Hash Function)는 임의 길이의 입력 데이터를 고정된 길이의 출력값(해시값, 다이제스트)으로 변환하는 단방향 수학 함수다. 암호학, 데이터 무결성 검증, 자료구조, 블록체인 등 현대 컴퓨팅의 핵심 기반 기술로 사용된다.

핵심 특성

1. 결정론적(Deterministic): 동일 입력은 항상 동일 출력을 생성한다. 2. 단방향성(One-way): 해시값으로부터 원본 데이터를 역산하는 것이 계산적으로 불가능하다. 3. 충돌 저항성(Collision Resistance): 서로 다른 두 입력이 동일 해시값을 생성하는 경우(충돌)를 찾기 극히 어렵다. 4. 눈사태 효과(Avalanche Effect): 입력의 1비트 변화가 출력의 약 50% 비트를 변화시킨다. 5. 고정 길이 출력: 입력 크기에 무관하게 출력 길이가 일정하다.

주요 알고리즘

MD5 (Message Digest 5)

  • 128비트(32자리 16진수) 출력
  • 1991년 Ron Rivest 설계
  • 현재 암호학적으로 파괴됨: 2004년 Wang Xiaoyun 팀이 충돌 쌍 생성 기법 발표. 현재 수초 내 충돌 생성 가능
  • 암호학적 용도로 사용 금지; 비암호학적 체크섬 용도로만 제한 사용
  • SHA-1 (Secure Hash Algorithm 1)

  • 160비트 출력
  • 2017년 구글 SHAttered 프로젝트로 실제 충돌 쌍 공개
  • NIST에 의해 2011년 공식 사용 중단 권고
  • SHA-256 / SHA-2 계열

  • SHA-256: 256비트 출력 / SHA-512: 512비트 출력
  • NIST FIPS 180-4 표준
  • 현재 가장 널리 사용되는 암호학적 해시 함수
  • TLS/SSL, 비트코인, 코드 서명, 비밀번호 저장(PBKDF2 등) 등에 활용
  • 양자 컴퓨터에 대한 그로버 알고리즘 공격 시 보안 강도 절반으로 감소 → 256비트가 128비트 수준으로
  • SHA-3 (Keccak)

  • 2015년 NIST 표준화
  • SHA-2와 완전히 다른 스펀지 구조(Sponge Construction) 사용
  • 이더리움 블록체인이 Keccak-256 사용
  • BLAKE3

  • 2020년 발표, SHA-256 대비 수배~수십 배 빠른 처리 속도
  • 병렬화 최적화, 현대 하드웨어에 적합
  • 비밀번호 저장에서의 해시

    단순 SHA-256으로 비밀번호를 저장하는 것은 불충분하다. 레인보우 테이블 공격과 브루트 포스에 취약하기 때문이다.

    올바른 비밀번호 해싱 방식:

  • bcrypt: 비용 인수(cost factor)로 연산 속도 조절 가능, 솔트 내장
  • scrypt: 메모리 집약적 설계로 GPU 병렬 공격 방어
  • Argon2: 2015년 Password Hashing Competition 우승, id2 모드 권장
  • PBKDF2: NIST/FIPS 표준, 반복 횟수 설정 가능
  • 핵심 원칙: 솔트(무작위 값)를 비밀번호에 추가하여 해싱하면 동일 비밀번호도 다른 해시값 생성.

    블록체인에서의 활용

  • 비트코인: SHA-256 이중 해싱으로 블록 헤더 해시 생성; 작업증명(PoW) 채굴에서 특정 조건의 해시값 탐색
  • 블록 연결: 각 블록이 이전 블록의 해시값을 포함하여 변경 불가능한 체인 형성
  • 머클 트리(Merkle Tree): 트랜잭션을 해시로 이진 트리 구성, 효율적 검증
  • 이더리움: Keccak-256 활용, 스마트 컨트랙트 주소 생성
  • 취약점 및 공격 유형

    | 공격 유형 | 설명 | |-----------|------| | 레인보우 테이블 | 해시값→원문 역조회 테이블; 솔트로 방어 | | 생일 공격(Birthday Attack) | 확률론적 충돌 탐색; n비트 함수는 약 2^(n/2)회 시도로 충돌 발견 가능 | | 길이 확장 공격(Length Extension) | SHA-1/SHA-2 취약점; SHA-3, BLAKE3는 해당 없음 | | 양자 컴퓨팅 | 그로버 알고리즘으로 2차 가속; 256비트 이상 권장 |

    비암호학적 해시 함수

    성능 최적화 목적의 해시 함수는 암호학적 강도보다 속도를 우선한다.
  • MurmurHash, xxHash: 해시 테이블, 데이터베이스 인덱싱
  • CRC32: 네트워크 패킷 오류 검출
  • 이 함수들은 의도적 충돌 생성이 가능하므로 보안 목적 사용 금지
  • 현황 및 권고사항 (2026 기준)

  • 신규 시스템: SHA-256 이상 또는 SHA-3 사용
  • 비밀번호: Argon2id 우선, bcrypt/scrypt 차선
  • MD5/SHA-1: 즉시 폐기
  • 양자 내성 고려 시: SHA-384/SHA-512 또는 SHA-3-256 이상 권장

데이터 처리 원리 및 단계

단방향 변환과 눈사태 효과의 작동 단계

해시 함수는 임의 길이의 입력 데이터를 고정된 길이의 다이제스트로 변환하는 단방향 수학 함수다. 해시 함수는 데이터의 무결성 검증과 암호학 시스템의 연산 기반으로 쓰인다. 해시 연산 과정은 입력 데이터 처리, 비트 변환 연산, 고정 길이 출력값 생성 순서로 진행된다. 먼저 임의 크기의 원본 데이터가 해시 함수의 입력값으로 전달된다. 해시 함수는 전달받은 입력 데이터를 단방향 수학 함수 알고리즘으로 계산 처리한다. 입력 데이터에서 1비트의 변화가 발생하면 내부 연산을 거쳐 출력값 비트의 약 50%가 변화하는 눈사태 효과가 일어난다. 연산 처리가 완료되면 입력 데이터의 크기와 무관하게 정해진 길이의 해시값이 결과로 출력된다. 동일한 입력 데이터를 전달하면 해시 함수는 항상 동일한 해시값을 결과로 생성한다. 생성된 해시값에서 원본 입력 데이터를 역산하여 복원하는 과정은 계산적으로 불가능한 것으로 알려졌다.

블록체인의 분산 원장 검증 순서

블록체인 시스템은 거래 내역의 검증과 데이터 위변조 방지를 위해 해시 함수를 핵심 기술로 사용한다. 블록체인의 무결성 유지 과정은 트랜잭션 해싱, 블록 헤더 이중 해싱, 이전 블록 해시값 연결 순서로 진행된다. 먼저 개별 트랜잭션 데이터를 해시 연산하여 이진 트리 형태의 머클 트리를 구성한다. 머클 트리는 대규모 트랜잭션 데이터의 변경 여부를 신속하게 검증하는 역할을 수행한다. 비트코인 시스템은 트랜잭션 정보를 포함한 블록 헤더에 SHA-256 이중 해싱을 적용하여 블록 헤더 해시를 생성한다. 작업증명 채굴 과정에서는 반복 연산을 거쳐 사전에 정의된 특정 조건을 만족하는 해시값을 탐색한다. 각 블록은 직전 블록의 해시값을 블록 헤더에 포함하여 순차적으로 연결된다. 선행 블록의 데이터가 변경되면 후속 블록의 해시값 연결이 손상되므로 변경 불가능한 체인이 형성되는 효과가 발생한다. 이더리움 시스템은 Keccak-256 해시 함수를 활용하여 스마트 컨트랙트 주소를 생성한다.

비밀번호 보호를 위한 단계적 해싱 순서

비밀번호 해싱 방식은 사용자 인증 정보를 안전하게 보관하여 데이터베이스 유출 시 비인가 접근을 방어하는 데 쓰인다. 비밀번호 저장 체계는 무작위 값 결합, 전용 해시 함수 연산, 결과 다이제스트 저장 순서로 진행된다. 단순 SHA-256 알고리즘으로 비밀번호를 직접 저장하면 레인보우 테이블 역조회와 브루트 포스 공격에 취약해지는 한계가 존재한다. 보안 시스템은 먼저 무작위 값인 솔트(Salt)를 생성하여 비밀번호 데이터에 결합한다. 솔트가 결합된 비밀번호를 해싱하면 동일한 비밀번호가 입력되어도 서로 다른 해시값이 생성된다. 솔트 결합 방식은 사전에 계산된 해시값 역조회 테이블인 레인보우 테이블 공격을 방어하는 효과를 낸다. 이후 보안 시스템은 연산 지연 및 방어 기능을 갖춘 전용 비밀번호 해싱 알고리즘으로 연산을 수행한다. bcrypt 알고리즘은 비용 인수(cost factor)를 조절하여 연산 속도를 늦추며 내장된 솔트를 함께 처리한다. scrypt 알고리즘은 메모리 집약적 설계를 통해 GPU 장치를 이용한 병렬 연산 공격을 방어한다. Argon2 알고리즘은 2015년 Password Hashing Competition 우승 방식으로 Argon2id 모드를 적용하여 보호 연산을 수행한다. PBKDF2 알고리즘은 NIST 및 FIPS 표준에 따라 반복 횟수를 지정하여 순차 연산을 반복한다.

보안 위협의 원인과 방어 기제

충돌 탐색 공격의 발생 원인과 한계

충돌 탐색 공격은 해시 함수에서 서로 다른 두 입력값이 동일한 출력값을 생성하는 충돌을 인위적으로 찾아내는 행위다. 공격자는 확률론적 충돌 탐색 방식인 생일 공격(Birthday Attack)을 사용하여 충돌 쌍을 탐색한다. n비트 출력을 갖는 해시 함수는 약 2^(n/2)회의 연산 시도를 거치면 충돌이 발견될 수 있는 것으로 분석된다. 충돌 저항성이 훼손되면 해시 함수를 활용한 무결성 검증의 신뢰성이 저하되는 한계가 발생한다. MD5 알고리즘은 2004년 Wang Xiaoyun 팀의 충돌 쌍 생성 기법 발표 이후 수초 내에 충돌 생성이 가능해지며 암호학적으로 파괴된 상태로 분류된다. SHA-1 알고리즘은 2017년 구글 SHAttered 프로젝트를 통해 실제 충돌 쌍이 공개되어 암호학적 안전성 한계가 증명되었다. 암호학적 안전성이 파괴된 MD5와 SHA-1 알고리즘은 암호학적 보안 체계에서 즉시 폐기되어야 한다. MD5 알고리즘은 데이터 손상 여부만을 확인하는 비암호학적 체크섬 용도로만 제한적으로 사용된다.

알고리즘 구조별 취약점과 대응 조건

해시 함수의 내부 설계 구조는 특정 공격 유형에 대한 취약성과 방어 능력을 결정한다. 길이 확장 공격(Length Extension)은 해시값과 데이터 길이를 기반으로 내부 상태를 연장하는 취약점 공격이다. SHA-1 및 SHA-2 계열 해시 함수는 내부 구조의 특성으로 인해 길이 확장 공격에 취약한 것으로 알려졌다. 스펀지 구조(Sponge Construction)를 적용한 SHA-3 알고리즘과 병렬 처리를 최적화한 BLAKE3 알고리즘에는 길이 확장 공격 취약점이 해당하지 않는다. BLAKE3 알고리즘은 현대 하드웨어에 최적화되어 SHA-256 대비 수배에서 수십 배 빠른 처리 속도를 달성한다. 양자 컴퓨터 환경에서 그로버 알고리즘(Grover's Algorithm)이 실행되면 해시값 탐색 연산에 2차 가속이 발생한다. 그로버 알고리즘의 공격을 받으면 해시 함수의 암호학적 보안 강도는 기존의 절반 수준으로 감소한다. SHA-256 알고리즘의 보안 강도는 양자 컴퓨터 공격 환경에서 128비트 수준으로 저하된다. 양자 컴퓨터 환경의 공격에 대응하기 위해서는 SHA-384, SHA-512 또는 SHA-3-256 이상의 해시 함수를 사용하는 방식이 권장된다.

용도별 분류 및 운용 기준

암호학적 해시 함수의 운용 요건

암호학적 해시 함수는 TLS/SSL 보안 통신, 코드 서명, 블록체인 합의, 비밀번호 보호 등 보안성이 요구되는 영역에 쓰인다. 암호학적 해시 함수는 결정론적 특성, 단방향성, 충돌 저항성, 눈사태 효과, 고정 길이 출력 특성을 모두 만족해야 한다. 2026년 기준 신규 보안 시스템에는 NIST FIPS 180-4 표준인 SHA-256 이상의 SHA-2 계열 또는 2015년 NIST 표준화된 SHA-3 알고리즘의 도입이 요구된다. 비밀번호 저장 체계에는 단순 해시 함수 대신 Argon2id 알고리즘이 우선 권장되며 bcrypt 및 scrypt 알고리즘이 차선으로 권장된다. 2011년 NIST의 공식 사용 중단 권고를 받은 SHA-1과 충돌 쌍이 밝혀진 MD5는 보안 목적 체계에서 배제되어야 한다.

비암호학적 해시 함수의 운용 요건

비암호학적 해시 함수는 암호학적 강도보다 처리 속도와 연산 성능 최적화를 최우선으로 고려하는 영역에 쓰인다. 자료구조 분야에서는 빠른 데이터 조회를 위해 해시 테이블과 데이터베이스 인덱싱에 비암호학적 해시 함수를 적용한다. 네트워크 통신 분야에서는 패킷 전송 중 발생하는 데이터 오류를 신속히 검출하기 위해 CRC32 함수를 사용한다. MurmurHash와 xxHash 알고리즘은 빠른 처리 속도를 제공하여 해시 테이블 및 데이터베이스 인덱싱 연산을 지원한다. 비암호학적 해시 함수는 의도적인 충돌 생성이 가능한 구조적 한계를 가지므로 보안 목적의 암호화 체계에는 사용이 엄격히 금지된다.

문서 정보

최초 작성
최종 갱신
분류
과학기술

HANGUL.WIKI가 정리·작성한 문서입니다. 정확성을 위해 노력하나 오류가 있을 수 있으므로, 중요한 내용은 공식 출처를 통해 확인하시기 바랍니다. 내용의 오류나 정정 요청은 오류·정정 신고로 알려주시면 검토 후 반영합니다.