본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

SHA-3(Secure Hash Algorithm-3)는 미국 NIST 가 공개 경쟁을 거쳐 Keccak 을 바탕으로 2015년 FIPS 202 로 표준화한 암호 해시 함수 계열로, 스펀지 구조를 써서 SHA-1·SHA-2 와 전혀 다른 방식으로 동작한다.

SHA-2 는 MD5·SHA-1 과 같은 머클-담고르(Merkle-Damgård) 구조라서, 이 구조에 공통된 약점이 발견될 경우를 대비해 설계가 다른 예비 표준이 필요했다. NIST 는 2007년부터 SHA-3 공모를 열어 2012년 Keccak 을 우승 알고리즘으로 골랐고, 2015년 8월 FIPS 202 로 발표했다. FIPS 202 는 SHA-3 를 FIPS 180-4 의 SHA-1·SHA-2 를 보완하는 계열로 규정한다. SHA-2 를 폐기하고 바꾸는 것이 아니라 같은 출력 길이를 가진 대안을 하나 더 두는 것이다.[1]

SHA-3 계열은 해시 함수 4개와 확장 출력 함수(XOF) 2개, 모두 6개 함수로 이루어진다. 여섯 함수는 모두 1600비트 상태에 작용하는 같은 순열(Keccak-p[1600, 24])을 스펀지 구조 안에서 쓴다.[1]

함수 종류 출력 길이
SHA3-224 해시 함수 224비트
SHA3-256 해시 함수 256비트
SHA3-384 해시 함수 384비트
SHA3-512 해시 함수 512비트
SHAKE128 확장 출력 함수(XOF) 원하는 길이(보안 강도 128비트)
SHAKE256 확장 출력 함수(XOF) 원하는 길이(보안 강도 256비트)
  • 해시 함수 이름 뒤의 숫자는 출력(다이제스트) 길이이고, SHAKE 뒤의 숫자는 보안 강도이다. SHA-2 의 SHA-224·256·384·512 와 출력 길이가 같아서 서로 바꿔 쓸 수 있다.[1]
  • SHAKE128·SHAKE256 은 NIST 가 처음 표준화한 XOF 로, 출력을 필요한 만큼 늘려 뽑을 수 있다.

스펀지 구조는 고정 길이 순열 f 와 패딩 규칙으로, 길이가 정해지지 않은 입력을 받아 원하는 길이의 출력을 내는 함수를 만드는 방식이다. 상태 b 비트는 바깥쪽 r 비트(비트율)와 안쪽 c 비트(용량)로 나뉜다.[2]

  1. 흡수 단계(absorbing) - 입력을 패딩해 r 비트 블록으로 자르고, 블록마다 상태의 앞 r 비트에 XOR 한 뒤 f 를 적용한다.
  2. 짜내기 단계(squeezing) - 입력을 다 넣으면 상태의 앞 r 비트를 출력으로 꺼내고 f 를 적용하기를 원하는 길이가 될 때까지 되풀이한다.

용량 c 는 출력으로 나가지 않으므로 공격자가 내부 상태 전체를 볼 수 없다. 보안 수준은 c 로 정해지며, c 를 키우고 r 을 줄이면 안전성은 높아지고 속도는 느려진다.[2] SHA-2 에서 문제가 되는 길이 확장 공격(length-extension attack)이 SHA-3 에는 통하지 않는 것도 내부 상태 일부가 출력에 드러나지 않기 때문이다.

SHA-3 는 입력 길이에 상한이 없다. FIPS 202 는 SHA-3 함수의 입력인 메시지를 "임의 길이의 비트열"로 정의한다.[1] 반면 SHA-2 는 메시지 끝에 길이를 고정 비트로 덧붙이는 패딩 때문에 상한이 있다. FIPS 180-4 에 따르면 SHA-1·SHA-224·SHA-256 의 입력은 264 비트 미만, SHA-384·SHA-512 의 입력은 2128 비트 미만이다.[3] 따라서 "SHA-3 의 입력 크기는 2128-1 로 제한된다"는 SHA-512 의 제한을 SHA-3 에 잘못 옮긴 말이다.

해시 밖의 쓰임

편집 원본 편집

스펀지 함수는 출력 길이가 고정된 해시 함수와 입력 길이가 고정된 스트림 암호를 일반화한 것이다. Keccak 설계자들은 스펀지 구조와 그 짝인 듀플렉스(duplex) 구조로 해싱, 재시드 가능한 의사난수 생성, 키 유도, 암호화(스트림 암호), 메시지 인증 코드, 인증 암호화까지 대칭 암호 기능을 폭넓게 구현할 수 있다고 설명한다.[2] NIST 도 SHA-3 를 전자서명, 키 유도, 의사난수 생성 같은 응용의 구성 요소로 든다.[1]

SHA-2 와 구별하기

편집 원본 편집
구분 SHA-2 SHA-3
표준 FIPS 180-4 FIPS 202
구조 머클-담고르 구조(압축 함수 반복) 스펀지 구조(Keccak-p 순열)
입력 길이 264 비트 미만(SHA-256), 2128 비트 미만(SHA-512) 제한 없음
출력 224·256·384·512비트 등 고정 해시 함수는 고정, SHAKE 는 원하는 길이
길이 확장 공격 취약(HMAC 으로 보완) 해당 없음
관계 현재도 승인된 표준 SHA-2 를 보완하는 대안
  1. ↑ 1.0 1.1 1.2 1.3 1.4 「FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions」, NIST, 2015, https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf, 확인일: 2026-11-05.
  2. ↑ 2.0 2.1 2.2 「Cryptographic sponge functions」, Keccak Team(Bertoni·Daemen·Peeters·Van Assche), https://keccak.team/sponge_duplex.html, 확인일: 2026-11-05.
  3. ↑ 「FIPS 180-4: Secure Hash Standard (SHS)」, NIST, 2015, https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf, 확인일: 2026-11-05.