맨위로가기

SHA

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

1. 개요

SHA는 미국 국가안보국(NSA)이 설계하고 미국 국립표준기술연구소(NIST)가 표준으로 발표한 암호화 해시 함수군을 의미한다. SHA-0, SHA-1, SHA-2, SHA-3로 구성되며, SHA-0과 SHA-1은 보안 취약점으로 인해 사용이 권장되지 않는다. SHA-2는 다양한 해시값 길이를 지원하며 현재까지 널리 사용되고 있으며, SHA-3는 스펀지 구조를 기반으로 하여 SHA 계열에서 처음으로 NSA가 개발에 관여하지 않았다. SHA 함수들은 암호 모듈 검증 프로그램(CMVP)을 통해 구현 및 검증될 수 있으며, 다양한 응용 분야에서 활용된다.

더 읽어볼만한 페이지

  • 암호화 해시 함수 - RIPEMD
    RIPEMD는 MD4를 기반으로 1992년 설계된 암호화 해시 함수로, 보안 취약점 보완을 위해 RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320 등의 변형이 개발되었으며, 특히 RIPEMD-160은 160비트 해시 값을 생성하고 다양한 라이브러리에서 지원되지만 보안성 우려가 제기되고 있다.
  • 암호화 해시 함수 - MD5
    MD5는 로널드 리베스트 교수가 개발한 128비트 해시 값 생성 암호화 해시 함수이나, 보안 취약점으로 인해 현재는 보안이 중요한 분야에서는 사용이 중단되었다.
SHA
개념
종류해시 함수 · SHA · DSA
주요 개념
관련 해시 함수SHA-0 · SHA-1 · SHA-2 · SHA-3

2. 역사

SHA는 1993년 미국 국가안보국(NSA)이 설계한 암호화 해시 함수이다. 현재 SHA-0, SHA-1, SHA-2, SHA-3의 4가지 종류가 존재한다.

SHA-0 및 SHA-1은 TLS, SSL, PGP, SSH 등 다양한 응용 소프트웨어프로토콜에 채택되었지만, 2004년 CRYPTO2004에서 왕샤오윈(Xiaoyun Wang) 등의 발표 이후 연구가 진전되어, 2017년 2월에는 실제로 충돌 공격이 성공하였다.

SHA-2는 국가안보국(NSA)에 의해 개발되었으며, SHA-1과 달리 2020년 시점에서 유망한 공격법은 발표되지 않았다. SHA-2에는 SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256이 있다.

SHA-3는 미국 국립 표준 기술 연구소 (NIST)의 공모를 통해 Keccak가 선정되었다. SHA-2에 대한 공격은 진전되지 않아 SHA-3의 보급은 거의 이루어지지 않았다.

2. 1. SHA-0과 SHA-1

1993년 미국 표준 기술 연구소(NIST)는 '안전한 해시 표준'(Secure Hash Standard, FIPS PUB 180)으로 SHA-0을 발표했지만, 얼마 지나지 않아 국가안보국(NSA)에 의해 철회되었다.[7] 1995년 SHA-0의 압축 함수에 비트 회전 연산을 추가하여 보안 결함을 개선한 SHA-1이 FIPS PUB 180-1로 발표되었다.[7] NSA는 이 개선을 통해 암호화 보안이 강화되었다고 주장했지만, 구체적인 내용은 공개하지 않았다.

SHA-1 압축 함수가 블록 하나를 처리하는 과정. A, B, C, D, E는 각각 32비트 내부 상태이고, F는 계속 변하는 비선형 함수이며, Kt는 상수이다. \lll_n은 ''n''비트만큼 왼쪽으로 회전하는 연산이고, [[File:Boxplus.png|덧셈]]은 232 모듈로 덧셈을 나타낸다.


SHA-1은 SHA-0보다 암호학적 공격이 힘든 것으로 알려져 한때 TLS, SSL, PGP, SSH, S/MIME, IPSec 등 다양한 응용 소프트웨어프로토콜에 널리 사용되었다. 그러나 2017년에 충돌 공격의 성공과 실제 사례가 보고되면서 보안 취약성이 드러났다.[7]

2. 2. SHA-2

미국 표준 기술 연구소(NIST)는 해시값의 길이가 더 긴 네 개의 SHA-2 변형을 발표했다. SHA-256, SHA-384, SHA-512는 2001년에 초안으로 처음 발표되었으며, 2002년에 SHA-1과 함께 정식 표준(FIPS PUB 180-2)으로 지정되었다. 2004년 2월에 삼중 DES의 키 길이에 맞춰 해시값 길이를 조정한 SHA-224가 표준에 추가되었다.[1] SHA-256과 SHA-512는 각각 32바이트 및 64바이트 워드를 사용하는 해시 함수이며, 몇몇 상수들이 다르긴 하지만 그 구조는 라운드의 수를 빼고는 완전히 같다. SHA-224와 SHA-384는 서로 다른 초기값을 가지고 계산한 SHA-256과 SHA-512 해시값을 최종 해시값 길이에 맞춰 잘라낸 것이다.[1]

SHA-1, SHA-256, SHA-384, SHA-512는 2002년 8월의 FIPS Publication 180-2의 초판에 포함되어 있다. SHA-224는 Change Notice 1으로, 2004년 2월에 해당 규격에 추가되었다. SHA-512/224, SHA-512/256은 2012년 FIPS 180-4에 추가되었다.[3]

SHA-2는 SHA-1을 개량하여 출력되는 해시 값의 길이를 늘린 것으로, 국가안보국(NSA)에 의해 개발되었다.[4][6] SHA-256, SHA-512는 각각 32비트, 64비트의 워드 사이즈를 가지며, 출력되는 해시 값의 길이는 256비트, 512비트이다. SHA-224, SHA-384는 각각 SHA-256, SHA-512를 잘라낸 것이며, 워드 사이즈는 각각 32비트, 64비트, 출력 길이는 각각 224비트, 384비트이다. SHA-512/224, SHA-512/256은 SHA-512를 잘라낸 것이며, 워드 사이즈는 64비트, 출력 길이는 각각 224비트, 256비트이다.[6]

2. 3. SHA-3

SHA-3는 미국 국립 표준 기술 연구소(NIST)의 공개 경쟁을 통해 선정된 알고리즘이다. 이전 SHA 계열과는 달리, 2012년 10월 2일에 Keccak이 SHA-3로 선정되었으며,[8] 2015년 8월에 정식 버전(FIPS 202)이 발행되었다.

SHA-3는 Merkle–Damgård 구조(:en:Merkle–Damgård construction)를 사용했던 이전 SHA 시리즈와는 다르게, 스펀지 구조를 채택했다. 스펀지 구조는 해시값보다 큰 내부 상태를 가지고, 그 내부 상태에서 해시값을 "짜내는" 방식이다.

SHA 시리즈 중 처음으로 국가안보국(NSA)가 개발에 관여하지 않았다.

SHA-3는 64비트 워드 크기를 가지며, 출력되는 해시값의 길이는 224비트, 256비트, 384비트, 512비트의 4종류 및 가변 길이(SHAKE128, SHAKE256) 중 선택할 수 있다.

3. SHA 함수군의 비교

(비트)내부 상태 크기
(비트)블록 크기
(비트)길이 한계
(비트)과정 수사용되는 연산퍼포먼스 예
(MiB/s)보안 강도
(비트)충돌MD5128128
(4 × 32)512264− 164+, and, xor, rot,
add (mod 232), or335<64발견됨SHA-0160160
(5 × 32)512264− 180+, and, or, xor, rotl-<80발견됨SHA-1160160
(5 × 32)512264− 180+, and, or, xor, rotl192<63발견됨SHA-2SHA-224
SHA-256224
256256
(8 × 32)512264− 164+, and, or, xor,
shr, rotr139112
128rowspan="2" |SHA-384
SHA-512
SHA-512/224
SHA-512/256384
512
224
256512
(8 × 64)10242128− 180+, and, or, xor,
shr, rotr154192
256
112
128SHA-3SHA3-224
SHA3-256
SHA3-384
SHA3-512224
256
384
5121600
(5 × 5 × 64)1152무제한24+, and, xor, rot, not-112
128
192
256rowspan="7" |1088832576SHAKE128
SHAKE256d (가변)13441088d/2와 128 중 작은 값
d/2와 256 중 작은 값



내부 상태는 데이터 블록 하나를 압축한 뒤의 "내부적인 해시값"의 크기를 나타낸다. SHA는 메시지 채움을 위해 데이터 길이와 같은 추가적인 변수를 사용하며, 길이 한계는 이때 사용되는 변수의 크기를 나타낸다. 메시지 채움에 대한 자세한 설명은 머클-담고르 해시 함수를 참고할 수 있다.

SHA 함수 비교[1]
알고리즘 및 변형출력 크기
(비트)
내부 상태 크기
(비트)
블록 크기
(비트)
라운드연산충돌 공격에 대한
보안
(비트)
길이 확장 공격에 대한
보안
(비트)
Skylake에서의 성능
(중앙값 cpb)
최초 출판
긴 메시지8 바이트
MD5 (참조용)128128
(4 × 32)
51264
(각 라운드당 16개 연산)
AND, XOR, OR, ROT,
Add (mod 232)
≤ 18
(충돌 발견)[2]
04.9955.001992
SHA-0160160
(5 × 32)
51280AND, XOR, OR, ROT,
Add (mod 232)
< 34
(충돌 발견)
0≈ SHA-1≈ SHA-11993
SHA-1< 63
(충돌 발견)[3]
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[4]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[5]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


3. 1. SHA-0, SHA-1, SHA-2

1993년 미국 표준 기술 연구소(NIST)가 '''안전한 해시 표준'''(Secure Hash Standard, FIPS PUB 180)으로 SHA-0을 발표했다. 하지만 발표 직후 NSA는 이 표준을 폐기하고, 1995년에 개정된 알고리즘(FIPS PUB 180-1)인 SHA-1을 발표했다. SHA-1은 SHA-0의 압축 함수에 비트 회전 연산을 추가하여 암호학적 보안을 강화했다.

SHA-0과 SHA-1은 최대 264비트 메시지로부터 160비트 해시값을 생성하며, 로널드 라이베스트가 MD4MD5에서 사용한 방법과 유사하다.

SHA-2는 SHA-1보다 긴 해시값을 생성하는 SHA-256, SHA-384, SHA-512 등을 포함한다. 이들은 2001년 초안 발표 후 2002년 정식 표준(FIPS PUB 180-2)으로 지정되었다. 2004년에는 삼중 DES의 키 길이에 맞춘 SHA-224가 추가되었다. SHA-256과 SHA-512는 각각 32바이트 및 64바이트 워드를 사용하며, 구조는 유사하지만 라운드 수가 다르다. SHA-224와 SHA-384는 SHA-256과 SHA-512의 초기값을 다르게 설정하고 해시값을 잘라낸 버전이다.

SHA-0, SHA-1, SHA-2는 모두 머클-담고르 해시 함수 구조를 기반으로 한다.

SHA-0, SHA-1, SHA-2 비교
알고리즘해시값 크기 (비트)워드 크기 (비트)설명
SHA-016032최초 버전, 결함 발견 후 폐기
SHA-116032SHA-0 개선, 비트 회전 연산 추가, 2017년 충돌 공격 성공[7]
SHA-22422432SHA-256 기반, 잘라낸 버전
SHA-25625632
SHA-38438464SHA-512 기반, 잘라낸 버전
SHA-51251264
SHA-512/22422464SHA-512 기반, 잘라낸 버전, FIPS 180-4에 추가
SHA-512/25625664SHA-512 기반, 잘라낸 버전, FIPS 180-4에 추가


3. 2. SHA-3

SHA-3는 이전의 SHA-1, SHA-2와는 달리 미국 국립 표준 기술 연구소(NIST)의 공모를 통해 선정된 Keccak 알고리즘을 기반으로 한다. 2012년 10월 2일에 Keccak이 SHA-3로 선정되었고,[8] 2015년 8월에 정식 버전이 발행되었다.

SHA-3는 Merkle–Damgård 구조를 사용하는 SHA-2와는 달리, "스펀지 구조"를 채택했다. 스펀지 구조는 해시값보다 큰 내부 상태를 가지며, 해시값은 그 내부 상태에서 "짜내지는" 방식으로 생성된다.

SHA-3는 국가안보국(NSA)가 개발에 관여하지 않은 최초의 SHA 시리즈이다.

SHA-3는 64비트 워드 크기를 가지며, 다음과 같은 종류의 해시값을 생성할 수 있다.

SHA-3 함수 비교
알고리즘출력 크기 (비트)내부 상태 크기 (비트)블록 크기 (비트)라운드연산충돌 공격에 대한 보안 (비트)길이 확장 공격에 대한 보안 (비트)
SHA3-2242241600115224[5]AND, XOR, ROT, NOT112448
SHA3-2562561088128512
SHA3-384384832192768
SHA3-5125125762561024
SHAKE128d (가변)1344min(d/2, 128)256
SHAKE256d (가변)1088min(d/2, 256)512


3. 3. 성능 비교

SHA-256224
256256 (8 × 32)512264− 164+, and, or, xor, shr, rotr139112
128rowspan="2" |SHA-384
SHA-512
SHA-512/224
SHA-512/256384
512
224
256512 (8 × 64)10242128− 180+, and, or, xor, shr, rotr154192
256
112
128SHA-3SHA3-224
SHA3-256
SHA3-384
SHA3-512224
256
384
5121600 (5 × 5 × 64)1152무제한24+, and, xor, rot, not-112
128
192
256rowspan="7" |1088832576SHAKE128
SHAKE256d (가변)13441088d/2와 128 중 작은 값
d/2와 256 중 작은 값



내부 상태는 데이터 블록 하나를 압축한 뒤의 "내부적인 해시값"의 크기를 나타낸다. SHA는 메시지 채움을 위해 데이터 길이와 같은 추가적인 변수를 사용하며, 길이 한계는 이때 사용되는 변수의 크기를 나타낸다. 메시지 채움에 대한 자세한 설명은 머클-담고르 해시 함수를 참고할 수 있다.

SHA 함수 비교[1]
알고리즘 및 변형출력 크기
(비트)
내부 상태 크기
(비트)
블록 크기
(비트)
라운드연산충돌 공격에 대한 보안
(비트)
길이 확장 공격에 대한 보안
(비트)
Skylake에서의 성능 (중앙값 cpb)최초 출판
긴 메시지8 바이트
MD5 (참조용)128128 (4 × 32)51264 (각 라운드당 16개 연산)AND, XOR, OR, ROT, Add (mod 232)≤ 18
(충돌 발견)[2]
04.9955.001992
SHA-0160160 (5 × 32)51280AND, XOR, OR, ROT, Add (mod 232)< 34
(충돌 발견)
0≈ SHA-1≈ SHA-11993
SHA-1< 63
(충돌 발견)[3]
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[4]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[5]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


4. 구현 및 검증

미국 국립 표준 기술 연구소(NIST)와 캐나다 통신 보안 기관(CSE)은 SHA 구현 검증을 위한 프로그램을 제공한다. 이 프로그램은 암호 모듈 검증 프로그램(CMVP)의 일부로, FIPS영어 승인 보안 기능인 모든 SHA 계열 알고리즘에 대한 공식 검증을 제공한다. 검증 절차를 거치지 않고 사용할 수 있는 예제 테스트 데이터도 함께 제공된다. 예제 데이터와 실제 검증 과정에는 수만 개의 테스트가 포함되어 있으며, 경계 조건 및 구현 오류를 찾아낼 수 있도록 설계되었다.

2006년 5월 초 기준으로, 463개 이상의 검증된 SHA 구현이 존재하며, 그중 7개는 바이트 단위가 아닌 임의의 이진 데이터도 처리할 수 있다. 인터넷에는 SHA-1 표준 예제는 통과하지만 NIST 검증 페이지 예제는 통과하지 못하는 구현도 있다.

5. 응용

SHA 함수군은 데이터 무결성 검증, 디지털 서명, 메시지 인증 코드(MAC) 생성 등 다양한 보안 응용 분야에 사용된다. TLS/SSL, PGP, SSH, S/MIME, IPSec 등 다양한 응용 소프트웨어프로토콜에 사용된다.[8]

참조

[1] 웹사이트 Measurements table http://bench.cr.yp.t[...]
[2] 간행물 Fast Collision Attack on MD5 https://eprint.iacr.[...] IACR
[3] 웹사이트 Announcing the first SHA1 collision https://security.goo[...] 2017-02-23
[4] 문서
[5] 웹사이트 The Keccak sponge function family http://keccak.noekeo[...] 2016-01-27
[6] 웹사이트 SHA-3 Standardization http://csrc.nist.gov[...] NIST 2015-08-06
[7] 웹사이트 SHAttered https://shattered.io
[8] 웹사이트 NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition http://www.nist.gov/[...] NIST 2012-10-02
[9] 웹사이트 Crypto++ 5.6.0 Benchmarks http://www.cryptopp.[...] 2014-01-01
[10] 웹사이트 Announcing the first SHA1 collision https://security.goo[...] 2017-02-23
[11] 웹사이트 The Sponge Functions Corner http://sponge.noekeo[...] 2016-01-28
[12] 웹사이트 The Keccak sponge function family http://keccak.noekeo[...] 2016-01-28



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

문의하기 : help@durumis.com