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

SHA2

위키원
leejia1222 (토론 | 기여)님의 2019년 7월 3일 (수) 11:37 판
이동: 둘러보기, 검색

SHA-2(Secure Hash Algorithm 2)는 미국국가안전보장국(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'.[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 문서는 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.