맨위로가기

SHA-2

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

SHA-2는 SHA-1의 취약점을 보완하기 위해 개발된 안전한 해시 함수로, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256의 6가지 해시 함수로 구성된다. 2001년 미국 국가안보국(NSA)에 의해 FIPS PUB 180-2 초안으로 발표되었으며, 2011년 NIST는 연방 정부 사용에 SHA-2를 권고했다. SHA-2는 다양한 보안 응용 프로그램 및 프로토콜에 사용되며, 대한민국에서도 공인인증서, 전자정부 서비스 등에서 활용된다. SHA-2는 길이 확장 공격에 취약하며, 충돌 공격 및 전상 공격에 대한 연구가 진행되고 있다.

더 읽어볼만한 페이지

  • 체크섬 알고리즘 - MD5
    MD5는 로널드 리베스트 교수가 개발한 128비트 해시 값 생성 암호화 해시 함수이나, 보안 취약점으로 인해 현재는 보안이 중요한 분야에서는 사용이 중단되었다.
  • 체크섬 알고리즘 - 범용 상품 부호
    범용 상품 부호(UPC)는 소매점에서 상품을 식별하기 위해 상품 포장에 인쇄되는 널리 사용되는 바코드의 일종으로, 12자리 숫자로 구성된 UPC-A를 포함한 다양한 변형이 존재한다.
  • 암호화 해시 함수 - RIPEMD
    RIPEMD는 MD4를 기반으로 1992년 설계된 암호화 해시 함수로, 보안 취약점 보완을 위해 RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320 등의 변형이 개발되었으며, 특히 RIPEMD-160은 160비트 해시 값을 생성하고 다양한 라이브러리에서 지원되지만 보안성 우려가 제기되고 있다.
  • 암호화 해시 함수 - MD5
    MD5는 로널드 리베스트 교수가 개발한 128비트 해시 값 생성 암호화 해시 함수이나, 보안 취약점으로 인해 현재는 보안이 중요한 분야에서는 사용이 중단되었다.
SHA-2
SHA-2
개념
관련 개념해시 함수
SHA
DSA
주요 표준SHA-0
SHA-1
SHA-2
SHA-3
일반 정보
이름SHA-2
설계자미국 국가안전보장국
발표일2001년
시리즈(SHA-0)
SHA-1
SHA-2
SHA-3
인증FIPS PUB 180-4
CRYPTREC
NESSIE
세부 정보
다이제스트 크기224, 256, 384 또는 512 비트
구조메르클-담고르 구조
라운드 수64 또는 80
암호 분석
설명2011년 공격으로 SHA-512의 80라운드 중 57라운드, SHA-256의 64라운드 중 52라운드에서 원상 공격이 발생했다. 유사 충돌 공격에서는 SHA-256의 46라운드까지 가능하다.
추가 설명SHA-256 및 SHA-512는 길이 확장 공격에 취약하다. 상태의 숨겨진 부분을 추측하면 SHA-224 및 SHA-384에 대한 길이 확장 공격은 각각 확률 2−(256−224) = 2−32 > 2−224 및 2−(512−384) = 2−128 > 2−384로 성공한다.
기타

2. 역사적 배경

    Ch(E,F,G) = (E AND F) XOR (NOT E AND G)
    Ma(A,B,C) = (A AND B) XOR (A AND C) XOR (B AND C)
    Σ0(A) = (A를 오른쪽으로 2비트 회전) XOR (A를 오른쪽으로 13비트 회전) XOR (A를 오른쪽으로 22비트 회전)
    Σ1(E) = (E를 오른쪽으로 6비트 회전) XOR (E를 오른쪽으로 11비트 회전) XOR (E를 오른쪽으로 25비트 회전)
비트 회전 상수는 SHA-512에서 다르며, 위 값은 SHA-256 기준이다.
빨간색 덧셈 기호는 모듈러 덧셈(SHA-256은 232, SHA-512는 264)을 의미한다.||||||오른쪽]]

SHA-2 해시 함수 집합은 이전 표준인 SHA-1의 보안성에 대한 우려가 커지면서 개발되었다. 2004년 MD5와 SHA-0의 강력한 충돌 저항성이 깨졌고,[54] 2005년에는 SHA-1의 실질적인 취약점이 발표되었다.[55] 이에 따라 더 안전한 해시 함수 표준의 필요성이 제기되었다.

NIST는 2001년 FIPS PUB 180-2 초안을 통해 SHA-256, SHA-384, SHA-512를 처음 공개했다. 공개 검토와 의견 수렴을 거쳐 2002년 8월, FIPS PUB 180-2는 1995년 제정된 FIPS PUB 180-1을 대체하는 새로운 안전한 해시 표준(Secure Hash Standard, SHS)으로 공식 채택되었다. 이 표준에는 기존 SHA-1 알고리즘도 포함되었으나, SHA-2 계열과 일관된 기술 표기법으로 업데이트되었다.[4][60]

이후 SHA-2 표준은 다음과 같이 개정 및 확장되었다.


  • 2004년 2월 (FIPS PUB 180-2 변경 공지): 두 개의 키를 사용하는 트리플 DES의 키 길이에 맞춰 설계된 SHA-224가 추가되었다.[5][61]
  • 2008년 10월 (FIPS PUB 180-3): SHA-224가 표준에 공식 통합되었다. 주된 변경 사항은 해시 알고리즘 관련 보안 정보와 사용 권장 사항을 별도의 특별 간행물(Special Publications 800-107, 800-57)로 이전한 것이었다.[6][7][8][62][63][64] 상세 테스트 데이터와 예시 다이제스트도 별도 문서로 분리되었다.[9][65]
  • 2012년 3월 (FIPS PUB 180-4): SHA-512의 잘린 버전인 SHA-512/224와 SHA-512/256이 추가되었다. 또한, 입력 데이터 패딩을 반드시 해시 계산 전에 수행해야 한다는 제한이 완화되어, 실시간 데이터 스트림 처리 등이 용이해졌다. 마지막 데이터 블록의 패딩은 여전히 해시 출력 전에 필요하다.[11][67]


NIST는 보안 요구 수준도 강화했다. 2011년 1월 발표된 SP800-131A는 미국 연방 정부 사용 기준에서 최소 보안 수준을 기존 80비트(SHA-1)에서 2014년부터 112비트(SHA-224)로 상향 조정하도록 명시했다.[10][66] 2012년에는 암호 키 관리 지침(SP800-57)과 해시 함수 사용 권장 사항(SP800-107) 개정을 통해, 112비트 미만 보안 강도의 해시 함수를 이용한 디지털 서명 생성을 2013년 이후 금지했다.[8][7][64][63]

SHA-1의 취약점 발견 이후, NIST는 새로운 해시 함수 표준 개발을 위해 2007년부터 5년간 NIST 해시 함수 경쟁을 진행했다.[56][57] 이 경쟁을 통해 2012년 SHA-3가 선정되었고,[12][68] 3년간의 검증을 거쳐 2015년 8월 최종 제정되었다.[58] SHA-3는 SHA-2와 구조적으로 다른 알고리즘이다.

SHA-1에 대한 공격 기법이 발전했음에도, 2014년 기준으로 이러한 공격을 SHA-2로 직접 확장하는 것은 성공하지 못했다. 알려진 최고의 원상복구 공격은 SHA-256의 52라운드, SHA-512의 57라운드까지 가능하며, 충돌 공격은 SHA-256의 46라운드까지 가능하다.[81][80] SHA-2는 일본의 CRYPTREC과 유럽의 NESSIE 프로젝트에서 권장 암호 목록에 포함되어 있다.[59]

SHA-2는 미국 특허 의 보호를 받지만, 미국 정부는 이 특허를 로열티 프리 라이선스로 공개하였다.[53]

3. 주요 특징

SHA-2는 미국 국가안보국(NSA)이 설계하고 NIST가 미국 연방 정보 처리 표준(FIPS)으로 발표한 암호화 해시 함수들의 집합이다.[4] 2001년 FIPS PUB 180-2 초안으로 처음 발표되었고, 2002년 8월 SHA-1을 포함하는 안전한 해시 표준으로 공식 채택되었다.[4] SHA-2는 기존 SHA-1의 잠재적 취약점을 보완하고 더 높은 보안 수준을 제공하기 위해 개발되었다.

SHA-2는 출력 길이에 따라 다음과 같은 6가지 주요 변형으로 구성된다.


  • '''SHA-224''': SHA-256 기반, 224비트 출력 (2004년 추가)[5]
  • '''SHA-256''': 32비트 워드 기반, 256비트 출력
  • '''SHA-384''': SHA-512 기반, 384비트 출력
  • '''SHA-512''': 64비트 워드 기반, 512비트 출력
  • '''SHA-512/224''': SHA-512 기반, 224비트 출력 (2012년 추가)[11]
  • '''SHA-512/256''': SHA-512 기반, 256비트 출력 (2012년 추가)[11]


SHA-256과 SHA-512는 각각 32비트와 64비트 워드(word) 단위로 연산을 수행하며, 내부 구조는 유사하지만 사용되는 파라미터(시프트 값, 덧셈 상수, 라운드 수 등)에서 차이가 있다. SHA-224와 SHA-384는 각각 SHA-256과 SHA-512의 계산 결과 일부를 잘라내고 초기 해시 값을 다르게 설정한 버전이다. SHA-512/224와 SHA-512/256 역시 SHA-512의 결과를 잘라낸 버전이지만, 초기 해시 값을 생성하는 방식이 다르다.[11]

SHA-2 계열 함수들은 모두 머클-담가드 구조를 기반으로 설계되었다. 이는 입력 메시지를 일정한 크기의 블록으로 나누어 순차적으로 처리하고, 각 단계의 결과를 다음 단계의 입력으로 사용하는 방식이다.

SHA-2는 SHA-1에 비해 더 긴 해시 출력과 복잡한 내부 연산을 통해 충돌 공격 및 원상 공격에 대해 훨씬 높은 보안성을 제공한다. 예를 들어, SHA-256은 128비트, SHA-512는 256비트의 충돌 저항성 보안 수준을 목표로 한다. 하지만 길이 확장 공격에는 여전히 취약점을 가질 수 있다 (단, SHA-384, SHA-512/224, SHA-512/256은 출력값을 잘라내기 때문에 어느 정도 방어가 가능하다).

SHA-2 알고리즘은 미국 특허(US 6829355)로 보호되지만, 미국 정부는 이를 로열티 프리 라이선스로 공개하여 누구나 자유롭게 사용할 수 있도록 하였다.[53]

해시 함수의 중요한 특징 중 하나는 입력값의 작은 변화가 출력값에 큰 변화를 일으키는 애벌랜치 효과이다. 예를 들어, 문장 끝에 마침표 하나만 추가해도 SHA-224 해시 값의 비트 중 절반 가량이 달라진다.

  • `SHA224("빠른 갈색 여우는 게으른 개를 뛰어넘는다")` = `0x730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525`
  • `SHA224("빠른 갈색 여우는 게으른 개를 뛰어넘는다.")` = `0x619cba8e8e05826e9b8c519c0a5c68f4fb653e8a3d8aa04bb2c8cd4c`


입력으로 빈 문자열(길이가 0인 텍스트)이 주어졌을 때 각 SHA-2 변형의 해시 값은 다음과 같다.

  • `SHA224("")` = `0xd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f`
  • `SHA256("")` = `0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`
  • `SHA384("")` = `0x38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b`
  • `SHA512("")` = `0xcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e`
  • `SHA512/224("")` = `0x6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4`
  • `SHA512/256("")` = `0xc672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a`


다음 표는 SHA-2 계열 함수들의 주요 특징을 다른 해시 함수들과 비교하여 보여준다.

암호화 해시 함수 비교
알고리즘 및 변형출력 크기
(비트)
블록 크기
(비트)
충돌 공격에 대한 보안
(비트)
길이 확장 공격에 대한 보안
(비트)
최초 발표
MD5 (참고용)128512≤ 18 (충돌 발견)[42]01992
SHA-0 (참고용)160512< 34 (충돌 발견)01993
SHA-1 (참고용)160512< 63 (충돌 발견)[43]01995
SHA-2SHA-224224512112322004
SHA-25625651212802001
SHA-38438410241921282001
SHA-51251210242560[44]2001
SHA-512/22422410241122882012
SHA-512/25625610241282562012
SHA-3 (참고용)SHA3-224224~512576~1152112~256높음2015
SHAKE128가변1088~1344가변높음2015


3. 1. 기술적 측면

SHA-2는 미국 국가안보국(NSA)이 설계하고 미국 국립표준기술연구소(NIST)가 미국 연방 정보 처리 표준(FIPS)으로 발표한 암호화 해시 함수들의 집합이다.[4] 이는 이전에 널리 사용되던 SHA-1의 보안 취약점이 발견됨에 따라 이를 대체하기 위해 개발된 후속 표준이다. SHA-2는 SHA-1보다 더 복잡한 내부 구조와 긴 해시 출력 길이를 통해 향상된 보안성을 제공하는 것을 목표로 한다.

SHA-2는 입력 데이터를 처리하여 고유한 해시 값을 생성하며, 이 과정에서 다양한 비트 연산과 모듈러 덧셈 등이 사용된다. SHA-2 계열에는 출력 길이에 따라 SHA-256, SHA-512 등 여러 변형이 포함되어 있으며[5][67], 이들은 기본적인 설계 원리를 공유하면서도 세부적인 파라미터에서 차이를 보인다.

SHA-2는 디지털 서명, 메시지 인증 코드, TLS/SSL 등 다양한 암호학적 응용 분야에서 데이터 무결성 및 인증을 위해 핵심적인 역할을 수행한다. NIST는 보안 강화를 위해 기존 SHA-1 사용을 점진적으로 중단하고 SHA-2 계열의 사용을 강력히 권고해왔다.[10][8][7] 한편, NIST는 SHA-2와는 다른 구조를 가진 SHA-3를 차세대 표준으로 선정하여[12], 해시 함수 표준의 다양성과 장기적인 보안성을 확보하고자 하였다.

3. 1. 1. 구성 요소

SHA-2 해시 함수는 내부적으로 여러 구성 요소를 사용하여 입력 메시지를 처리하고 해시 값을 생성한다. 주요 구성 요소는 다음과 같다.

SHA-2 계열 해시 함수의 한 반복 과정. 파란색 상자는 비선형 함수(Ch, Ma)와 비트 회전/시프트 함수(Σ0, Σ1)를 나타낸다. 빨간색 \color{red}\boxplus는 모듈러 덧셈이다.

  • 메시지 스케줄 (Message Schedule): 입력 메시지는 특정 크기(SHA-256의 경우 512비트, SHA-512의 경우 1024비트)의 블록으로 나뉘어 처리된다. 각 블록은 메시지 스케줄을 통해 확장되어 라운드 연산에 사용될 워드 배열(`w[0..63]` 또는 `w[0..79]`)을 생성한다. 예를 들어 SHA-256에서는 512비트 블록(16개의 32비트 워드)을 기반으로 총 64개의 32비트 워드(`w[0..63]`)를 만든다. 처음 16개 워드는 메시지 블록에서 직접 가져오고, 나머지 워드들은 이전 워드들의 비트 연산(회전, 시프트, XOR)을 통해 계산된다. SHA-512는 64비트 워드를 사용하며 80개의 워드로 확장된다.
  • SHA-256 확장 함수 예시:
  • s_0 = (w_{i-15} \ggg 7) \oplus (w_{i-15} \ggg 18) \oplus (w_{i-15} \gg 3)
  • s_1 = (w_{i-2} \ggg 17) \oplus (w_{i-2} \ggg 19) \oplus (w_{i-2} \gg 10)
  • w_i = w_{i-16} + s_0 + w_{i-7} + s_1
  • SHA-512 확장 함수 예시:
  • s_0 = (w_{i-15} \ggg 1) \oplus (w_{i-15} \ggg 8) \oplus (w_{i-15} \gg 7)
  • s_1 = (w_{i-2} \ggg 19) \oplus (w_{i-2} \ggg 61) \oplus (w_{i-2} \gg 6)
  • w_i = w_{i-16} + s_0 + w_{i-7} + s_1

  • 작업 변수 (Working Variables): 8개의 32비트(SHA-256) 또는 64비트(SHA-512) 작업 변수(`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`)가 사용된다. 이 변수들은 각 메시지 블록 처리 시작 시 이전 블록의 해시 값 또는 초기 해시 값(`h0`~`h7`)으로 초기화된다. 압축 함수의 각 라운드마다 이 변수들의 값이 업데이트되며, 최종적으로 이 변수들의 값이 해당 블록의 해시 계산 결과에 반영된다.

  • 라운드 상수 (Round Constants): 각 라운드(SHA-256은 64라운드, SHA-512는 80라운드)마다 고유한 상수 값(`k[i]`)이 사용된다. 이 상수들은 혼란(confusion) 속성을 증가시켜 암호학적 강도를 높이는 데 기여한다. 이 값들은 소수의 제곱근(SHA-256의 초기 해시 값 `h0`~`h7` 생성 시) 또는 세제곱근(SHA-256 및 SHA-512의 라운드 상수 `k` 생성 시)의 소수 부분에서 파생된다. 예를 들어, SHA-256은 처음 64개 소수(2~311)의 세제곱근 소수 부분의 처음 32비트를 라운드 상수로 사용하고, SHA-512는 처음 80개 소수(2~409)의 세제곱근 소수 부분의 처음 64비트를 사용한다.

  • 압축 함수 (Compression Function): SHA-2의 핵심 로직으로, 각 라운드에서 작업 변수, 메시지 스케줄 워드(`w[i]`), 라운드 상수(`k[i]`)를 입력받아 작업 변수를 업데이트한다. 압축 함수는 비선형 함수(Ch, Ma)와 비트 회전 및 시프트 연산(Σ0, Σ1) 등을 포함한다.
  • SHA-256의 주요 연산:
  • \operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G) (선택 함수)
  • \operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C) (다수결 함수)
  • \Sigma_0(A) = (A \ggg 2) \oplus (A \ggg 13) \oplus (A \ggg 22)
  • \Sigma_1(E) = (E \ggg 6) \oplus (E \ggg 11) \oplus (E \ggg 25)
  • T_1 = h + \Sigma_1(E) + \operatorname{Ch}(E,F,G) + k_i + w_i
  • T_2 = \Sigma_0(A) + \operatorname{Ma}(A,B,C)
  • SHA-512는 유사한 구조를 가지지만, 64비트 연산을 사용하고 회전/시프트 값이 다르다.
  • \Sigma_0(A) = (A \ggg 28) \oplus (A \ggg 34) \oplus (A \ggg 39)
  • \Sigma_1(E) = (E \ggg 14) \oplus (E \ggg 18) \oplus (E \ggg 41)


각 메시지 블록에 대한 압축 함수 연산이 끝나면, 계산된 값(업데이트된 `a`~`h`)이 이전 해시 값(`h0`~`h7`)에 더해져(모듈러 덧셈) 새로운 중간 해시 값이 된다. 모든 메시지 블록 처리가 완료되면 최종 해시 값이 생성된다.

3. 1. 2. 작동 원리

    \operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)
    \operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)
    \Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)
    \Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)
비트 회전 상수는 SHA-512에서는 다르며, 위 값은 SHA-256 기준이다.
빨간색 \color{red}\boxplus는 모듈러 덧셈 (SHA-256은 232, SHA-512는 264)을 의미한다.||upright=1.8||오른쪽]]

SHA-2 알고리즘은 입력 메시지를 처리하여 고정된 크기의 해시 값을 출력한다. 전체 과정은 크게 전처리, 메시지 처리, 최종 해시 값 생성 단계로 나눌 수 있다. 다음은 SHA-256을 기준으로 한 작동 원리 의사 코드이다.[60][67]

''참고 1: 모든 변수는 32비트 부호 없는 정수이며, 덧셈 연산(+)은 232를 법으로 하는 모듈러 덧셈이다.''

''참고 2: 각 라운드(총 64 라운드, i=0부터 63까지)는 해당 라운드의 상수 `k[i]`와 메시지 스케줄 `w[i]`를 사용한다.''

''참고 3: 압축 함수는 8개의 32비트 작업 변수(a, b, c, d, e, f, g, h)를 사용한다.''

''참고 4: 상수 표현 및 메시지 블록 데이터 처리 시 빅 엔디언 방식을 사용한다. (예: 패딩 후 "abc" 메시지의 첫 워드는 0x61626380)''
1. 초기 해시 값 및 라운드 상수 초기화

  • 초기 해시 값 (h0~h7): 처음 8개 소수(2, 3, 5, 7, 11, 13, 17, 19)의 제곱근 소수 부분 중 앞 32비트를 사용한다.

```

h0 := 0x6a09e667

h1 := 0xbb67ae85

h2 := 0x3c6ef372

h3 := 0xa54ff53a

h4 := 0x510e527f

h5 := 0x9b05688c

h6 := 0x1f83d9ab

h7 := 0x5be0cd19

```

  • 라운드 상수 (k[0..63]): 처음 64개 소수(2~311)의 세제곱근 소수 부분 중 앞 32비트를 사용한다.

```

k[0..63] := [

0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,

0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,

0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,

0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,

0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,

0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,

0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,

0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

]

```
2. 전처리 (패딩)입력 메시지(길이 L 비트)를 다음 규칙에 따라 패딩하여 전체 길이를 512비트의 배수로 만든다.

  • 메시지 끝에 '1' 비트 하나를 추가한다.
  • 메시지 길이가 512로 나누어떨어질 때 448이 되도록 (즉, `(L + 1 + K) mod 512 = 448`이 되도록) K개의 '0' 비트를 추가한다. K는 0 이상의 가장 작은 정수이다.
  • 마지막 64비트에 원본 메시지의 길이 L을 빅 엔디언 방식의 64비트 정수로 표현하여 추가한다.


결과적으로 패딩된 메시지는 `<원본 메시지 (L 비트)>1<0 비트 (K개)><길이 L (64비트)>` 형태가 되며, 전체 길이는 512비트의 배수가 된다.
3. 메시지 처리 (512비트 블록 단위)패딩된 메시지를 512비트 크기의 블록(청크)으로 나눈다. 각 블록에 대해 다음 과정을 반복한다.

  • 메시지 스케줄 생성 (w[0..63]): 각 블록을 처리하기 위해 64개의 32비트 워드로 구성된 메시지 스케줄 배열 `w`를 생성한다.
  • 블록의 512비트(16개의 32비트 워드)를 `w[0]`부터 `w[15]`까지 복사한다.
  • 나머지 `w[16]`부터 `w[63]`까지는 다음 공식을 사용하여 확장한다 (i는 16부터 63까지):

```

s0 := (w[i-15] 오른쪽 회전 7) xor (w[i-15] 오른쪽 회전 18) xor (w[i-15] 오른쪽 시프트 3)

s1 := (w[i-2] 오른쪽 회전 17) xor (w[i-2] 오른쪽 회전 19) xor (w[i-2] 오른쪽 시프트 10)

w[i] := w[i-16] + s0 + w[i-7] + s1

```

''(여기서 `+`는 232 모듈러 덧셈, `xor`는 비트 XOR 연산, 오른쪽 회전(rotate right)과 오른쪽 시프트(shift right)는 비트 연산이다.)''

  • 작업 변수 초기화: 현재 블록을 처리하기 전에, 8개의 작업 변수(a~h)를 이전 블록 처리까지의 해시 값(또는 첫 블록의 경우 초기 해시 값 h0~h7)으로 설정한다.

```

a := h0

b := h1

c := h2

d := h3

e := h4

f := h5

g := h6

h := h7

```

  • 압축 함수 메인 루프 (64 라운드): i를 0부터 63까지 반복하며 다음 계산을 수행한다.

```

S1 := (e 오른쪽 회전 6) xor (e 오른쪽 회전 11) xor (e 오른쪽 회전 25)

ch := (e and f) xor ((not e) and g) // 선택 함수(Choice function)

temp1 := h + S1 + ch + k[i] + w[i]

S0 := (a 오른쪽 회전 2) xor (a 오른쪽 회전 13) xor (a 오른쪽 회전 22)

maj := (a and b) xor (a and c) xor (b and c) // 다수결 함수(Majority function)

temp2 := S0 + maj

h := g

g := f

f := e

e := d + temp1

d := c

c := b

b := a

a := temp1 + temp2

```

''(여기서 `and`는 비트 AND 연산, `not`은 비트 NOT 연산이다. `ch`와 `maj` 함수는 SHA-1에서 사용된 것과 유사한 방법으로 최적화할 수 있다.)''

  • 중간 해시 값 업데이트: 64 라운드가 끝나면, 계산된 작업 변수(a~h) 값을 현재까지의 해시 값(h0~h7)에 더한다.

```

h0 := h0 + a

h1 := h1 + b

h2 := h2 + c

h3 := h3 + d

h4 := h4 + e

h5 := h5 + f

h6 := h6 + g

h7 := h7 + h

```

''이 결과가 다음 블록 처리 시 작업 변수 초기화에 사용될 해시 값이 된다.''
4. 최종 해시 값 생성모든 메시지 블록 처리가 완료된 후, 최종 해시 값은 8개의 32비트 워드 h0부터 h7을 순서대로 이어 붙여 256비트 해시 값을 얻는다. (빅 엔디언 방식)

```

digest = h0 || h1 || h2 || h3 || h4 || h5 || h6 || h7

```
SHA-2 변형들의 차이점

  • SHA-224: SHA-256과 거의 동일하지만, 다른 초기 해시 값(h0~h7)을 사용하고, 최종 출력 시 h7을 제외한 h0~h6을 이어 붙여 224비트 해시 값을 생성한다.[61]
  • ''SHA-224 초기 해시 값 (9번째~16번째 소수(23~53) 제곱근 소수 부분의 두 번째 32비트 사용):''

```

h[0..7] := [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4]

```

  • SHA-512: SHA-256과 구조는 유사하지만, 다음과 같은 주요 차이점이 있다.
  • 처리 단위: 1024비트 블록 사용.
  • 워드 크기: 64비트 워드 사용 (모든 변수, 상수, 연산).
  • 라운드 수: 80 라운드.
  • 메시지 스케줄: 80개의 64비트 워드 `w[0..79]` 사용 (확장 로직도 다름).
  • 초기 해시 값 및 라운드 상수: 64비트 값 사용 (다른 소수 기반).
  • 패딩 시 길이 필드: 128비트 사용.
  • 회전 및 시프트 값: 다른 상수 사용.
  • ''SHA-512 초기 해시 값 (처음 8개 소수 제곱근 소수 부분의 64비트):''

```

h[0..7] := [0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179]

```

  • ''SHA-512 라운드 상수 (처음 80개 소수(2~409) 세제곱근 소수 부분의 64비트):''

```

k[0..79] := [ 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538,

0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe,

0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235,

0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,

0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab,

0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725,

0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed,

0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,

0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218,

0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53,

0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373,

0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,

0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c,

0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6,

0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc,

0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817]

```

  • ''SHA-512의 Σ 및 σ 함수 (압축 함수 및 메시지 스케줄 확장 시 사용):''

```

S0 := (a 오른쪽 회전 28) xor (a 오른쪽 회전 34) xor (a 오른쪽 회전 39)

S1 := (e 오른쪽 회전 14) xor (e 오른쪽 회전 18) xor (e 오른쪽 회전 41)

s0 := (w[i-15] 오른쪽 회전 1) xor (w[i-15] 오른쪽 회전 8) xor (w[i-15] 오른쪽 시프트 7)

s1 := (w[i-2] 오른쪽 회전 19) xor (w[i-2] 오른쪽 회전 61) xor (w[i-2] 오른쪽 시프트 6)

```

  • SHA-384: SHA-512와 거의 동일하지만, 다른 초기 해시 값(h0~h7)을 사용하고, 최종 출력 시 h6과 h7을 제외한 h0~h5를 이어 붙여 384비트 해시 값을 생성한다.
  • ''SHA-384 초기 해시 값 (9번째~16번째 소수 제곱근 소수 부분의 64비트 사용):''

```

h[0..7] := [0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4]

```

  • SHA-512/t: SHA-512의 잘린(truncated) 버전이다. t는 출력 비트 수를 의미한다 (예: SHA-512/256).[67]
  • 초기 해시 값(h0~h7)은 "SHA-512/t IV generation function"이라는 특정 절차를 통해 생성된다. 이 함수는 ASCII 문자열 "SHA-512/t" (t는 10진수 값)에 대해 초기 값(h0~h7)을 `0xa5a5a5a5a5a5a5a5`와 XOR한 후 수정된 SHA-512를 적용하여 계산한다.
  • 최종 출력은 SHA-512의 결과 해시 값(h0~h7)을 앞에서부터 t 비트만큼 잘라서 얻는다.
  • t=384인 경우는 허용되지 않으며, 대신 SHA-384를 사용해야 한다.
  • t=224와 t=256은 FIPS PUB 180-4에서 공식적으로 승인되었다.
  • ''SHA-512/224 초기 해시 값:''

```

h[0..7] := [0x8c3d37c819544da2, 0x73e1996689dcd4d6, 0x1dfab7ae32ff9c82, 0x679dd514582f9fcf, 0x0f6d2b697bd44da8, 0x77e36f7304C48942, 0x3f9d85a86a1d36C8, 0x1112e6ad91d692a1]

```

  • ''SHA-512/256 초기 해시 값:''

```

h[0..7] := [0x22312194fc2bf72c, 0x9f555fa3c84c64c2, 0x2393b86b6f53b151, 0x963877195940eabd, 0x96283ee2a88effe3, 0xbe5e1e2553863992, 0x2b0199fc2c85b8aa, 0x0eb72ddC81c52ca2]

3. 2. 사회문화적 의의

SHA-2는 현대 디지털 사회의 정보 보안을 지탱하는 핵심적인 암호화 해시 함수이다. 기존에 널리 사용되던 SHA-1 알고리즘에서 2017년 실제 충돌(collision)이 발견되는 등[75] 보안 취약점이 부각되면서, 더욱 안전한 해시 함수로의 전환이 중요한 과제로 떠올랐다.

이에 따라 NIST는 미합중국 연방 정부 기관들에게 전자 서명 등 충돌 저항성이 중요한 응용 분야에서 SHA-1 사용을 중단하고 2010년 이후부터는 SHA-2 계열 해시 함수를 사용하도록 권고했다.[20][73] 이는 정부 차원에서 보안 표준을 강화하려는 중요한 조치였다. 초기에는 마이크로소프트 윈도우 XP의 서비스 팩 2 이전 버전 등 일부 시스템의 지원 부족[22][74]과 SHA-1의 실제 충돌 사례가 보고되지 않았다는 점 때문에 SHA-2로의 전환이 더디게 진행되기도 했다.

그러나 SHA-1의 실제 충돌이 증명되고[75] 보안의 중요성에 대한 인식이 높아지면서, 주요 기술 기업들이 적극적으로 나서 SHA-2의 도입은 가속화되었다. 구글 크롬[23][24][25], 마이크로소프트인터넷 익스플로러엣지[26], 파이어폭스[27] 등 주요 웹 브라우저들은 보안 강화를 위해 SHA-1 기반의 TLS 인증서 지원을 중단하고 SHA-2 기반 인증서 사용을 강제하는 정책을 시행했다.

오늘날 SHA-2는 다양한 분야에서 핵심적인 보안 기능을 수행하고 있다. TLS/SSL, PGP, SSH, S/MIME, IPsec과 같은 기본적인 인터넷 보안 프로토콜[13]뿐만 아니라, 데비안 리눅스의 소프트웨어 패키지 인증[69], DKIM 이메일 메시지 서명 표준[16], DNSSEC[16][71] 등 광범위한 영역에서 데이터 무결성 검증과 인증을 위해 사용된다. 유닉스리눅스 시스템에서도 안전한 비밀번호 저장을 위해 SHA-256, SHA-512 사용이 확대되고 있다.[17][72]

특히 암호화폐 분야에서도 SHA-256은 비트코인을 비롯한 여러 암호화폐의 거래 검증(작업 증명[18] 또는 지분 증명[19])에 핵심적인 역할을 수행하며 블록체인 기술의 기반을 이루고 있다. 또한 르완다 국제형사재판소에서는 기록물의 진본성을 보장하기 위해 SHA-512를 사용하는 등[15][70], 중요한 데이터의 위변조 방지에도 기여하고 있다.

이처럼 SHA-2는 인터넷 통신, 소프트웨어 배포, 금융 거래, 데이터 보존 등 디지털 사회의 다양한 영역에서 신뢰와 안전을 보장하는 필수적인 기술로 자리 잡았으며, 안전한 디지털 환경을 구축하는 데 중요한 기여를 하고 있다.

4. 한국 내 활용

SHA-2 해시 함수는 TLS/SSL, OpenPGP, SSH, S/MIME, IPsec과 같이 널리 사용되는 보안 프로토콜 및 애플리케이션에서 데이터 무결성 검증과 인증 목적으로 활용된다.[69] 또한 비트코인과 같은 암호화폐 시스템에서도 중요한 역할을 수행한다. 구체적으로 SHA-256은 데비안 GNU/리눅스의 소프트웨어 패키지 인증[69] 및 DKIM 메시지 서명 표준으로 채택되었으며, SHA-512는 르완다 국제형사재판소의 비디오 아카이브 인증에 사용된 사례가 있다.[70] DNSSEC에서도 SHA-256 및 SHA-512의 사용이 제안되었다.[71] 유닉스리눅스 배포판에서도 보안 강화를 위해 기존의 해시 함수 대신 SHA-256 또는 SHA-512를 사용하는 추세이다.[72]

과거 미국에서는 정부 기관에서 기밀 정보를 다룰 때 SHA-1과 SHA-2를 법적으로 요구되는 해시 알고리즘으로 지정했었다. 그러나 SHA-1의 보안 취약성이 드러나면서, NIST는 2010년 이후 연방 기관에서 전자 서명, 타임스탬프 등 충돌 저항성이 중요한 애플리케이션에는 SHA-1 사용을 중단하고 SHA-2 계열 알고리즘을 사용하도록 강력히 권고했다.[73] 이러한 미국의 정책 변화는 국제적인 표준 및 기술 동향에도 영향을 미쳤다.

SHA-2는 보안성 측면에서 SHA-1보다 우수하지만, 초기에는 마이크로소프트 윈도우 XP 서비스팩 2 이전 버전에서의 미지원[74] 등의 문제와 SHA-1에 대한 실제적인 충돌 공격 사례가 발견되지 않았다는 점 때문에 SHA-1만큼 빠르게 보급되지는 못했다. 하지만 2017년 2월, 구글과 네덜란드 연구 기관 CWI가 공동으로 SHA-1 해시 충돌을 실제로 시연하는 데 성공하면서[75] SHA-1의 보안성에 대한 우려가 현실화되었다. 이 사건 이후, 윈도우 XP 지원 종료 등과 맞물려 공공 기관 및 민간 웹사이트에서 SHA-1 사용을 중단하고 SHA-2 기반의 보안 시스템으로 전환하는 움직임이 본격화되었다. 이러한 국제적인 기술 표준의 변화는 한국의 다양한 ICT 환경에도 영향을 미쳐, 보안 강화를 위한 SHA-2 도입 및 전환이 이루어지는 배경이 되었다.

5. 공격 및 분석

해시 길이가 ''L'' 비트인 해시 함수에서, 특정 메시지 다이제스트에 해당하는 원본 메시지를 찾는 역상 공격(preimage attack)은 무차별 대입 공격으로 약 2''L''번의 연산이 필요하다. 같은 메시지 다이제스트를 생성하는 두 개의 서로 다른 메시지를 찾는 충돌 공격(collision attack)은 생일 공격을 이용하여 평균적으로 약 2''L''/2번의 연산으로 가능하다.

암호 저장과 같은 일부 응용 프로그램은 충돌 공격의 영향을 비교적 적게 받는다. 특정 계정의 암호를 알아내려면 역상 공격이 필요하며, 이는 해시값만으로는 쉽지 않다. 그러나 안전한 암호 해시라도 취약한 암호에 대한 무차별 대입 공격을 막을 수는 없다.

디지털 서명과 같은 경우에는 충돌 공격이 문제가 될 수 있다. 공격자는 내용이 다른 두 문서(하나는 정상, 다른 하나는 악의적)가 같은 해시값을 갖도록 조작한 뒤, 정상 문서에 서명을 받아 악의적인 문서의 서명으로 위조할 수 있다. 과거 MD5의 충돌 취약점을 이용해 위조된 SSL 인증서가 발급된 사례가 있다.[28]

SHA-3 경쟁 등으로 암호학적 해시 함수 분석에 대한 관심이 높아지면서 SHA-2 계열에 대한 여러 공격 방법이 연구되었다. 현재까지 알려진 공격 중 충돌 공격만이 이론적으로 실현 가능한 복잡도를 가지지만, 어떤 공격도 SHA-2 함수의 전체 라운드에 대해 성공하지는 못했다. FSE 2012에서는 소니 연구원들이 이중부분 그래프 공격(biclique attack)을 이용하여 SHA-256의 52라운드, SHA-512의 57라운드까지 의사 충돌 공격(pseudo-collision attack)을 확장할 수 있다고 발표했다.[29][76]

아래 표는 SHA-2의 축소된 라운드 버전에 대한 주요 공격 결과를 요약한 것이다.

알려진 SHA-2 공격 (라운드 축소 버전)
발표연도공격 방법공격 유형변형라운드 (공격/전체)복잡도
최대 24단계 SHA-2에 대한 새로운 충돌 공격[30][31][77]2008차분충돌SHA-25624/64215.5 (이론)
228.5 (실험)
SHA-51224/80222.5 (이론)
232.5 (실험)
단계 축소 SHA-2에 대한 전상[32][78]2009중간 충돌역상SHA-25642/642251.7
43/642254.9
SHA-51242/802502.3
46/802511.5
고급 중간 충돌 전상 공격[33][79]2010중간 충돌역상SHA-25642/642248.4
SHA-51242/802494.6
축소된 SHA-256에 대한 고차 차분 공격[34][80]2011차분의사 충돌 (Pseudo-collision)SHA-25646/642178 (이론)
246 (실험)
33/64246 (이론)
전상을 위한 이중부분 그래프: Skein-512 및 SHA-2 계열에 대한 공격[35][81]2011Biclique역상SHA-25645/642255.5
SHA-51250/802511.5
의사 역상 (Pseudo-preimage)SHA-25652/642255
SHA-51257/802511
지역 충돌 개선: 축소된 SHA-256에 대한 새로운 공격[36]2013차분 공격충돌SHA-25631/64265.5
의사 충돌 (Pseudo-collision)SHA-25638/64237
SHA-512에 대한 응용 프로그램이 있는 차분 충돌 검색의 분기 휴리스틱[37]2014휴리스틱 차분의사 충돌 (Pseudo-collision)SHA-51238/80240.5
SHA-512/224 및 SHA-512/256 분석[38]2016차분 공격충돌SHA-25628/64실용적
SHA-51227/80실용적
의사 충돌 (Pseudo-collision)SHA-51239/80실용적
SHA-2에 대한 충돌 공격의 새로운 기록[39]2023차분 공격충돌SHA-25631/64249.8
SHA-51231/802115.6
의사 충돌 (Pseudo-collision)SHA-25639/64실용적



또한, SHA-256과 SHA-512는 머클-담고르 구조를 기반으로 하기 때문에 길이 확장 공격에 취약하다.[44] 이는 해시값 H(메시지)와 메시지의 길이를 알면, 공격자가 원본 메시지 내용을 모르더라도 특정 확장 데이터(P)를 덧붙인 H(메시지 || P)를 계산할 수 있다는 것을 의미한다. 이 취약점은 메시지 인증 코드(MAC)와 같이 비밀 키와 메시지를 함께 해시하는 일부 응용 프로그램에서 문제가 될 수 있다. 반면, SHA-384, SHA-512/224, SHA-512/256은 초기값을 다르게 설정하고 출력값을 잘라내기 때문에 이러한 공격에 취약하지 않다.

6. 구현

다음은 SHA-2를 지원하는 암호화 라이브러리 목록이다.[40]


  • 보탄(Botan)
  • 바운시캐슬(Bouncy Castle)
  • 크립틀립(Cryptlib)
  • 크립토++(Crypto++)
  • 리브그크립트(Libgcrypt)
  • 엠베드 TLS(Mbed TLS)[48][49]
  • libsodium
  • 네틀(Nettle)
  • 리브레SSL(LibreSSL)
  • 오픈SSL(OpenSSL)
  • GNU TLS(GnuTLS)
  • 울프SSL(wolfSSL)


다음 프로세서 확장 기능을 통해 하드웨어 가속이 제공된다.

  • 인텔 SHA 확장 기능: 일부 인텔AMD x86 프로세서에서 사용 가능.
  • VIA PadLock
  • ARMv8 암호화 확장 기능[50]
  • IBM z/Architecture: 메시지 보안 지원 확장 기능 1(SHA-256) 및 2(SHA-512)의 일부로 2005년부터 사용 가능[51]
  • IBM Power ISA: 버전 2.07부터 지원.


모든 FIPS 승인 보안 기능의 구현은 NIST(National Institute of Standards and Technology)와 CSE(Communications Security Establishment)가 공동으로 운영하는 CMVP(Cryptographic Module Validation Program)를 통해 공식적으로 검증될 수 있다. 비공식 검증을 위해 NIST 사이트에서 테스트 벡터 생성 패키지를 다운로드할 수 있지만, 이는 특정 애플리케이션에 법적으로 요구되는 공식 CMVP 검증을 대체하지 않는다.

2013년 12월 기준으로, 1300개가 넘는 SHA-256 구현과 900개가 넘는 SHA-512 구현이 검증되었다. 이 중 5개만이 8의 배수가 아닌 비트 길이의 메시지를 처리하면서 두 가지 변형 모두를 지원한다.[40]

SHA-2 계열 해시 함수의 샘플 C 구현은 RFC 6234에서 찾아볼 수 있다.

7. 의사 코드

    \operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)
    \operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)
    \Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)
    \Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)
비트 회전은 SHA-512에 대해 다른 상수를 사용한다. 주어진 숫자는 SHA-256에 대한 것이다.
빨간색 \color{red}\boxplus는 SHA-256의 경우 232, SHA-512의 경우 264를 법으로 하는 덧셈이다.||||||오른쪽]]

SHA-256 알고리즘의 의사 코드는 다음과 같다. SHA-1과 비교하여 `w[16..63]` 단어의 비트 간 혼합이 크게 증가한 것을 주목할 수 있다.

''참고 1: 모든 변수는 32비트 부호 없는 정수이며, 덧셈은 232를 법으로 계산된다.''

''참고 2: 각 라운드마다 하나의 라운드 상수 k[i]와 메시지 스케줄 배열 w[i]의 한 항목이 있으며, 0 ≤ i ≤ 63이다.''

''참고 3: 압축 함수는 a부터 h까지 8개의 작업 변수를 사용한다.''

''참고 4: 이 의사 코드에서 상수를 표현할 때와 바이트에서 워드로 메시지 블록 데이터를 구문 분석할 때(예: 패딩 후 입력 메시지 "abc"의 첫 번째 워드는 0x61626380임)는 빅 엔디언 규칙을 사용한다.''

''해시 값 초기화:''

''(처음 8개의 소수 2...19의 제곱근의 *소수 부분*의 처음 32비트):''



h0 := 0x6a09e667

h1 := 0xbb67ae85

h2 := 0x3c6ef372

h3 := 0xa54ff53a

h4 := 0x510e527f

h5 := 0x9b05688c

h6 := 0x1f83d9ab

h7 := 0x5be0cd19



''라운드 상수 배열 초기화:''

''(처음 64개의 소수 2...311의 세제곱근의 ''소수 부분''의 처음 32비트):''



k[0..63] :=

0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,

0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,

0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,

0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,

0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,

0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,

0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,

0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2



''전처리 (패딩):''

원본 메시지의 길이 L 비트로 시작한다.



메시지에 비트 '1'을 추가한다.

결과 메시지의 길이(비트 단위로 ''512를 법으로'')가 448이 되도록 k 비트의 '0'을 추가한다(k는 0 이상의 최소 정수).

메시지의 길이('1' 비트 또는 패딩 없이 비트 단위)를 64비트 빅 엔디언 정수로 추가한다.

(이렇게 하면 전체 후처리 길이가 512비트의 배수가 된다.)



메시지의 비트는 다음과 같은 형식을 가진다: <길이 L의 원본 메시지> 1 <64비트 정수로 L>, (비트 수는 512의 배수가 된다)

''메시지를 연속적인 512비트 청크로 처리:''



메시지를 512비트 청크로 나눈다.

'''각''' 청크에 대해

32비트 워드의 64항목 메시지 스케줄 배열 w[0..63]을 생성한다.

''(w[0..63]의 초기값은 중요하지 않으므로 많은 구현에서 여기서 0으로 설정한다.)''

청크를 메시지 스케줄 배열의 처음 16개 워드 w[0..15]에 복사한다.

''처음 16개 워드를 메시지 스케줄 배열의 나머지 48개 워드 w[16..63]로 확장:''

'''i'''가 16에서 63까지 '''반복'''

s0 := (w[i-15] '''오른쪽 회전''' 7) '''xor''' (w[i-15] '''오른쪽 회전''' 18) '''xor''' (w[i-15] '''오른쪽 시프트''' 3)

s1 := (w[i-2] '''오른쪽 회전''' 17) '''xor''' (w[i-2] '''오른쪽 회전''' 19) '''xor''' (w[i-2] '''오른쪽 시프트''' 10)

w[i] := w[i-16] '''+''' s0 '''+''' w[i-7] '''+''' s1

''작업 변수를 현재 해시 값으로 초기화:''

a := h0

b := h1

c := h2

d := h3

e := h4

f := h5

g := h6

h := h7

''압축 함수 주 루프:''

'''i'''가 0에서 63까지 '''반복'''

S1 := (e '''오른쪽 회전''' 6) '''xor''' (e '''오른쪽 회전''' 11) '''xor''' (e '''오른쪽 회전''' 25)

ch := (e '''and''' f) '''xor''' (('''not''' e) '''and''' g)

temp1 := h '''+''' S1 '''+''' ch '''+''' k[i] '''+''' w[i]

S0 := (a '''오른쪽 회전''' 2) '''xor''' (a '''오른쪽 회전''' 13) '''xor''' (a '''오른쪽 회전''' 22)

maj := (a '''and''' b) '''xor''' (a '''and''' c) '''xor''' (b '''and''' c)

temp2 := S0 '''+''' maj

h := g

g := f

f := e

e := d '''+''' temp1

d := c

c := b

b := a

a := temp1 '''+''' temp2

''압축된 청크를 현재 해시 값에 추가:''

h0 := h0 '''+''' a

h1 := h1 '''+''' b

h2 := h2 '''+''' c

h3 := h3 '''+''' d

h4 := h4 '''+''' e

h5 := h5 '''+''' f

h6 := h6 '''+''' g

h7 := h7 '''+''' h



''최종 해시 값 생성 (빅 엔디언):''



digest := hash := h0 '''추가''' h1 '''추가''' h2 '''추가''' h3 '''추가''' h4 '''추가''' h5 '''추가''' h6 '''추가''' h7



`ch` 및 `maj` 계산은 SHA-1과 유사한 방법으로 최적화할 수 있다.

=== SHA-224 ===

SHA-224는 본질적으로 SHA-256과 동일하지만 다음과 같은 차이점이 있다.

  • 초기 해시 값 `h0`부터 `h7`이 다르다.
  • 최종 해시 값 계산 시 `h7`을 제거하여 출력을 얻는다.


''SHA-224 초기 해시 값 (빅 엔디언):''

''(9번째부터 16번째 소수 23...53의 제곱근의 소수 부분의 두 번째 32비트)''



h[0..7] :=

0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4



=== SHA-512 ===

SHA-512의 구조는 본질적으로 SHA-256과 동일하지만 다음과 같은 차이점이 있다.

  • 메시지가 512비트 단위가 아닌 1024비트 단위 청크로 나뉜다.
  • 초기 값과 라운드 상수가 64비트로 확장된다.
  • 라운드 수가 64에서 80으로 변경된다.
  • 메시지 스케줄 배열 w는 64개의 32비트 워드가 아닌 80개의 64비트 워드를 갖는다.
  • 메시지 스케줄 배열 w를 확장하기 위한 루프가 16~63이 아닌 16~79이다.
  • 라운드 상수가 처음 80개의 소수 2...409를 기반으로 한다.
  • 연산에 사용되는 워드 길이가 64비트이다.
  • 추가되는 메시지 길이가 128비트 빅 엔디언 정수이다.
  • 시프트 및 회전 수가 다르다.


''SHA-512 초기 해시 값 (빅 엔디언):''



h[0..7] :=

0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,

0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179



''SHA-512 라운드 상수:''



k[0..79] := [

0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538,

0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe,

0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235,

0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,

0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab,

0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725,

0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed,

0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,

0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218,

0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53,

0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373,

0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,

0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c,

0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6,

0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc,

0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817

]



''SHA-512 합계 및 시그마:''



S0 := (a '''오른쪽 회전''' 28) '''xor''' (a '''오른쪽 회전''' 34) '''xor''' (a '''오른쪽 회전''' 39)

S1 := (e '''오른쪽 회전''' 14) '''xor''' (e '''오른쪽 회전''' 18) '''xor''' (e '''오른쪽 회전''' 41)

s0 := (w[i-15] '''오른쪽 회전''' 1) '''xor''' (w[i-15] '''오른쪽 회전''' 8) '''xor''' (w[i-15] '''오른쪽 시프트''' 7)

s1 := (w[i-2] '''오른쪽 회전''' 19) '''xor''' (w[i-2] '''오른쪽 회전''' 61) '''xor''' (w[i-2] '''오른쪽 시프트''' 6)



=== SHA-384 ===

SHA-384는 본질적으로 SHA-512와 동일하지만 다음과 같은 차이점이 있다.

  • 초기 해시 값 `h0`부터 `h7`이 다르다 (9번째에서 16번째 소수에서 가져옴).
  • 최종 해시 값 계산 시 `h6` 및 `h7`을 제거하여 출력을 얻는다.


''SHA-384 초기 해시 값 (빅 엔디언):''



h[0..7] :=

0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939,

0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4



=== SHA-512/t ===

SHA-512/t는 본질적으로 SHA-512와 동일하지만 다음과 같은 차이점이 있다.

  • 초기 해시 값 `h0`부터 `h7`은 ''SHA-512/t IV 생성 함수''에 의해 주어진다.
  • 최종 해시 값은 `h0`부터 `h7`까지의 연결을 t비트에서 잘라서 구성된다.
  • t가 384인 경우는 허용되지 않으며, 대신 지정된 SHA-384를 사용해야 한다.
  • t 값 224와 256은 승인된 것으로 특히 언급된다.


''SHA-512/224 초기 해시 값 (빅 엔디언):''



h[0..7] :=

0x8c3d37c819544da2, 0x73e1996689dcd4d6, 0x1dfab7ae32ff9c82, 0x679dd514582f9fcf,

0x0f6d2b697bd44da8, 0x77e36f7304C48942, 0x3f9d85a86a1d36C8, 0x1112e6ad91d692a1



''SHA-512/256 초기 해시 값 (빅 엔디언):''



h[0..7] :=

0x22312194fc2bf72c, 0x9f555fa3c84c64c2, 0x2393b86b6f53b151, 0x963877195940eabd,

0x96283ee2a88effe3, 0xbe5e1e2553863992, 0x2b0199fc2c85b8aa, 0x0eb72ddC81c52ca2



''SHA-512/t IV 생성 함수''는 ASCII 문자열 "SHA-512/''t''"에 대해 수정된 ''SHA-512''를 평가하며, 여기서 ''t''는 10진수로 대체된다. ''수정된 SHA-512''는 초기 값 `h0`부터 `h7`까지가 16진수 상수 `0xa5a5a5a5a5a5a5a5`와 XOR 연산된 것을 제외하고는 SHA-512와 동일하다.

SHA-2 계열 해시 함수의 샘플 C 구현은 RFC 6234에서 찾을 수 있다.

8. SHA 함수 비교

빨간색 \color{red}\boxplus는 SHA-256의 경우 232, SHA-512의 경우 264를 법으로 하는 덧셈이다.]]

아래 표에서 "내부 상태"는 데이터 블록의 각 압축 후의 "내부 해시 합"을 의미한다.

SHA 함수 비교
알고리즘 및 변형출력 크기
(비트)
내부
상태 크기
(비트)
블록 크기
(비트)
라운드연산충돌 공격에 대한 보안
(비트)
길이 확장 공격에 대한 보안
(비트)
스카이레이크에서의 성능 (중간값 cpb)[41]최초 발표
긴 메시지8바이트
MD5 (참고용)128128 (4 × 32)5124 (라운드당 16개 연산)And, Xor, Or, Rot, Add (mod 232)≤ 18 (충돌 발견)[42]0 (취약)4.9955.001992
SHA-0160160 (5 × 32)51280And, Xor, Or, Rot, Add (mod 232)< 34 (충돌 발견)rowspan="2" 0 (취약)≈ SHA-1≈ SHA-11993
SHA-1< 63 (충돌 발견)[43]3.4752.001995
SHA-2SHA-224
SHA-256
224
256
256 (8 × 32)51264And, Xor, Or,
Rot, Shr, Add (mod 232)
112
128
32
0 (취약)
7.62
7.63
84.50
85.25
2004
2001
SHA-384384512 (8 × 64)102480And, Xor, Or,
Rot, Shr, Add (mod 264)
1921285.12135.752001
SHA-5125122560 (취약)[44]5.06135.502001
SHA-512/224
SHA-512/256
224
256
112
128
288
256
≈ SHA-384≈ SHA-3842012
SHA-3SHA3-224
SHA3-256
SHA3-384
SHA3-512
224
256
384
512
1600 (5 × 5 × 64)1152
1088
832
576
24[45]And, Xor, Rot, Not112
128
192
256
448
512
768
1024
8.12
8.59
11.06
15.88
154.25
155.50
164.00
164.00
2015
SHAKE128
SHAKE256
d (임의)
d (임의)
1344
1088
min(d/2, 128)
min(d/2, 256)
256
512
7.08
8.59
155.25
155.50



위 표의 비트 연산 열에서 "Rot"은 캐리 없는 회전 (rotate no carry), "Shr"은 오른쪽 논리 시프트 (right logical shift)를 의미한다. SHA-3을 제외한 모든 알고리즘은 모듈러 덧셈을 사용한다.

아래 표는 특정 프로세서 아키텍처에서의 성능 측정 결과를 보여준다.

CPU 아키텍처주파수알고리즘단어 크기 (비트)바이트당 클록 사이클 x86MiB/s x86바이트당 클록 사이클 x86-64MiB/s x86-64
인텔 아이비 브릿지3.5 GHzSHA-2563216.8019913.05256
SHA-5126443.66768.48394
AMD 파일드라이버 APU3.8 GHzSHA-2563222.8715818.47196
SHA-5126488.364112.43292



'x86'으로 표시된 성능 수치는 64비트 프로세서에서 32비트 코드를 사용하여 실행한 것이며, 'x86-64' 수치는 기본 64비트 코드이다. SHA-256은 32비트 계산을 위해 설계되었지만, x86 아키텍처의 64비트 프로세서에 최적화된 코드로부터 이점을 얻는다. SHA-512의 32비트 구현은 64비트 구현보다 상당히 느리다. 메시지 확장 및 압축 함수가 동일하고 초기 해시 값과 출력 크기만 다르기 때문에, 동일 계열 내 다른 출력 크기를 가진 알고리즘 변형(예: SHA-224와 SHA-256, SHA-384와 SHA-512 등)은 유사한 성능을 보인다. 비교를 위해, MD5와 SHA-1의 최적 구현은 최신 프로세서에서 바이트당 4.5~6 사이클 정도의 성능을 보인다.

이 테스트는 시카고 일리노이 대학교에서 3.5 GHz 클록 속도의 Intel Xeon E3-1275 V2 (hydra8 시스템) 및 3.8 GHz 클록 속도의 AMD A10-5800K APU (hydra9 시스템)를 사용하여 수행되었다.[46] 위 표의 바이트당 클록 사이클 속도는 SUPERCOP 암호화 벤치마킹 소프트웨어를 사용하여 4,096바이트 메시지를 처리할 때의 중간 성능 값이다.[47] MiB/s 성능은 단일 코어의 CPU 클록 속도를 기준으로 추정한 값이며, 실제 성능은 다양한 요인에 따라 달라질 수 있다.

참조

[1] 웹사이트 On the Secure Hash Algorithm family https://www.staff.sc[...]
[2] 웹사이트 IPR Details: The United States of America as represented by the National Security Agency's general license statement https://datatracker.[...] 2008-02-17
[3] 특허 Device for and method of one-way cryptographic hashing 2004-12-07
[4] 정부발표 Announcing Approval of FIPS Publication 180-2 https://federalregis[...]
[5] 웹사이트 FIPS 180-2 with Change Notice 1 https://csrc.nist.go[...] 2022-02-15
[6] 정부발표 Announcing Approval of FIPS Publication 180-3 https://federalregis[...]
[7] 보고서 Recommendation for Applications Using Approved Hash Algorithms https://csrc.nist.go[...] National Institute of Standards and Technology 2012-08-24
[8] 보고서 Recommendation for Key Management, Part 1: General (Revision 3) https://csrc.nist.go[...] National Institute of Standards and Technology 2012-07-10
[9] 웹사이트 NIST.gov – Computer Security Division – Computer Security Resource Center https://csrc.nist.go[...] 2016-12-29
[10] 보고서 Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths https://csrc.nist.go[...] National Institute of Standards and Technology 2011-01-13
[11] 정부발표 Announcing Approval of FIPS Publication 180-4 https://federalregis[...]
[12] 저널 NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition https://www.nist.gov[...] 2012-10-02
[13] 저널 Custom ASIC Design for SHA-256 Using Open-Source Tools
[14] 웹사이트 Verifying authenticity of Debian images https://www.debian.o[...]
[15] 뉴스 A Tool to Verify Digital Records, Even as Technology Shifts https://www.nytimes.[...] 2009-01-27
[16] IETF Use of SHA-2 Algorithms with RSA in DNSKEY and RRSIG Resource Records for DNSSEC 2009-10
[17] 웹사이트 Unix crypt with SHA-256/512 https://akkadia.org/[...]
[18] 웹사이트 Bitcoin Does Not Waste Energy https://surplusbitco[...]
[19] 뉴스 What Is SHA-256 And How Is It Related to Bitcoin? - Mycryptopedia https://www.mycrypto[...] 2017-09-21
[20] 웹사이트 NIST Policy on Hash Functions – Hash Functions {{!}} CSRC {{!}} CSRC https://csrc.nist.go[...] 2017-01-04
[21] 웹사이트 Secure Hashing https://csrc.nist.go[...]
[22] 웹사이트 Overview of Windows XP Service Pack 3 https://download.mic[...] Microsoft Corporation
[23] 웹사이트 Gradually Sunsetting SHA-1 https://blog.chromiu[...]
[24] 웹사이트 SHAAAAAAAAAAAAA https://shaaaaaaaaaa[...]
[25] 웹사이트 The unofficial Chrome SHA1 deprecation FAQ https://words.filipp[...] 2015-04-08
[26] 웹사이트 An update to our SHA-1 deprecation roadmap – Microsoft Edge Dev BlogMicrosoft Edge Dev Blog https://blogs.window[...] 2016-04-29
[27] 웹사이트 Firefox: Mozilla schaltet SHA-1 ab … und direkt wieder an https://www.heise.de[...] 2016-01-08
[28] 웹사이트 MD5 considered harmful today: Creating a rogue CA certificate https://www.win.tue.[...] 2009-03-29
[29] 웹사이트 Converting Meet-in-the-Middle Preimage Attack into Pseudo Collision Attack: Application to SHA-2 https://fse2012.inri[...]
[30] 논문 New collision attacks against up to 24-step SHA-2 https://link.springe[...] Springer-Verlag
[31] 저널 A combinatorial analysis of recent attacks on step reduced SHA-2 family https://link.springe[...]
[32] 서적 Advances in Cryptology – ASIACRYPT 2009 Springer Berlin Heidelberg
[33] 서적 Advances in Cryptology - ASIACRYPT 2010 https://eprint.iacr.[...] Springer Berlin Heidelberg
[34] 저널 Higher-Order Differential Attack on Reduced SHA-256 https://eprint.iacr.[...]
[35] 저널 Bicliques for Preimages: Attacks on Skein-512 and the SHA-2 family https://eprint.iacr.[...]
[36] 논문 Advances in Cryptology – EUROCRYPT 2013 https://online.tugra[...] Springer Berlin Heidelberg 2014-12-13
[37] 논문 Branching Heuristics in Differential Collision Search with Applications to SHA-512 https://eprint.iacr.[...] 2022-02-15
[38] 웹사이트 Analysis of SHA-512/224 and SHA-512/256 https://eprint.iacr.[...] 2016-04-15
[39] 논문 New Records in Collision Attacks on SHA-2 https://eprint.iacr.[...] 2024-03-02
[40] 웹사이트 SHS Validation List https://csrc.nist.go[...] 2017-06-16
[41] 웹사이트 Measurements table http://bench.cr.yp.t[...]
[42] 기술보고서 Fast Collision Attack on MD5 https://eprint.iacr.[...] International Association for Cryptologic Research
[43] 기술보고서 The first collision for full SHA-1 https://shattered.io[...] Google Research
[43] 블로그 Announcing the first SHA1 collision https://security.goo[...] 2017-02-23
[44] 문서 Without truncation, the full internal state of the hash function is known, regardless of collision resistance. If the output is truncated, the removed part of the state must be searched for and found before the hash function can be resumed, allowing the attack to proceed.
[45] 웹사이트 The Keccak sponge function family http://keccak.noekeo[...] 2016-01-27
[46] 웹사이트 Measurements of hash functions, indexed by machine https://bench.cr.yp.[...]
[47] 웹사이트 SUPERCOP https://bench.cr.yp.[...] 2015-02-24
[48] 웹사이트 Supported SSL / TLS ciphersuites https://tls.mbed.org[...] 2019-10-19
[49] 웹사이트 Mbed TLS Changelog https://github.com/A[...] 2019-10-19
[50] 웹사이트 ARM Cortex-A53 MPCore Processor Technical Reference Manual Cryptography Extension https://infocenter.a[...] 2022-02-15
[51] 서적 IBM z/Architecture Principles of Operation IBM
[52] 웹사이트 SHA2とは https://kotobank.jp/[...] 2022-07-09
[53] 논문 Licensing Declaration for US patent 6829355. https://datatracker.[...] 2008-02-17
[54] 논문 Collisions for Hash Functions MD4,MD5,HAVAL-128andRIPEMD https://eprint.iacr.[...] 2022-04-28
[55] 논문 Finding Collisions in the Full SHA-1 https://www.iacr.org[...] 2022-04-28
[56] 웹사이트 Federal Register / Vol. 72, No. 212 http://csrc.nist.gov[...] Government Printing Office 2007-11-02
[57] 웹사이트 NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition https://www.nist.gov[...] NIST 2012-10-02
[58] 논문 SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions https://nvlpubs.nist[...] 2015-08
[59] 뉴스 Announcing Approval of Federal Information Processing Standard (FIPS) 202, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, and Revision of the Applicability Clause of FIPS 180-4, Secure Hash Standard https://www.federalr[...] 2015-08-05
[60] 웹사이트 Announcing Approval of FIPS Publication 180-2 https://federalregis[...]
[61] 웹사이트 FIPS 180-2 with Change Notice 1 http://csrc.nist.gov[...]
[62] 웹사이트 Announcing Approval of FIPS Publication 180-3 https://federalregis[...]
[63] 웹사이트 Recommendation for Applications Using Approved Hash Algorithms http://csrc.nist.gov[...]
[64] 웹사이트 Recommendation for Key Management: Part 1: General http://csrc.nist.gov[...]
[65] 웹사이트 Secure Hashing http://csrc.nist.gov[...]
[66] 웹사이트 Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths http://csrc.nist.gov[...]
[67] 웹사이트 Announcing Approval of FIPS Publication 180-4 https://federalregis[...]
[68] 웹사이트 NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition http://www.nist.gov/[...]
[69] 웹사이트 Debian codebase in Google Code http://google.com/co[...] Google 2011-11-08
[70] 뉴스 A Tool to Verify Digital Records, Even as Technology Shifts https://www.nytimes.[...] New York Times 2009-01-26
[71] RFC IETF RFC 5702
[72] 웹사이트 Unix crypt with SHA-256/512 http://people.redhat[...]
[73] 웹사이트 NIST's March 2006 Policy on Hash Functions http://csrc.nist.gov[...] NIST 2006-03-15
[74] 웹사이트 Overview of Windows XP Service Pack 3 http://download.micr[...] Microsoft Corporation
[75] 웹사이트 Announcing the first SHA1 collision https://security.goo[...]
[76] 웹사이트 Converting Meet-in-the-Middle Preimage Attack into Pseudo Collision Attack: Application to SHA-2 http://fse2012.inria[...] Sony China Research Laboratory and Sony Corporation
[77] 논문 New Collision attacks Against Up To 24-step SHA-2 http://eprint.iacr.o[...]
[78] 논문 Preimages for step-reduced SHA-2 http://link.springer[...] Springer Berlin Heidelberg
[79] 논문 Advanced meet-in-the-middle preimage attacks: First results on full Tiger, and improved results on MD4 and SHA-2 http://eprint.iacr.o[...] Springer Berlin Heidelberg
[80] 논문 Higher-Order Differential Attack on Reduced SHA-256 http://eprint.iacr.o[...]
[81] 논문 Bicliques for Preimages: Attacks on Skein-512 and the SHA-2 family http://eprint.iacr.o[...]
[82] 웹사이트 SHS Validation List http://csrc.nist.gov[...]
[83] 웹사이트 Crypto++ 5.6.0 Benchmarks http://www.cryptopp.[...] 2014-01-01
[84] 웹사이트 Announcing the first SHA1 collision https://security.goo[...]
[85] 웹사이트 The Sponge Functions Corner http://sponge.noekeo[...]
[86] 웹사이트 The Keccak sponge function family http://keccak.noekeo[...]
[87] 웹사이트 Measurements of hash functions, indexed by machine http://bench.cr.yp.t[...]
[88] 웹사이트 SUPERCOP Benchmarking Toolkit http://bench.cr.yp.t[...]
[89] 웹인용 On the Secure Hash Algorithm family http://www.staff.sci[...] 2018-02-04
[90] 웹인용 Cryptographic Hash Function http://pcsupport.abo[...] About.com



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com