"SHA1"의 두 판 사이의 차이
yueun970422 (토론 | 기여) |
잔글 |
||
(사용자 7명의 중간 판 30개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''SHA-1'''은 SHA- | + | [[파일:Sha-1구조도.png|썸네일|300픽셀|'''SHA-1''' 압축 함수가 블록 하나를 처리하는 과정]] |
+ | |||
+ | '''SHA-1'''은 [[SHA-0]]을 변형한 [[SHA]] 함수들 중 하나이며, 1995년 발표되었고 SHA 함수들 중 가장 많이 쓰이고 있다. | ||
== 개요 == | == 개요 == | ||
− | SHA-1은 임의의 길이의 입력데이터를 | + | SHA-1은 임의의 길이의 입력데이터를 160비트의 출력데이터로 바꾸는 것이다.<ref name="sha 알고리즘">늦둥이해커, 〈[http://blog.naver.com/PostView.nhn?blogId=kimsumin75&logNo=20071288674 SHA-1 알고리즘]〉, 《네이버 블로그》, 2009-06-24</ref> 1995년 개정판 FIPS PUB 180-1로 발표되었고 메시지 길이에 대한 상한이 존재한다. <ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref> 상측 그림은 SHA-1 압축 함수가 블록 하나를 처리하는 과정이다. 그림에서 A, B, C, D, E는 각각 32비트 내부 상태이고, F는 계속 변하는 비선형 함수이며, Kt는 상수이다. 또한 n은 n비트만큼 왼쪽으로 회전하는 연산이고, 사각형 네개를 붙인 모양은 2³² 모듈로 덧셈을 나타낸다. |
− | == | + | ==등장배경== |
− | 1993년에 | + | 1993년에 [[미국표준기술연구소]](NIST)는 안전한 [[해시]] 표준인 SHA-0을 발표했다. 이후 얼마 지나지 않은 1995년, 미국의 국가안보국 NSA(National Security Agency)는 SHA-0을 폐기하고, FIPS PUB 180-1로 공표된 개정된 알고리즘인 SHA-1을 새로 출판했다. 미국표준기술연구소에 따르면 SHA-1은 SHA-0의 압축함수에 비트 회전 연산을 하나 추가한 것으로, 이는 원래 알고리즘에서 암호학적 보안을 감소시키는 문제점을 보완한 것이다. 하지만 실제로 어떤 문제점이 있었는지는 공개하지 않았다. 일반적으로 SHA-1은 SHA-0보다 암호학적 공격이 힘든 것으로 알려져 있고, 따라서 보안에 대한 문제점을 제기한 NSA의 주장은 어느 정도 설득력이 있다. SHA-1은 최대 2⁶⁴비트 메세지로부터 160비트 해시값을 만들어내고, [[로널드 라이베스트]](Ronald Lorin Rivest)가 [[MD4]] 및 [[MD5]] 해시 함수에서 사용했던 것과 비슷한 방법을 사용한다. |
== 용도 == | == 용도 == | ||
* 서명문 생성을 위한 알고리즘 | * 서명문 생성을 위한 알고리즘 | ||
− | 현재 발표된 SHA-1 알고리즘은 많은 인터넷 보안 프로토콜과 공개키 인증서에도 적용되고 있는 매우 중요한 암호 | + | : 현재 발표된 SHA-1 알고리즘은 많은 [[인터넷]] 보안 프로토콜과 [[공개키]] 인증서에도 적용되고 있는 매우 중요한 [[암호 알고리즘]]이다. 대표적으로 [[IP]] 패킷 단위로 [[데이터]] 변조 방지 및 은닉 기능을 제공하는 프로토콜인 [[IPSec]], 안전한 전자메일 보안 표준인 [[SMIME]], 단 대단 보안을 제공하는 TLS와 SSL, 전자우편을 암호화하고, 받은 우편의 암호를 해석해주는 프로그램인 [[PGP]], 네트워크 보안 도구 중 하나인 [[시큐어셸]](SSH) 등 인증서 기반의 많은 보안 프로토콜에서 암호 프리미티브로 사용되고 있다.<ref>fl0ckfl0ck, 〈[https://fl0ckfl0ck.tistory.com/36 SHA-1 알고리즘]〉, 《티스토리》, 2009-03-24</ref> |
== 특징 == | == 특징 == | ||
− | * | + | * 입력된 메시지를 512비트 블록 단위로 처리하여, 160비트의 출력값(해시값)생성 |
* 입력 메세지 길이 상한 : 2⁶⁴ | * 입력 메세지 길이 상한 : 2⁶⁴ | ||
* 해시값 길이 : 160 비트 (20바이트) | * 해시값 길이 : 160 비트 (20바이트) | ||
− | * | + | * 패딩 처리 : 메세지 길이를 512 비트 단위(입력 블록 상한)로 잘라서 512 비트 정수배로 만듦 |
+ | * 입력 블록 단위의 처리 : 32 비트 x 80개 값(W₀ ~ W₇₉)을 계산 | ||
+ | * 블록 처리 : 1단계 처리<ref>차재복, 〈[http://www.ktword.co.kr/abbr_view.php?m_temp1=2941 해시알고리즘]〉, 《정보통신기술용어해설》</ref> | ||
== 비교 == | == 비교 == | ||
− | |||
===MD5=== | ===MD5=== | ||
− | + | SHA-1은 [[MD5]]보다 빠르고 더 높은 보안성을 가지고 있다. 보안성이 강하다고 하는 것은 두 가지를 의미하는데, [[메시지 다이제스트]](message digest) 된 값을 보고 이것에 해당하는 원본 메시지를 찾는 것이 어렵다는 것과 똑같은 메시지 다이제스트 값을 생성하는 2개의 서로 다른 메시지를 찾는 것이 어려운 것을 말한다. 또한 SHA-1은 원본 메시지의 조그만 변화도 매우 급속하게 메시지 다이제스트에 변화를 전파합니다.<ref name="sha 알고리즘"></ref> | |
− | SHA-1은 [[MD5]]보다 빠르고 | ||
===SHA=== | ===SHA=== | ||
− | SHA는 1993년에 | + | SHA는 1993년에 [[미국표준기술연구소]](NIST)가 제안해 미국의 연방정보처리표준규격(FIPS PUB 180)으로 발표되었다. 160비트의 [[해시값]]을 생성하며 일방향 [[해시함수]]라고 부른다. 일방향 해시 함수란 메시지를 해시값으로 변경하는 것은 가능하지만 해시값을 메시지로 변경하는 것이 불가능 한 것을 말한다. <ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref> |
===SHA-2=== | ===SHA-2=== | ||
− | SHA-1과 SHA- | + | SHA-1과 [[SHA-2]]는 원본 데이터로부터 해시가 생성되는 방법과 서명의 비트 길이가 다르다. SHA-1은 160비트 해시이지만 SHA-2는 다양한 길이로 제공된다. |
== 알고리즘 구현 == | == 알고리즘 구현 == | ||
− | |||
=== 패딩 === | === 패딩 === | ||
− | + | [[패딩]](padding)은 '메워 넣기'라는 의미로서, 메시지 다음에 여분의 데이터를 부가하여 메시지 길이가 512비트의 정수배가 되도록 한다. SHA-1에서는 이후의 처리를 쉽게 하기 위해 가장 첫 단계에서 패딩을 실행한다. 패딩 되는 비트 수는 1~512 사이이며 이 512 비트의 집합을 '입력 블록'이라고 한다. <ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref> | |
=== W₀ ~ W₇₉의 계산 === | === W₀ ~ W₇₉의 계산 === | ||
− | + | [[파일:Sha알고리즘.PNG|썸네일|300픽셀|'''W₀ ~ W₇₉의 계산''']] | |
+ | |||
+ | 패딩이 끝난 다음에는 입력 블록 단위의 처리가 이루어진다. 입력 블록 512비트마다 32비트 * 80개의 값(W₀ ~ W₇₉)을 계산한다. 이 80개의 값은 [[블록]] 처리 80단계에서 사용한다. 먼저 입력 블록 512비트를 32비트 * 16개로 분할하여 W₀ ~ W₁₅처럼 이름을 붙여 간다. W₁₅ 다음인 W₁₆ 부터는 다음과 그림과 같은 계산을 하고 1비트 회전(좌측 시프트 1회)한다.<ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref> | ||
=== 블록 처리 === | === 블록 처리 === | ||
− | 입력 블록의 정보를 기초로 내부상태(160비트)를 앞서 말한 80단계 처리를 통해 변화시킨다. 모든 블록에 해당하며 내부 상태 160비트는 A,B,C,D,E 라는 이름이 붙은 32비트 * 5개의 버퍼로 되어있다. <ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref> | + | 입력 블록의 정보를 기초로 내부상태(160비트)를 앞서 말한 80단계 처리를 통해 변화시킨다. 모든 블록에 해당하며 내부 상태 160비트는 A, B, C, D, E 라는 이름이 붙은 32비트 * 5개의 버퍼로 되어있다. <ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref> |
− | |||
− | |||
== 문제점== | == 문제점== | ||
− | 현재는 모든 OS, 브라우저에서 SHA-1 알고리즘을 지원 중단하고 SHA-2 계열을 지원했다. 채택된지 10년 만에, 처음으로 취약점이 제기된 것이다. 따라서 2011년 1월 (NIST 문서 SP800-131A) SHA-2가 새로운 권장 해시 표준이 되었다. SHA-1의 취약점은 이론적인 이야기일 뿐이었지만 2016년에 | + | 현재는 모든 [[OS]], 브라우저에서 SHA-1 알고리즘을 지원 중단하고 SHA-2 계열을 지원했다. 채택된지 10년 만에, 처음으로 취약점이 제기된 것이다. 따라서 2011년 1월 (NIST 문서 SP800-131A) SHA-2가 새로운 권장 해시 표준이 되었다. SHA-1의 취약점은 이론적인 이야기일 뿐이었지만 2016년에 [[암호화]]를 사용하는 세계의 주요 업체인 [[구글]], [[마이크로소프트]] 등에서 2018년 1월 1일까지 SHA-2로 전환을 의무화했다. 그 이유는 SHA-1은 160비트의 메세지 다이제스트를 생성하는데 무차별 대입 공격으로 동일한 해시를 만들 수 있는 취약점이 CWI암스테르담(CWI Amsterdam)과 구글의 공동 연구 끝에 제기되면서 SHA-1은 더 안전한 알고리즘이 아니며, 더는 사용되면 안된다고 판단했기 때문이다.<ref>알약, 〈[https://blog.alyac.co.kr/992 SHA-1, 더이상 안전하지 않아]〉, 《알약 블로그》, 2017-02-27</ref> 2017년 중순에 구글에서 SHA-1 충돌 공격 성공을 발표함으로써 전 세계 대부분의 기업이 SHA-2로 전환을 완료했다.<ref>덜지, 〈[https://duzi077.tistory.com/221 SHA-1지원 중단으로 인한 SHA-2 표준 적용]〉, 《티스토리》, 2018-09-18</ref> |
{{각주}} | {{각주}} | ||
60번째 줄: | 61번째 줄: | ||
* [[SHA-3]] | * [[SHA-3]] | ||
− | {{알고리즘|검토 필요}} | + | {{암호 알고리즘|검토 필요}} |
2020년 7월 28일 (화) 08:55 기준 최신판
SHA-1은 SHA-0을 변형한 SHA 함수들 중 하나이며, 1995년 발표되었고 SHA 함수들 중 가장 많이 쓰이고 있다.
목차
개요[편집]
SHA-1은 임의의 길이의 입력데이터를 160비트의 출력데이터로 바꾸는 것이다.[1] 1995년 개정판 FIPS PUB 180-1로 발표되었고 메시지 길이에 대한 상한이 존재한다. [2] 상측 그림은 SHA-1 압축 함수가 블록 하나를 처리하는 과정이다. 그림에서 A, B, C, D, E는 각각 32비트 내부 상태이고, F는 계속 변하는 비선형 함수이며, Kt는 상수이다. 또한 n은 n비트만큼 왼쪽으로 회전하는 연산이고, 사각형 네개를 붙인 모양은 2³² 모듈로 덧셈을 나타낸다.
등장배경[편집]
1993년에 미국표준기술연구소(NIST)는 안전한 해시 표준인 SHA-0을 발표했다. 이후 얼마 지나지 않은 1995년, 미국의 국가안보국 NSA(National Security Agency)는 SHA-0을 폐기하고, FIPS PUB 180-1로 공표된 개정된 알고리즘인 SHA-1을 새로 출판했다. 미국표준기술연구소에 따르면 SHA-1은 SHA-0의 압축함수에 비트 회전 연산을 하나 추가한 것으로, 이는 원래 알고리즘에서 암호학적 보안을 감소시키는 문제점을 보완한 것이다. 하지만 실제로 어떤 문제점이 있었는지는 공개하지 않았다. 일반적으로 SHA-1은 SHA-0보다 암호학적 공격이 힘든 것으로 알려져 있고, 따라서 보안에 대한 문제점을 제기한 NSA의 주장은 어느 정도 설득력이 있다. SHA-1은 최대 2⁶⁴비트 메세지로부터 160비트 해시값을 만들어내고, 로널드 라이베스트(Ronald Lorin Rivest)가 MD4 및 MD5 해시 함수에서 사용했던 것과 비슷한 방법을 사용한다.
용도[편집]
- 서명문 생성을 위한 알고리즘
- 현재 발표된 SHA-1 알고리즘은 많은 인터넷 보안 프로토콜과 공개키 인증서에도 적용되고 있는 매우 중요한 암호 알고리즘이다. 대표적으로 IP 패킷 단위로 데이터 변조 방지 및 은닉 기능을 제공하는 프로토콜인 IPSec, 안전한 전자메일 보안 표준인 SMIME, 단 대단 보안을 제공하는 TLS와 SSL, 전자우편을 암호화하고, 받은 우편의 암호를 해석해주는 프로그램인 PGP, 네트워크 보안 도구 중 하나인 시큐어셸(SSH) 등 인증서 기반의 많은 보안 프로토콜에서 암호 프리미티브로 사용되고 있다.[3]
특징[편집]
- 입력된 메시지를 512비트 블록 단위로 처리하여, 160비트의 출력값(해시값)생성
- 입력 메세지 길이 상한 : 2⁶⁴
- 해시값 길이 : 160 비트 (20바이트)
- 패딩 처리 : 메세지 길이를 512 비트 단위(입력 블록 상한)로 잘라서 512 비트 정수배로 만듦
- 입력 블록 단위의 처리 : 32 비트 x 80개 값(W₀ ~ W₇₉)을 계산
- 블록 처리 : 1단계 처리[4]
비교[편집]
MD5[편집]
SHA-1은 MD5보다 빠르고 더 높은 보안성을 가지고 있다. 보안성이 강하다고 하는 것은 두 가지를 의미하는데, 메시지 다이제스트(message digest) 된 값을 보고 이것에 해당하는 원본 메시지를 찾는 것이 어렵다는 것과 똑같은 메시지 다이제스트 값을 생성하는 2개의 서로 다른 메시지를 찾는 것이 어려운 것을 말한다. 또한 SHA-1은 원본 메시지의 조그만 변화도 매우 급속하게 메시지 다이제스트에 변화를 전파합니다.[1]
SHA[편집]
SHA는 1993년에 미국표준기술연구소(NIST)가 제안해 미국의 연방정보처리표준규격(FIPS PUB 180)으로 발표되었다. 160비트의 해시값을 생성하며 일방향 해시함수라고 부른다. 일방향 해시 함수란 메시지를 해시값으로 변경하는 것은 가능하지만 해시값을 메시지로 변경하는 것이 불가능 한 것을 말한다. [2]
SHA-2[편집]
SHA-1과 SHA-2는 원본 데이터로부터 해시가 생성되는 방법과 서명의 비트 길이가 다르다. SHA-1은 160비트 해시이지만 SHA-2는 다양한 길이로 제공된다.
알고리즘 구현[편집]
패딩[편집]
패딩(padding)은 '메워 넣기'라는 의미로서, 메시지 다음에 여분의 데이터를 부가하여 메시지 길이가 512비트의 정수배가 되도록 한다. SHA-1에서는 이후의 처리를 쉽게 하기 위해 가장 첫 단계에서 패딩을 실행한다. 패딩 되는 비트 수는 1~512 사이이며 이 512 비트의 집합을 '입력 블록'이라고 한다. [2]
W₀ ~ W₇₉의 계산[편집]
패딩이 끝난 다음에는 입력 블록 단위의 처리가 이루어진다. 입력 블록 512비트마다 32비트 * 80개의 값(W₀ ~ W₇₉)을 계산한다. 이 80개의 값은 블록 처리 80단계에서 사용한다. 먼저 입력 블록 512비트를 32비트 * 16개로 분할하여 W₀ ~ W₁₅처럼 이름을 붙여 간다. W₁₅ 다음인 W₁₆ 부터는 다음과 그림과 같은 계산을 하고 1비트 회전(좌측 시프트 1회)한다.[2]
블록 처리[편집]
입력 블록의 정보를 기초로 내부상태(160비트)를 앞서 말한 80단계 처리를 통해 변화시킨다. 모든 블록에 해당하며 내부 상태 160비트는 A, B, C, D, E 라는 이름이 붙은 32비트 * 5개의 버퍼로 되어있다. [2]
문제점[편집]
현재는 모든 OS, 브라우저에서 SHA-1 알고리즘을 지원 중단하고 SHA-2 계열을 지원했다. 채택된지 10년 만에, 처음으로 취약점이 제기된 것이다. 따라서 2011년 1월 (NIST 문서 SP800-131A) SHA-2가 새로운 권장 해시 표준이 되었다. SHA-1의 취약점은 이론적인 이야기일 뿐이었지만 2016년에 암호화를 사용하는 세계의 주요 업체인 구글, 마이크로소프트 등에서 2018년 1월 1일까지 SHA-2로 전환을 의무화했다. 그 이유는 SHA-1은 160비트의 메세지 다이제스트를 생성하는데 무차별 대입 공격으로 동일한 해시를 만들 수 있는 취약점이 CWI암스테르담(CWI Amsterdam)과 구글의 공동 연구 끝에 제기되면서 SHA-1은 더 안전한 알고리즘이 아니며, 더는 사용되면 안된다고 판단했기 때문이다.[5] 2017년 중순에 구글에서 SHA-1 충돌 공격 성공을 발표함으로써 전 세계 대부분의 기업이 SHA-2로 전환을 완료했다.[6]
각주[편집]
- ↑ 1.0 1.1 늦둥이해커, 〈SHA-1 알고리즘〉, 《네이버 블로그》, 2009-06-24
- ↑ 2.0 2.1 2.2 2.3 2.4 hyeunjeekim, 〈Sha1〉, 《SlideShare》, 2014-09-24
- ↑ fl0ckfl0ck, 〈SHA-1 알고리즘〉, 《티스토리》, 2009-03-24
- ↑ 차재복, 〈해시알고리즘〉, 《정보통신기술용어해설》
- ↑ 알약, 〈SHA-1, 더이상 안전하지 않아〉, 《알약 블로그》, 2017-02-27
- ↑ 덜지, 〈SHA-1지원 중단으로 인한 SHA-2 표준 적용〉, 《티스토리》, 2018-09-18
참고자료[편집]
- 늦둥이해커, 〈SHA-1 알고리즘〉, 《네이버 블로그》, 2009-06-24
- 〈SHA〉 , 《위키백과》
- 차재복, 〈해시알고리즘〉, 《정보통신기술용어해설》
- 알약, 〈SHA-1, 더이상 안전하지 않아〉, 《알약 블로그》, 2017-02-27
- 덜지, 〈SHA-1지원 중단으로 인한 SHA-2 표준 적용〉, 《티스토리》, 2018-09-18
- fl0ckfl0ck,〈SHA-1 알고리즘〉, 《티스토리》, 2009-03-24
- hyeunjeekim, 〈Sha1〉, 《SlideShare》, 2014-09-24
같이 보기[편집]