검수요청.png검수요청.png

"SHA1"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(비교)
(알고리즘 구현)
34번째 줄: 34번째 줄:
  
 
=== 패딩 ===
 
=== 패딩 ===
패딩이란 '메워 넣기'라는 의미를 가지며, 메시지 다음에 여분의 데이터를 부가하여 메시지 길이가 512비트의 정수배가 되도록 한다.  SHA-1에서는 이후의 처리를 쉽게 하기 위해 가장 처음 단계에서 패딩을 실행한다. 패딩되는 비트수는 1~512 사이이며 이 512 비트의 집합을 '입력 블록'이라고 한다. <ref name = "SHA 알고리즘" >hyeunjeekim, 〈[https://www.slideshare.net/hyeunjeekim/sha1-39504438 Sha1]〉, 《SlideShare》, 2014-09-24 </ref>
+
패딩이란 '메워 넣기'라는 의미를 가지며, 메시지 다음에 여분의 데이터를 부가하여 메시지 길이가 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₇₉의 계산 ===
패팅이 끝난 다음에는 입력 블록 단위의 처리가 이루어진다. 입력 블록 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> [[파일: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> [[파일:Sha알고리즘.PNG|썸네일|300픽셀|'''W₀ ~ W₇₉의 계산''']]
  
 
=== 블록 처리 ===
 
=== 블록 처리 ===
입력 블록의 정보를 기초로 내부상태(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>
  
 
== 문제점==
 
== 문제점==

2019년 7월 1일 (월) 13:55 판

SHA-1은 SHA-0을 변형된 SHA 함수들 중 하나이며, SHA 함수들 중 가장 많이 쓰이고 있다.

개요

SHA-1은 임의의 길이의 입력데이터를 106비트의 출력데이터로 바꾸는 것이다.[1] 1995년에 발표된 개정판 FIPS PUB 180-1로 발표되었고 메시지 길이에 대한 상한이 존재한다. [2]

SHA-1 압축 함수가 블록 하나를 처리하는 과정. A, B, C, D, E는 각각 32비트 내부 상태이고, F는 계속 변하는 비선형 함수이며, Kt는 상수이다. <<<n은 n비트만큼 왼쪽으로 회전하는 연산이고, 사각형 네개를 붙인 모양은 2³² 모듈로 덧셈을 나타낸다.

출연 배경

1993년에 미국 표준 기술 연구소(NIST)에서 SHA-0(안전한 해시 표준)이 출판된 이후 얼마 안 있어 NDA는 SHA-0을 폐기했고, 1995년에 개장된 알고리즘(FIPS PUB 180-1)을 새로 출판했다. 이 새로운 알고리즘을 SHA-1이라고 부른다. SHA-1은 SHA-0의 압축함수에 비트 회전 연산을 하나 추가한 것으로, NSA에 따르면 이는 원래 알고리즘에서 암호학적 보안을 감소시키는 문제점을 고친 것이라고 한다. 하지만 실제로 어떤 문제점이 있었는지 공개하지 않았다. 일반적으로 SHA-1은 SHA-0보다 암호학적 공격이 힘든 것으로 알려져 있고, 따라서 보안에 대한 문제점을 보완한 NSA의 주장은 어느 정도 설득력이 있다. SHA-1은 최대 2⁶⁴비트 메세지로부터 160비트 해시값을 만들어내고, 로널드 라이베스트가 MD4 및 MD5 해시 함수에서 사용했던 것과 비슷한 방법을 사용한다.

용도

  • 서명문 생성을 위한 알고리즘

현재 발표된 SHA-1 알고리즘은 많은 인터넷 보안 프로토콜과 공개키 인증서에도 적용되고 있는 매우 중요한 암호 알고리즘이다. 대표적으로 인터넷 보안 프로토콜인 IPSec, 안전한 전자메일 보안 표준인 SMIME, 단 대단 보안을 제공하는 TLS와 SSL, 컴퓨터 파일을 암호화하고 복호화하는 프로그램인 PGP, 네트워크상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용프로그램 또는 프로토콜인 SSH 등 인증서 기반의 많은 보안 프로토콜에서 암호 프리미티브로 사용되고 있다.[3]

특징

  • SHA-1은 입력된 메시지를 512비트 블록 단위로 처리하여, 160비트의 출력값(해시값)생성
  • 입력 메세지 길이 상한 : 2⁶⁴
  • 해시값 길이 : 160 비트 (20바이트)
  • 주요 처리 : 패딩 처리(메세지 길이를 512 비트 단위(입력 블록 상한)로 잘라서 512 비트 정수배로 만듦, 입력 블록 단위의 처리 (32 비트 * 80개 값(W₀ ~ W₇₉)을 계산, 블록 처리, 1단계 처리[4]

비교

MD5

SHA-1은 MD5보다 빠르고 보안성이 더 강화되었다. 보안성이 강하다고 하는 것은 message digest 된 값을 보고 이것에 해당하는 원본 메시지를 찾는 것이 어렵고 똑같은 message digest 값을 생성하는 2개의 서로 다른 메시지를 찾는 것이 어려운 것을 말한다. 또한 SHA-1은 원본 메시지의 조그만 변화도 매우 급속하게 message digest에 변화를 전파합니다.[1]

SHA

SHA는 1993년에 NIST에서 제안해 미국의 연방정보처리표준규격(FIPS PUB 180)으로 발표되었다. 160비트의 해시값을 생성하며 일방향 해시함수라고 부른다. 일방향 해시 함수란 메시지를 해시값으로 변경하는 것은 가능하지만 해시값을 메시지로 변경하는 것이 불가능 한 것을 말한다. [2]

SHA-2

SHA-1과 SHA-2는 원본 데이터로부터 헤시가 어떻게 생성되는지와 서명의 비트 길이가 다르다. SHA-1은 160비트 해시이지만 SHA-2는 다양한 길이로 제공된다.

알고리즘 구현

패딩

패딩이란 '메워 넣기'라는 의미를 가지며, 메시지 다음에 여분의 데이터를 부가하여 메시지 길이가 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]
W₀ ~ W₇₉의 계산

블록 처리

입력 블록의 정보를 기초로 내부상태(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년에 암호화를 사용하는 세계의 주요 업체(구글, MS 등)에서 2018년 1월 1일까지 SHA-2로 전환을 의무화했다. 그 이유는 SHA-1은 160비트의 메세지 다이제스트를 생성하는데 무차별 대입 공격으로 동일한 해시를 만들 수 있는 취약점이 CWI Amsterdam과 구글의 공동 연구 끝에 제기되면서 SHA-1은 더 안전한 알고리즘이 아니며, 더 는 사용되면 안된다고 판단했기 때문이다.[5] 2017년 중순에 구글에서 SHA-1 충돌 공격 성공을 발표함으로써 전 세계 대부분의 기업이 SHA-2로 전환을 완료했다.[6]

각주

  1. 1.0 1.1 늦둥이해커, 〈SHA-1 알고리즘〉, 《네이버 블로그》, 2009-06-24
  2. 2.0 2.1 2.2 2.3 2.4 hyeunjeekim, 〈Sha1〉, 《SlideShare》, 2014-09-24
  3. fl0ckfl0ck, 〈SHA-1 알고리즘〉, 《티스토리》, 2009-03-24
  4. 차재복, 〈해시알고리즘〉, 《정보통신기술용어해설》
  5. 알약, 〈SHA-1, 더이상 안전하지 않아〉, 《알약 블로그》, 2017-02-27
  6. 덜지, 〈SHA-1지원 중단으로 인한 SHA-2 표준 적용〉, 《티스토리》, 2018-09-18

참고자료

같이 보기


  검수요청.png검수요청.png 이 SHA1 문서는 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.