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

"SHA2"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이보기)
(개요)
 
(사용자 4명의 중간 판 141개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''SHA-2'''(Secure Hash Algorithm 2)는 미국 국가안보국(NSA)설계한 암호화 [[해시]] 함수들의 집합이다.
+
'''SHA-2'''(Secure Hash Algorithm 2)<!--sha2, sha-2, 샤2, 샤-2, Secure Hash Algorithm 2, SecureHashAlgorithm2-->[[미국국가안전보장국]](NSA)이 2001년에 설계한 [[암호화]] [[해시]] 함수들의 집합이다.
 +
 
 
== 개요 ==
 
== 개요 ==
암호 해시 함수는 디지털 데이터 상에서 수학적으로 동작하는 것으로 알려져있고 예측된 해시값에 대해 계산된 해시(알고리즘의 실행 출력)를 비교함으로써 사람이 데이터의 무결성을 파악할 수 있게 된다. 이를테면 다운로드한 파일의 해시를 계산한 다음 이전에 게시한 해시 결과물의 결과와 비교하면 다운로드한 파일이 수정 또는 조작되었는지 알 수 있다. 암호 해시 함수의 주요 개념은 [[충돌 회피]]이다. 즉, 누구도 동일한 해시 출력 결과가 있는 두 개의 다른 입력값을 알아낼 수 없다. SHA-2는 전작 [[SHA-1]]으로부터 상당한 변경사항을 포함하고 있고, SHA-2 계열은 224, 256, 384, 512비트로 된 [[다이제스트]](해시 값)이 있는 6개의 해시 함수를 구성하고 있다. 'SHA-224, SHA-256, SHA-512, SHA-512/224, SHA-512/256'.
+
암호 해시 함수는 디지털 [[데이터]] 상에서 수학적으로 동작하는 것으로 알려져있는데, 이를 통해 예측된 해시값에 대해 계산된 해시(알고리즘의 실행 출력)를 비교함으로써 데이터의 [[무결성]]을 파악할 수 있다. 이를테면 [[다운로드]]한 파일의 해시를 계산한 다음 이전에 게시한 해시 결과물의 결과와 비교하면 다운로드한 파일이 수정 또는 조작되었는지 알 수 있다. 암호 [[해시]] 함수의 주요 개념은 [[충돌 회피]]이다. 이는 곧 누구도 동일한 해시 출력 결과가 있는 두 개의 다른 입력 값을 알아낼 수 없는 것을 의미한다. [[SHA-2]]는 전작 [[SHA-1]]으로부터 상당한 변경사항을 포함하고 있고, SHA-2 계열은 224, 256, 384, 512비트로 된 [[다이제스트]](해시값)이 있는 6개의 해시 함수를 구성하고 있다. '[[SHA-224]], [[SHA-256]], [[SHA-384]], [[SHA-512]], [[SHA-512/224]], [[SHA-512/256]]'.<ref name="SHA-2 위키백과">〈[https://ko.wikipedia.org/wiki/SHA-2 SHA-2]〉, 《위키백과》</ref>
  
 
== 등장배경 ==
 
== 등장배경 ==
1993년에 미국 국립표준기술연구소(NIST)에서 SHA-0을 미국 연방 정보 처리표준(FIPS PUB 180)으로 채택하고, 암호확적으로 심각한 결함이 발견됨에 따라 SHA-0 표준을 폐기하고, 1995년에 SHA-1(FIPS PUB 180-1)을 표준으로 채택하였으나 마찬가지로 해독 방법이 제시되어, 2002년에 미국 국가안보국(NSA)에서 설계한 SHA-2 새롭게 공표하게 되었다
+
1993년에 [[미국표준기술연구소]](NIST)에서 [[SHA-0]]을 미국 연방 정보 처리 표준(FIPS PUB 180)으로 채택하고, 암호학적으로 심각한 결함이 발견됨에 따라 [[SHA-0]] 표준을 폐기한 후 1995년에 [[SHA-1]](FIPS PUB 180-1)을 표준으로 채택하였으나 마찬가지로 해독 방법이 제시되어, 2002년에 미국 국가안보국(NSA)에서 설계한 [[SHA-2]]가 새롭게 공표되었다.<ref>〈[https://terms.naver.com/entry.nhn?docId=3436585&cid=42346&categoryId=42346 SHA]〉, 《네이버 IT용어사전》</ref>
 +
 
 +
== 상용화 과정 ==
 +
 
 +
[[파일:SHA-2.PNG|오른쪽|300픽셀|썸네일|SHA-2 그림1]]
 +
[[파일:SHA-2-1.PNG|오른쪽|300픽셀|썸네일|SHA-2 그림2]]
  
== SHA-2의 상용화 ==
+
* '''SHA-1에 대한 공격'''
2005년 부터 SHA-1에 대한 여러 가지 이론적 공격이 공개적으로 문서화되기 시작했다. SHA-1 공격이 거듭되면서 2012년에는 이론적으로 SHA-1의 보호 기능이 최대 평균 159비트에서 57.5 ~ 61비트 수준으로 낮아질 것으로 보았다. 하지만 그 오랜 시간 동안 이는 단순한 이론적 공격일 뿐이었지만, 시간이 경과함에 따라 이론적 공격이 실제 공격으로 바뀔 것임을 예상했고, 그 에상은 5년이란 시간이 자난 후였지만 현실화가 됐다. 그렇게 오래된 암호는 시간이 지나면 깨진다는 것은 모든 암호화에서 예상되는 결과였고, 미국 국립표준기술연구소(NIST)는 미국 국가 안보국(NSA)함께 누구나 새로 만든 암호를 제안할 수 있는 공개 대회를 정기적으로 개최하고 제안된 암호를 검토해 표준 암호로 선정하는 것이다(대표적으로 선정된 암호는 AES(Advanced Encryption Standard), SHA-3 등). 하지만 SHA-2는 공개적인 대회를 통해 만들어지지는 않았지만  미국 국가 안보국(NSA)이 설계하고 공용 특허로 미국 국립표준기술연구소(NIST)이 발표하여 2011년 1월(NIST 문서 SP800-131A), SHA-2가 새로운 권장 해시 표준이 됐다'(공표가 된 것은 2002년 NIST가 SHA-2(FIPS PUB 180-2)를 공표)'. SHA-2는 224, 256, 384, 512비트 다이제스트를 포함해 여러 가지 길이의 해시를 포함하므로 SHA-2 해시 '군(famliy)'으로 불리며(각 다이제스트는 관련 NIST 연방 정보 처리 표준 문서에서 논의 및 릴리스됨), 또한 이름만으로는 다른 사람이 사용하는 SHA-2 비트 길이를 알 수 없지만 256비트인 SHA-256이 가장 많이 채용되어지고 있다.  
+
: 2005년 부터 [[SHA-1]]에 대한 여러 가지 이론적 공격이 공개적으로 문서화되기 시작했다. SHA-1을 향한 공격이 거듭되면서 2012년에는 이론적으로 SHA-1의 보호 기능이 최대 평균 159비트에서 57.5 ~ 61비트 수준으로 낮아질 것으로 보았다. 이는 오랜 시간 동안 단순한 이론적 공격일 뿐이라고 치부되었지만, 시간이 경과함에 따라 더이상 이론적 공격이 아닌 실질적인 공격으로 바뀔 수 있음을 예상했고, 그 예상은 5년이란 시간이 지난 후에 현실화 됐다. 시간이 지나면 오래된 암호가 해독될 수 있다는 것은 모든 [[암호화]] 과정에서 예상되는 결과였기 때문에, 이에 대한 대비책으로 [[미국표준기술연구소]](NIST)는 [[미국국가안전보장국]](NSA)함께 누구나 새로 만든 암호를 제안할 수 있는 공개 대회를 정기적으로 개최하고 제안된 암호를 검토해 표준 암호로 선정하는 작업을 시작했다. 이 대회에서 선정된 대표적인 표준 암호로 [[AES]](Advanced Encryption Standard)와 [[SHA-3]] 등이 있다.
  
이렇게 SHA-1에 대한 성공적인 공격이 이뤄지고 2011년부터 SHA-2가 NIST의 필수 해시 표준이 되었지만 전 세계적으로 대부분의 환경은 2016년까지 SHA-2로 전환되지 않았다. 왜냐 사람들은 위험에는 즉각적으로 반응하지만, 당시에는 공개적인 SHA-1 공격은 이론상의 이야기일 뿐이었기 때문이다. 2015년, 암호화를 사용하는 세계의 주요 개발업체는 고객을 대상으로 2018년 1월 1일까지 SHA-1에서 SHA-2로의 전환을 의무화하기로 했다. 이유는 이론으로만 전해지던 공격이 실제로 이어질 것을 확신했기 때문이다. 그렇게 대부분의 기업은 암호화에 의존하는 모든 프로그램 또는 기기를 서둘러 SHA-2로 마이그레이션 했고, 2017년 초반까지 많은 고객이 SHA-2로 마이그레이션 하여 적절한 시기에 마이그레이션을 마쳤다고 볼 수 있다. 이유는 2017년 2월 23일 구글은 실제 SHA-1 충돌 공격이 성공했음을 발표했고, 동일한 SHA-1 해시를 가진 두 개의 PDF 파일을 제시해 이를 입증했기 때문이다. 이 공격으로 인해 기존에 있던 SHA-1을 완전히 깨졌다고 할 수 있었다. 하지만 글로벌 마이그레이션 시점은 적절한 시기에 잘 이루어졌다고 할 수 있다. 기존에 SHA-1이 깨지기 직전에 전 세계 대부분의 환경에서 SHA-2로의 전환을 성공적으로 마쳤고, 마이그레이션을 하지 않았던 기업들은 기존에 먼저 마이그레이션을 한 기업들 덕분에 훨씬 더 쉽게 마이그레이션을 할 수 있게 되었다. 그 결과 이미 수많은 기업이 이미 성공적인 마이그레이션을 완료하여 웹에서는 마이그레이션 방법에 대한 지침을 쉽게 찾을 수 있었고, 개발업체는 즉각적으로 마이그레이션을 할 준비가 되어있었으며, 대부분의 소프트웨어와 하드웨어 업체 역시 이미 준비가 되어있었기 때문이다. SHA-1에서 SHA-2로의 마이그레이션 계획, 즉 상용화 일정은 완전히 성공했다.
+
: SHA-2는 공개적인 대회를 통해 만들어지지는 않았지만  미국국가안전보장국이 설계하고 미국표준기술연구소가 공용 특허로 발표하여 2011년 1월(NIST 문서 SP800-131A), SHA-2가 새로운 권장 해시 표준이 됐다. 하지만 SHA-2가 공표된 시기는 이보다 훨신 이전으로, 2002년 미국표준기술연구소에 의해 [[FIPS PUB 180-2]]로 공표되었다. SHA-2는 224, 256, 384, 512비트 다이제스트를 포함한 여러 가지 길이의 해시를 포함한다고 하여 SHA-2 해시'군(famliy)'으로 불린다. 각 다이제스트는 관련 미국표준기술연구소 연방 정보 처리 표준 문서에서 논의 및 출시된다. 이름만으로는 다른 사람이 사용하는 SHA-2 비트 길이를 알 수 없지만 256비트인 [[SHA-256]]이 가장 많이 활용되고 있다. <ref name="SHA 상용화"> Roger A. Grimes|CSO, 〈[http://www.itworld.co.kr/opinion/108321%20sha-2 왜 SHA-3을 사용하지 않는가]〉, 《아이티월드》, 2018-02-23</ref>
  
* SHA-1과의 차이점
+
* '''SHA-1에서 SHA-2로의 느린 이동'''
**SHA-1과 SHA-2는 동일하지는 않지만 똑같은 암호화 결함을 갖고있으며 동일한 수학적 기반을 일부 공유하고 있다. 하지만 SHA-2가 더 안전하다고 평가받는 이유는 SHA-1보다 SHA-2의 해시 길이가 더 크기 때문이다. 제일 많이 사용되는 SHA-256과 비교하자면 SHA-1의 해시 길이는 160비트인 것에 불과하지만 SHA-256는 해시 길이가 256비트이기 때문에 더 안전하다는 것이다.
+
: SHA-1에 대한 성공적인 공격이 이뤄지고 2011년부터 SHA-2가 미국표준기술연구소의 필수 해시 표준이 되었지만 전 세계적으로 대부분의 환경은 2016년까지 SHA-2로 전환되지 않았다. 당시 사람들은 SHA-1를 향한 공격이 즉각적으로 반응해야 할 위험이 아닌, 단지 이론상의 이야기일 뿐이라고 생각했기 때문이다. 2015년, 암호화를 사용하는 세계의 주요 개발업체는 고객을 대상으로 2018년 1월 1일까지 SHA-1에서 SHA-2로의 전환을 의무화하기로 했다. 이유는 이론으로만 전해지던 공격이 실제로 이어질 것을 확신했기 때문이다. 그렇게 대부분의 기업은 암호화에 의존하는 모든 프로그램 또는 기기를 서둘러 SHA-2로 [[마이그레이션]] 했고, 2017년 초반까지 많은 고객이 SHA-2로 이동하여 적절한 시기에 마이그레이션을 마쳤다고 볼 수 있다. 그 배경에는 2017년 2월 23일 [[구글]]이 실제 SHA-1 충돌 공격이 성공했음을 발표했고, 동일한 SHA-1 해시를 가진 두 개의 [[PDF]]파일을 제시해 이를 입증한 사실이 있었다.
  
* SHA-2에 대한 공격
+
: 마침내 기존에 있던 SHA-1에서 SHA-2로의 완전한 이동이 이루어졌으며, 그 시기 또한 매우 적절했다고 평가받는다. 기존 SHA-1이 깨지기 직전에 전 세계 대부분의 환경에서 SHA-2로의 전환을 성공적으로 마쳤고, 마이그레이션을 하지 않았던 기업들은 기존에 먼저 마이그레이션을 한 기업들 덕분에 훨씬 쉽게 마이그레이션을 할 수 있었기 때문이다. 수많은 기업이 마이그레이션을 완료하여 [[웹]]에서는 마이그레이션 방법에 대한 지침을 쉽게 찾을 수 있었고, 그 지침을 바탕으로 개발업체는 즉각적으로 마이그레이션을 할 준비가 되어있었으며, 대부분의 [[소프트웨어]]와 [[하드웨어]] 업체 역시 마이그레이션에 대한 대비가 되어있었기 때문이다. SHA-1에서 SHA-2로의 마이그레이션 계획, 즉 상용화 일정은 완전히 성공했다.<ref name="SHA 상용화"></ref>
**SHA-2에 대한 공격은 2008년부터 발생하기 시작했고, SHA-1의 경우와 마찬가지로 SHA-2에 대한 공격 역시 점점 박차를 가하며 SHA-2마저 약화시키고 있다. 일부 공격은 SHA-2의 유효 보호 수준을 237비트까지 낮췄고 2016년에 발표된 일부 최근 공격을 보면 SHA-2 공격은 이미 "실용" 단계에 있다고 할 수 있다. 불과 2~3년 전 SHA-1과 비슷한 상황이 이어지고 있다. 앞에 언급했듯이 시간이 지나면서 기존 암호가 공격을 받고 약화되는 것은 예상 가능한 일이고, 실제로 NIST에서는 SHA-2에서 파생되지 않은 새로운 해시 표준을 미리 확보하기 위한 목적으로 앞서 언급한 공개 대회를 통해 SHA-3을 선정하였다. 이렇게 NIST는 2015년에 초안 표준을 공표하였고, 2015년 8월 5일에는 SHA-3가 공식 권장 표준이 됐다.
 
  
* SHA-3로 전환하지 않은 이유
+
* '''SHA-1과의 차이점'''
**여기서 SHA-1을 포기하고, 대부분의 마이그레이션 작업은 2016년 후반에서 2017년 사이에 이뤄졌고, SHA-1 전환의 공식 마감 날짜인 2017년 12월 31일 임에도 불구하고, 3년이란 시간이 있었는데 왜 SHA-3로 마이그레이션(전환)하라고 권하지 않은 이유로는 3가지가 있다. 1. SHA-3를 지원하는 소프트웨어 또는 하드웨어가 사실상 전무했다. SHA-3로 전환하고 싶어도 소유하거나 사용하고 있는 모든 기기를 위한 코드와 펌웨어를 본인이 직접 작성하지 않는 한 방법이 없다는 것, 2. SHA-3는 SHA-2의 마이그레이션 계획이 이미 수립된 시점에서 비교적 새로운 표준이었고, 초기 SHA-1 폐기 회의가 열릴 당시 SHA-3는 공식 표준도 아니었다는 점과 SHA-1에서 파생되긴 했지만 SHA-1만큼 악용의 소지가 없었다는 점, 3. SHA-3는 SHA-2에 비해 훨씬 더 속도가 느리다는 것이 중론이었다. 결국 더 느리고 필요하지도 않은 것을 권장할 이유는 없었기 때문에 SHA-3로 전환을 권장하지 않았던 것이다.
+
: SHA-1과 SHA-2는 같은 [[암호화]] 결함을 갖고 있으며 동일한 수학적 기반을 일부 공유하고 있다. 그럼에도 불구하고 SHA-2가 더 안전하다고 평가받는 이유는 SHA-1보다 SHA-2의 해시 길이가 더 길기 때문이다. 가장 많이 사용되는 [[SHA-256]]과 비교하면 SHA-1의 해시 길이는 160비트에 불과하고 [[SHA-256]]는 해시 길이가 256비트이기 때문에 더 안전하다는 것이다.<ref name="SHA 상용화"></ref>
 +
 
 +
* '''SHA-2에 대한 공격'''
 +
: SHA-2에 대한 공격은 2008년부터 발생하기 시작했는데, SHA-1의 경우와 마찬가지로 SHA-2에 대한 공격 역시 점점 더 박차를 가하며 SHA-2 마저 약화시켰다. 일부 공격은 SHA-2의 유효 보호 수준을 237비트까지 낮췄고, 2016년에 발표된 일부 최근 공격을 보면 SHA-2 공격은 이미 실용 단계에 있다고 할 수 있었다. 즉, SHA-2 또한 불과 2~3년 전의 SHA-1과 비슷한 상황에 놓인 것이다. 앞에 언급했듯이 시간이 지나면서 기존 암호가 공격을 받고 약화되는 것은 예상 가능한 일이었기 때문에, 미국표준기술연구소에서는 SHA-2에서 파생되지 않은 새로운 [[해시 표준]]을 미리 확보하기 위한 목적으로 앞서 언급한 공개 대회를 통해 [[SHA-3]]을 선정하였다. 이렇게 미국표준기술연구소는 2015년에 초안 표준을 공표하였고, 2015년 8월 5일에는SHA-3가 공식 권장 표준이 됐다.<ref name="SHA 상용화"></ref>
 +
 
 +
* '''SHA-3로 전환하지 않은 이유'''
 +
: SHA-1을 폐기해야 하는 상황에서 대부분의 마이그레이션 작업은 2016년 후반에서 2017년 사이에 이뤄졌다. 많은 사람들이 SHA-1 전환의 공식적인 마감 날짜는 2017년 12월 31일이었으며, 3년이라는 준비 시간이 있었음에도 SHA-3이 아닌 SHA-2으로 전환한 이유에 대해 궁금해한다. 세 가지 이유가 있는데, 첫 번째는 SHA-3을 지원하는 [[소프트웨어]] 또는 [[하드웨어]]가 사실상 전무했기 때문이다. SHA-3으로 전환하고 싶어도 소유하거나 사용하고 있는 모든 기기를 위한 [[코드]]와 [[펌웨어]]를 본인이 직접 작성하지 않는 한 방법이 없었다. 두 번째 이유는 SHA-3은 SHA-2의 마이그레이션 계획이 이미 수립된 시점에서 비교적 새로운 표준이었다는 것이다. 초기 SHA-1 폐기 회의가 열릴 당시 SHA-3은 공식 표준도 아니었고 SHA-2는 일부분이 SHA-1에서 파생되긴 했지만 SHA-1만큼 악용의 소지가 없었다. 마지막으로 SHA-3는 SHA-2에 비해 현저히 느린 속도를 가지고 있었다. 더 느리고 필요하지도 않은 것으로의 마이그레이션을 권장할 이유는 없었기 때문에 SHA-3으로의 전환을 권장하지 않았다.<ref name="SHA 상용화"></ref>
  
 
== 종류 ==
 
== 종류 ==
SHA-2 계열은 224, 256, 384, 512비트로 된 [[다이제스트]](해시값)이 있는 6개의 해시 함수를 구성하고 있다.
+
[[SHA-2]] 계열은 224, 256, 384, 512비트로 된 [[다이제스트]](해시값)이 있는 6개의 해시 함수를 구성하고 있다.<ref name="SHA-2 위키피디아">〈[https://en.wikipedia.org/wiki/SHA-2 SHA]〉, 《위키피디아》</ref>
  
=== SHA-224 ===
+
* '''SHA-224''' : SHA-224는 2004년 2월 업데이트 된 [[SHA-2]]의 다른 버전으로, [[SHA-256]]으로 계산하다가 마지막에 출력을 224비트로 줄이는 [[알고리즘]]이다. SHA-224는 224비트(28 바이트) 해시값을 생성하며 일반적으로 56자리 길이의 16진수로 [[렌더링]]된다.<ref name="모바일피쉬">〈[https://www.mobilefish.com/services/hash_generator/hash_generator.php MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator]〉, ''MOBILEFISH''</ref><ref name="솔라나라">윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04</ref> {{자세히|SHA-224}}
SHA-224는 SHA-256을 두 가지 방법으로 수정하여 정의되었다. 1. 256비트에서 32비트를 뺀 224비트로 줄여, 유효 보안 수준이 2의 224제곱을 갖고 있어 충돌 발견에 소요되는 예상 비용을 줄였고, 2. 다른 초기화 값. 즉, SHA-224가 SHA-256에 대한 정보를 노출하지 않도록 한다(또는 그 반대도 마찬가지). 하지만 상위 버전인 SHA-256이 있기 때문에 자주 쓰이는 편은 아니나 해시가 많은 경우와 타원 곡선 그룹에 매핑 할 때는 유용하게 쓰일 수 있다.
 
* 단점
 
**SHA-256보다 효율이 떨어진다. 128비트 이상 256비트 이하의 해시를 원하는 경우, SHA-256을 사용하여 원하는 비트 길이로 출력하는 것이 SHA-224를 사용하는 것만큼 간단하고 효율적이기 때문이다.
 
  
=== SHA-256 ===
+
* '''SHA-256''' : SHA-256는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과 값을 출력한다. 일반적으로 입력 값이 조금만 변동하여도 출력 값이 완전히 달라지기 때문에 출력 값을 토대로 입력 값을 유추하는 것은 거의 불가능하다. 아주 작은 확률로 입력 값이 다름에도 불구하고 출력 값이 같은 경우가 발생하는데 이것을 충돌이라고 한다. 이러한 충돌의 발생 확률이 작을수록 좋은 함수라고 평가된다. {{자세히|SHA-256}}
SHA-256은 현재 블록체인에서 가장 많이 채택하여 사용되고 있는 암호 방식이다. SHA-256은 256비트로 구성되어 62자리 문자열을 반환하며 유효 보안 수준 2의 256제곱만큼을 가지고 있어 무차별 대입을 수행해 해시 충돌에 비교적 안전하다고 할 수 있다.
 
* 단점
 
**SHA-2에 대한 공격은 2008년부터 발생하기 시작했고, SHA-1의 경우와 마찬가지로 SHA-2에 대한 공격 역시 점점 더 박차를 가하며 SHA-2마저 약화시키고 있다. 일부 공격은 SHA-2의 유효 보호 수준을 237비트까지 낮췄고 2016년에 발표된 일부 최근 공격을 보면 SHA-2 공격은 이미 "실용" 단계에 있다고 할 수 있다. 따라서 추후 방법을 찾아야 한다는 것이다.
 
  
=== SHA-384 ===
+
* '''SHA-384''' : SHA-384는 2001년 SHA-1을 대체하기 위해 SHA-256, SHA-512와 같이 만들어진 만든 [[해시]] [[알고리즘]]이다. 384비트(48바이트)의 해시값을 생성하고, 일반적인 길이는 96자리 인 16진수로 [[렌더링]]이 된다. 현재 표준 알고리즘으로 널리사용되고 있다.<ref name="솔라나라">윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04</ref><ref name="모바일피쉬"></ref> {{자세히|SHA-384}}
  
=== SHA-512 ===
+
* '''SHA-512''' : SHA-512는 SHA-2가 생성하는 다이제스트 출력 길이의 종류 중 하나이다. SHA-512는 46~80 라운드를 통과해야 공격으로부터 안전하다고 판단하며, 1024 비트를 1개의 [[패딩]] 메시지로 만든다.<ref name="티핀">티핀, 〈[https://blog.naver.com/tpinlab/10121774937 SHA-2(Secure Hash Algorithm 2) 알고리즘 분석하기 (이론 1편)]〉, 《네이버 블로그》, 2011-10-19</ref> {{자세히|SHA-512}}
  
=== SHA-512/224 ===
+
* '''SHA-512/224''' : 2012년 3월에 업데이트 된 SHA-512의 축소 버전이다. 알고리즘은 SHA-512와 동일하게 계산하지만, 최종 값 도출에 SHA-224와 같은 길이로 결과 값을 축소한다. SHA-512이 32비트 프로세서인 SHA-256보다 64비트 [[프로세서]]에서 계산이 빠르기 때문에 개발되었다.<ref name="솔라나라">윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04</ref> {{자세히|SHA-512/224}}
  
=== SHA-512/256 ===
+
* '''SHA-512/256''' : 2012년 3월에 업데이트 된 SHA-512의 축소 버전이다. 알고리즘은 SHA-512와 동일하게 계산하지만, 최종 값 도출에 SHA-256과 같은 길이로 결과 값을 축소한다. SHA-512이 32비트 프로세서인 SHA-256보다 64비트 [[프로세서]]에서 계산이 빠르기 때문에 개발되었다. SHA-512/224와 출력 비트 크기 외에는 다 똑같다고 할 수 있다.<ref name="솔라나라">윈디하나, 〈[https://www.solanara.net/solanara/digestsolaris 해시알고리즘 비교]〉, 《윈디하나의 솔라나라》, 2011-09-04</ref> {{자세히|SHA-512/256}}
 +
 
 +
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
 +
*〈[https://ko.wikipedia.org/wiki/SHA-2 SHA-2]〉, 《위키백과》
 +
*〈[https://en.wikipedia.org/wiki/SHA-2 SHA]〉, 《위키피디아》
 +
*〈[https://terms.naver.com/entry.nhn?docId=3436585&cid=42346&categoryId=42346 SHA]〉, 《네이버 IT용어사전》
 +
* Roger A. Grimes, 〈[http://www.itworld.co.kr/opinion/108321%20sha-2 왜 SHA-3을 사용하지 않는가]〉, 《아이티월드》, 2018-02-23
 +
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[SHA-1]]
 
* [[SHA-1]]
 +
* [[SHA-224]]
 +
* [[SHA-256]]
 +
* [[SHA-384]]
 +
* [[SHA-512]]
 +
* [[SHA-512/224]]
 +
* [[SHA-512/256]]
 +
* [[SHA-3]]
  
{{알고리즘|검토 필요}}
+
{{암호 알고리즘|검토 필요}}

2023년 4월 11일 (화) 21:27 기준 최신판

SHA-2(Secure Hash Algorithm 2)는 미국국가안전보장국(NSA)이 2001년에 설계한 암호화 해시 함수들의 집합이다.

개요[편집]

암호 해시 함수는 디지털 데이터 상에서 수학적으로 동작하는 것으로 알려져있는데, 이를 통해 예측된 해시값에 대해 계산된 해시(알고리즘의 실행 출력)를 비교함으로써 데이터의 무결성을 파악할 수 있다. 이를테면 다운로드한 파일의 해시를 계산한 다음 이전에 게시한 해시 결과물의 결과와 비교하면 다운로드한 파일이 수정 또는 조작되었는지 알 수 있다. 암호 해시 함수의 주요 개념은 충돌 회피이다. 이는 곧 누구도 동일한 해시 출력 결과가 있는 두 개의 다른 입력 값을 알아낼 수 없는 것을 의미한다. SHA-2는 전작 SHA-1으로부터 상당한 변경사항을 포함하고 있고, SHA-2 계열은 224, 256, 384, 512비트로 된 다이제스트(해시값)이 있는 6개의 해시 함수를 구성하고 있다. 'SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256'.[1]

등장배경[편집]

1993년에 미국표준기술연구소(NIST)에서 SHA-0을 미국 연방 정보 처리 표준(FIPS PUB 180)으로 채택하고, 암호학적으로 심각한 결함이 발견됨에 따라 SHA-0 표준을 폐기한 후 1995년에 SHA-1(FIPS PUB 180-1)을 표준으로 채택하였으나 마찬가지로 해독 방법이 제시되어, 2002년에 미국 국가안보국(NSA)에서 설계한 SHA-2가 새롭게 공표되었다.[2]

상용화 과정[편집]

SHA-2 그림1
SHA-2 그림2
  • SHA-1에 대한 공격
2005년 부터 SHA-1에 대한 여러 가지 이론적 공격이 공개적으로 문서화되기 시작했다. SHA-1을 향한 공격이 거듭되면서 2012년에는 이론적으로 SHA-1의 보호 기능이 최대 평균 159비트에서 57.5 ~ 61비트 수준으로 낮아질 것으로 보았다. 이는 오랜 시간 동안 단순한 이론적 공격일 뿐이라고 치부되었지만, 시간이 경과함에 따라 더이상 이론적 공격이 아닌 실질적인 공격으로 바뀔 수 있음을 예상했고, 그 예상은 5년이란 시간이 지난 후에 현실화 됐다. 시간이 지나면 오래된 암호가 해독될 수 있다는 것은 모든 암호화 과정에서 예상되는 결과였기 때문에, 이에 대한 대비책으로 미국표준기술연구소(NIST)는 미국국가안전보장국(NSA)과 함께 누구나 새로 만든 암호를 제안할 수 있는 공개 대회를 정기적으로 개최하고 제안된 암호를 검토해 표준 암호로 선정하는 작업을 시작했다. 이 대회에서 선정된 대표적인 표준 암호로 AES(Advanced Encryption Standard)와 SHA-3 등이 있다.
SHA-2는 공개적인 대회를 통해 만들어지지는 않았지만 미국국가안전보장국이 설계하고 미국표준기술연구소가 공용 특허로 발표하여 2011년 1월(NIST 문서 SP800-131A), SHA-2가 새로운 권장 해시 표준이 됐다. 하지만 SHA-2가 공표된 시기는 이보다 훨신 이전으로, 2002년 미국표준기술연구소에 의해 FIPS PUB 180-2로 공표되었다. SHA-2는 224, 256, 384, 512비트 다이제스트를 포함한 여러 가지 길이의 해시를 포함한다고 하여 SHA-2 해시'군(famliy)'으로 불린다. 각 다이제스트는 관련 미국표준기술연구소 연방 정보 처리 표준 문서에서 논의 및 출시된다. 이름만으로는 다른 사람이 사용하는 SHA-2 비트 길이를 알 수 없지만 256비트인 SHA-256이 가장 많이 활용되고 있다. [3]
  • SHA-1에서 SHA-2로의 느린 이동
SHA-1에 대한 성공적인 공격이 이뤄지고 2011년부터 SHA-2가 미국표준기술연구소의 필수 해시 표준이 되었지만 전 세계적으로 대부분의 환경은 2016년까지 SHA-2로 전환되지 않았다. 당시 사람들은 SHA-1를 향한 공격이 즉각적으로 반응해야 할 위험이 아닌, 단지 이론상의 이야기일 뿐이라고 생각했기 때문이다. 2015년, 암호화를 사용하는 세계의 주요 개발업체는 고객을 대상으로 2018년 1월 1일까지 SHA-1에서 SHA-2로의 전환을 의무화하기로 했다. 이유는 이론으로만 전해지던 공격이 실제로 이어질 것을 확신했기 때문이다. 그렇게 대부분의 기업은 암호화에 의존하는 모든 프로그램 또는 기기를 서둘러 SHA-2로 마이그레이션 했고, 2017년 초반까지 많은 고객이 SHA-2로 이동하여 적절한 시기에 마이그레이션을 마쳤다고 볼 수 있다. 그 배경에는 2017년 2월 23일 구글이 실제 SHA-1 충돌 공격이 성공했음을 발표했고, 동일한 SHA-1 해시를 가진 두 개의 PDF파일을 제시해 이를 입증한 사실이 있었다.
마침내 기존에 있던 SHA-1에서 SHA-2로의 완전한 이동이 이루어졌으며, 그 시기 또한 매우 적절했다고 평가받는다. 기존 SHA-1이 깨지기 직전에 전 세계 대부분의 환경에서 SHA-2로의 전환을 성공적으로 마쳤고, 마이그레이션을 하지 않았던 기업들은 기존에 먼저 마이그레이션을 한 기업들 덕분에 훨씬 더 쉽게 마이그레이션을 할 수 있었기 때문이다. 수많은 기업이 마이그레이션을 완료하여 에서는 마이그레이션 방법에 대한 지침을 쉽게 찾을 수 있었고, 그 지침을 바탕으로 개발업체는 즉각적으로 마이그레이션을 할 준비가 되어있었으며, 대부분의 소프트웨어하드웨어 업체 역시 마이그레이션에 대한 대비가 되어있었기 때문이다. SHA-1에서 SHA-2로의 마이그레이션 계획, 즉 상용화 일정은 완전히 성공했다.[3]
  • SHA-1과의 차이점
SHA-1과 SHA-2는 같은 암호화 결함을 갖고 있으며 동일한 수학적 기반을 일부 공유하고 있다. 그럼에도 불구하고 SHA-2가 더 안전하다고 평가받는 이유는 SHA-1보다 SHA-2의 해시 길이가 더 길기 때문이다. 가장 많이 사용되는 SHA-256과 비교하면 SHA-1의 해시 길이는 160비트에 불과하고 SHA-256는 해시 길이가 256비트이기 때문에 더 안전하다는 것이다.[3]
  • SHA-2에 대한 공격
SHA-2에 대한 공격은 2008년부터 발생하기 시작했는데, SHA-1의 경우와 마찬가지로 SHA-2에 대한 공격 역시 점점 더 박차를 가하며 SHA-2 마저 약화시켰다. 일부 공격은 SHA-2의 유효 보호 수준을 237비트까지 낮췄고, 2016년에 발표된 일부 최근 공격을 보면 SHA-2 공격은 이미 실용 단계에 있다고 할 수 있었다. 즉, SHA-2 또한 불과 2~3년 전의 SHA-1과 비슷한 상황에 놓인 것이다. 앞에 언급했듯이 시간이 지나면서 기존 암호가 공격을 받고 약화되는 것은 예상 가능한 일이었기 때문에, 미국표준기술연구소에서는 SHA-2에서 파생되지 않은 새로운 해시 표준을 미리 확보하기 위한 목적으로 앞서 언급한 공개 대회를 통해 SHA-3을 선정하였다. 이렇게 미국표준기술연구소는 2015년에 초안 표준을 공표하였고, 2015년 8월 5일에는SHA-3가 공식 권장 표준이 됐다.[3]
  • SHA-3로 전환하지 않은 이유
SHA-1을 폐기해야 하는 상황에서 대부분의 마이그레이션 작업은 2016년 후반에서 2017년 사이에 이뤄졌다. 많은 사람들이 SHA-1 전환의 공식적인 마감 날짜는 2017년 12월 31일이었으며, 3년이라는 준비 시간이 있었음에도 SHA-3이 아닌 SHA-2으로 전환한 이유에 대해 궁금해한다. 세 가지 이유가 있는데, 첫 번째는 SHA-3을 지원하는 소프트웨어 또는 하드웨어가 사실상 전무했기 때문이다. SHA-3으로 전환하고 싶어도 소유하거나 사용하고 있는 모든 기기를 위한 코드펌웨어를 본인이 직접 작성하지 않는 한 방법이 없었다. 두 번째 이유는 SHA-3은 SHA-2의 마이그레이션 계획이 이미 수립된 시점에서 비교적 새로운 표준이었다는 것이다. 초기 SHA-1 폐기 회의가 열릴 당시 SHA-3은 공식 표준도 아니었고 SHA-2는 일부분이 SHA-1에서 파생되긴 했지만 SHA-1만큼 악용의 소지가 없었다. 마지막으로 SHA-3는 SHA-2에 비해 현저히 느린 속도를 가지고 있었다. 더 느리고 필요하지도 않은 것으로의 마이그레이션을 권장할 이유는 없었기 때문에 SHA-3으로의 전환을 권장하지 않았다.[3]

종류[편집]

SHA-2 계열은 224, 256, 384, 512비트로 된 다이제스트(해시값)이 있는 6개의 해시 함수를 구성하고 있다.[4]

  • SHA-256 : SHA-256는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과 값을 출력한다. 일반적으로 입력 값이 조금만 변동하여도 출력 값이 완전히 달라지기 때문에 출력 값을 토대로 입력 값을 유추하는 것은 거의 불가능하다. 아주 작은 확률로 입력 값이 다름에도 불구하고 출력 값이 같은 경우가 발생하는데 이것을 충돌이라고 한다. 이러한 충돌의 발생 확률이 작을수록 좋은 함수라고 평가된다. 가기.png SHA-256에 대해 자세히 보기
  • SHA-384 : SHA-384는 2001년 SHA-1을 대체하기 위해 SHA-256, SHA-512와 같이 만들어진 만든 해시 알고리즘이다. 384비트(48바이트)의 해시값을 생성하고, 일반적인 길이는 96자리 인 16진수로 렌더링이 된다. 현재 표준 알고리즘으로 널리사용되고 있다.[6][5] 가기.png SHA-384에 대해 자세히 보기
  • SHA-512 : SHA-512는 SHA-2가 생성하는 다이제스트 출력 길이의 종류 중 하나이다. SHA-512는 46~80 라운드를 통과해야 공격으로부터 안전하다고 판단하며, 1024 비트를 1개의 패딩 메시지로 만든다.[7] 가기.png SHA-512에 대해 자세히 보기
  • SHA-512/224 : 2012년 3월에 업데이트 된 SHA-512의 축소 버전이다. 알고리즘은 SHA-512와 동일하게 계산하지만, 최종 값 도출에 SHA-224와 같은 길이로 결과 값을 축소한다. SHA-512이 32비트 프로세서인 SHA-256보다 64비트 프로세서에서 계산이 빠르기 때문에 개발되었다.[6] 가기.png SHA-512/224에 대해 자세히 보기
  • SHA-512/256 : 2012년 3월에 업데이트 된 SHA-512의 축소 버전이다. 알고리즘은 SHA-512와 동일하게 계산하지만, 최종 값 도출에 SHA-256과 같은 길이로 결과 값을 축소한다. SHA-512이 32비트 프로세서인 SHA-256보다 64비트 프로세서에서 계산이 빠르기 때문에 개발되었다. SHA-512/224와 출력 비트 크기 외에는 다 똑같다고 할 수 있다.[6] 가기.png SHA-512/256에 대해 자세히 보기

각주[편집]

  1. SHA-2〉, 《위키백과》
  2. SHA〉, 《네이버 IT용어사전》
  3. 3.0 3.1 3.2 3.3 3.4 Roger A. Grimes|CSO, 〈왜 SHA-3을 사용하지 않는가〉, 《아이티월드》, 2018-02-23
  4. SHA〉, 《위키피디아》
  5. 5.0 5.1 MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator〉, MOBILEFISH
  6. 6.0 6.1 6.2 6.3 윈디하나, 〈해시알고리즘 비교〉, 《윈디하나의 솔라나라》, 2011-09-04
  7. 티핀, 〈SHA-2(Secure Hash Algorithm 2) 알고리즘 분석하기 (이론 1편)〉, 《네이버 블로그》, 2011-10-19

참고자료[편집]

같이 보기[편집]


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