SHA (보안 해시 알고리즘)

용어심층

Secure Hash Algorithm · 보안 해시 알고리즘

SHA는 미국 국가안보국(NSA)이 설계하고 미국 국립표준기술연구소(NIST)가 표준으로 채택한 암호학적 해시 함수 계열로, 임의 길이의 입력을 정해진 길이의 값으로 바꾸어 데이터 무결성 검증과 블록체인의 기반 기술로 널리 쓰인다.

1.개요

SHA는 'Secure Hash Algorithm(보안 해시 알고리즘)'의 약자로, 미국 국가안보국(NSA)이 설계하고 미국 국립표준기술연구소(NIST)가 표준으로 채택한 암호학적 해시 함수 계열이다. 해시 함수란 길이에 상관없는 입력 데이터를 받아 항상 정해진 길이의 짧은 값(해시값 또는 다이제스트)으로 바꾸어 주는 함수를 말한다. 예를 들어 SHA-256은 어떤 입력이든 256비트(64자리 16진수)의 값으로 변환한다.

SHA는 파일이 위·변조되지 않았음을 확인하는 무결성 검증, 비밀번호 보관, 전자서명 등 정보 보안 전반의 기반 기술이며, 비트코인을 비롯한 여러 블록체인의 핵심 부품이기도 하다. 중요한 것은 SHA가 하나의 알고리즘이 아니라 SHA-1, SHA-2, SHA-3로 이어지는 여러 세대의 알고리즘 묶음을 가리킨다는 점이다. 이 문서를 찾는 사람들이 흔히 말하는 'SHA-256'은 그중 오늘날 가장 널리 쓰이는 SHA-2 계열의 한 종류다.

2.암호학적 해시 함수의 성질

암호학적 해시 함수는 단순히 값을 줄이는 것을 넘어 보안에 쓸 수 있도록 다음과 같은 성질을 갖추어야 한다.

  • 결정성: 같은 입력은 언제나 같은 해시값을 낸다.
  • 고정 길이 출력: 입력이 한 글자든 수 기가바이트든 결과는 항상 정해진 길이(SHA-256은 256비트)다.
  • 일방향성(역상 저항성): 해시값만 보고 원래 입력을 되돌려 알아내는 것은 사실상 불가능하다.
  • 제2역상 저항성: 어떤 입력이 주어졌을 때, 그것과 같은 해시값을 내는 다른 입력을 찾기가 매우 어렵다.
  • 충돌 저항성: 서로 다른 두 입력이 우연히 같은 해시값을 갖는 경우(충돌)를 찾기가 매우 어렵다.
  • 눈사태 효과: 입력이 단 한 글자(한 비트)만 달라져도 해시값 전체가 전혀 다르게 바뀐다.

이런 성질 덕분에 SHA는 데이터가 위·변조되지 않았음을 확인하는 무결성 검증의 핵심 도구가 된다. 앞의 세 가지 저항성 중 하나라도 현실적으로 깨지면 그 해시 함수는 보안 용도에서 폐기 대상이 되는데, 실제로 SHA-1이 그 길을 걸었다.

3.세대: SHA-0에서 SHA-3까지

SHA 계열은 여러 세대를 거치며 발전해 왔다.

3.1.SHA-0와 SHA-1

최초의 SHA(뒷날 SHA-0으로 불림)는 1993년 발표되었으나 곧 설계상의 약점이 발견되어 철회되었고, 1995년 이를 보완한 SHA-1이 나왔다. SHA-1은 입력을 160비트 해시값으로 바꾸며 오랫동안 인터넷 보안과 인증서의 표준으로 널리 쓰였다.

3.2.SHA-2

2001년 발표된 SHA-2 계열은 해시값 길이에 따라 SHA-224, SHA-256, SHA-384, SHA-512 등으로 나뉜다. 오늘날 가장 널리 쓰이는 세대로, 비트코인이 채택한 것도 이 중 SHA-256이다.

3.3.SHA-3

2015년 표준으로 확정된 SHA-3는 케차크(Keccak)를 기반으로 한다. NIST가 2012년 공개 공모를 통해 케차크를 SHA-3 알고리즘으로 선정했다. SHA-3는 앞선 세대와 내부 구조가 근본적으로 달라, SHA-2에 예기치 못한 결함이 발견될 경우를 대비한 대안이자 보험 성격을 지닌다.

4.작동 원리와 기술 구조

SHA-1과 SHA-2는 머클-담고르(Merkle–Damgård) 구조를 따른다. 먼저 입력 메시지 뒤에 규칙에 따라 채움 비트(패딩)를 붙여 길이를 맞추고, 이를 일정한 크기의 블록으로 나눈 뒤, 압축 함수를 블록마다 반복 적용하면서 내부 상태를 갱신한다. 마지막 블록까지 처리하고 남은 내부 상태가 최종 해시값이 된다.

SHA-3는 이와 달리 스펀지(sponge) 구조를 쓴다. 데이터를 빨아들이는 흡수(absorbing) 단계와 결과를 짜내는 압축(squeezing) 단계로 나뉘며, 케차크 순열이라는 변환을 반복한다. 이처럼 구조 자체가 다르기 때문에 SHA-2를 겨냥한 특정 공격이 SHA-3에는 통하지 않을 수 있다.

세대와 상관없이 SHA는 입력이 단 한 비트만 달라져도 출력 전체가 완전히 바뀌는 눈사태 효과를 보인다. 이 때문에 해싱 결과는 사실상 예측이 불가능하며, 이 예측 불가능성이 뒤에서 설명할 작업증명 채굴의 전제가 된다.

5.블록체인에서의 역할

블록체인에서 SHA, 특히 SHA-256은 여러 곳에서 핵심적으로 쓰인다.

첫째, 작업증명 채굴이다. 비트코인 채굴자는 블록 헤더 데이터를 SHA-256으로 두 번 해시한 값이 특정 조건(앞자리에 0이 일정 개수 이상 오는 등)을 만족할 때까지, 난스(nonce)라는 값을 계속 바꿔 가며 반복 계산한다. 해시값은 예측할 수 없으므로 조건을 맞추려면 막대한 시행착오가 필요하고, 이 계산 경쟁이 곧 채굴이다. 참여자 전체의 계산 능력은 해시레이트로 나타내며, 채굴 보상이 주기적으로 줄어드는 반감기도 이 작업증명 구조 위에서 작동한다.

둘째, 블록의 연결이다. 각 블록은 바로 앞 블록의 해시값을 담고 있어, 블록들이 사슬처럼 이어진다. 과거의 어느 블록을 조작하면 그 해시값이 달라지고, 이후 모든 블록의 해시가 연쇄적으로 어긋나기 때문에 위·변조를 즉시 탐지할 수 있다.

셋째, 트랜잭션 식별과 요약이다. 개별 거래는 해시값을 통해 고유하게 식별되며, 한 블록에 담긴 여러 거래는 머클 트리(Merkle Tree)라는 구조로 해시를 거듭 묶어 하나의 대표 해시로 요약된다. 이를 통해 특정 거래가 블록에 포함되었는지를 효율적으로 검증할 수 있다.

6.예시와 활용

비트코인은 SHA-256을 사용하지만, 모든 암호화폐가 같은 해시 함수를 쓰는 것은 아니다. 라이트코인은 스크립트(Scrypt), 이더리움 계열은 케차크(Keccak, SHA-3의 기반) 등 저마다 다른 해시 함수를 채택한다. 어떤 해시 함수를 쓰느냐에 따라 채굴에 유리한 하드웨어, 즉 전용 장비 ASIC가 유리한지 일반 그래픽카드 GPU가 유리한지가 달라지기도 한다.

블록체인 밖에서도 SHA는 널리 쓰인다.

  • 체크섬: 소프트웨어를 내려받을 때 함께 제공되는 해시값과 직접 계산한 값을 비교해 파일이 손상·변조되지 않았는지 확인한다.
  • 비밀번호 보관: 비밀번호를 원문 그대로 저장하지 않고 해시값으로 바꿔 저장해, 데이터가 유출되어도 원문을 곧바로 알 수 없게 한다.
  • 전자서명·인증서: 전자서명과 디지털 인증서 등 정보 보안 전반에서 기반 기술로 쓰인다.

7.SHA-1의 몰락과 안전성

SHA-1은 이론적·현실적 공격이 잇따르며 신뢰를 잃었다. 2005년 연구자들은 SHA-1의 충돌을 무차별 대입보다 훨씬 적은 계산으로 찾을 수 있다는 이론적 공격을 제시했다. 2017년에는 구글과 네덜란드 CWI 연구진이 서로 다른 두 파일이 같은 SHA-1 해시값을 갖도록 만드는 실제 충돌(이른바 SHAttered)을 성공시켜, SHA-1이 더 이상 안전하지 않음을 입증했다.

이후 웹 브라우저와 인증기관(CA)은 SHA-1 기반 인증서를 퇴출했고, 보안이 중요한 용도에서는 SHA-2 이상으로 옮겨 가는 것이 원칙이 되었다. 다만 비트코인이 쓰는 것은 SHA-1이 아니라 SHA-256이므로 이 공격의 영향을 받지 않는다. 충돌 공격의 역사는 특정 해시 함수가 영원히 안전하지 않으며, 문제가 드러나기 전에 더 강한 세대로 이전해야 함을 보여 준다.

8.다른 해시 함수와의 비교

SHA만이 해시 함수인 것은 아니다. 대표적인 함수들을 비교하면 다음과 같다.

  • MD5: SHA 이전 널리 쓰였으나 충돌 공격이 쉬워져 보안 용도로는 폐기되었다. SHA-1의 사실상 선배 격이다.
  • SHA-1: 오래 표준이었으나 2017년 실제 충돌로 폐기 수순을 밟았다.
  • SHA-2 / SHA-3: 각각 머클-담고르 구조와 스펀지 구조를 쓰며, 현재 함께 표준으로 인정된다.
  • 케차크(Keccak): SHA-3의 기반이며, 이더리움 계열이 변형된 형태를 사용한다.
  • 스크립트(Scrypt): 라이트코인 등이 채굴에 쓰는 함수로, 많은 메모리를 요구해 전용 장비 ASIC의 이점을 줄이도록 설계되었다.

어떤 해시 함수를 쓰느냐에 따라 채굴에 유리한 하드웨어와 보안 특성, 그리고 개발자 생태계가 달라진다.

9.앞으로의 과제

암호학적 해시 함수도 시간과 기술 발전 앞에서 영원히 안전하지는 않다. 과거 MD5와 SHA-1이 그러했듯, 계산 능력의 향상(무어의 법칙)과 새로운 공격 기법은 특정 해시 함수의 수명을 앞당길 수 있다.

양자 컴퓨터도 잠재적 변수로 꼽힌다. 그로버(Grover) 알고리즘 같은 양자 탐색 기법은 해시값을 되짚는 데 드는 노력을 이론적으로 줄일 수 있으나, 공개키 암호가 받는 위협만큼 치명적이지는 않은 것으로 평가된다. SHA-256처럼 출력이 긴 함수는 이 경우에도 상당한 안전 여유를 갖는 것으로 여겨진다.

SHA-2가 아직 견고하기 때문에 SHA-3로의 전환은 서서히 진행되고 있으며, 두 계열은 당분간 함께 쓰일 전망이다. 결국 SHA의 역사는 새로운 공격이 나오면 더 강한 세대로 갈아타는 순환의 반복이며, 블록체인과 정보 보안이 그 위에 얹혀 있는 만큼 이 계열의 안전성은 앞으로도 주의 깊게 지켜봐야 할 영역이다.

10.연표8

  1. 1993설립최초의 SHA(뒷날 SHA-0) 발표
  2. 1995이정표약점을 보완한 SHA-1 발표(160비트 해시)
  3. 2001이정표SHA-2 계열(SHA-224/256/384/512) 발표
  4. 2005사건SHA-1에 대한 이론적 충돌 공격 제시
  5. 2009출시비트코인이 작업증명에 SHA-256을 채택
  6. 2012이정표NIST가 케차크(Keccak)를 SHA-3로 선정
  7. 2015이정표SHA-3 표준 확정
  8. 2017사건SHA-1 실제 충돌(SHAttered) 성공, 사실상 폐기
이 문서 인용하기
토큰포스트 위키, “SHA (보안 해시 알고리즘)”, 2026-07-31 수정, https://wiki.tokenpost.kr/w/sha

문단 9개 · 연표 8건 · 각주 0