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

SHA2

위키원
leejia1222 (토론 | 기여)님의 2019년 7월 3일 (수) 10:16 판 (SHA-2의 상용화)
이동: 둘러보기, 검색

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

개요

암호 해시 함수는 디지털 데이터 상에서 수학적으로 동작하는 것으로 알려져있는데, 이를 통해 예측된 해시값에 대해 계산된 해시(알고리즘의 실행 출력)를 비교함으로써 데이터의 무결성을 파악할 수 있다. 이를테면 다운로드한 파일의 해시를 계산한 다음 이전에 게시한 해시 결과물의 결과와 비교하면 다운로드한 파일이 수정 또는 조작되었는지 알 수 있다. 암호 해시 함수의 주요 개념은 충돌 회피이다. 이는 곧 누구도 동일한 해시 출력 결과가 있는 두 개의 다른 입력값을 알아낼 수 없는 것을 의미한다. 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의 상용화

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가 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로의 마이그레이션 계획, 즉 상용화 일정은 완전히 성공했다.[3]
  • SHA-1과의 차이점
SHA-1과 SHA-2는 같은 암호화 결함을 갖고 있으며 동일한 수학적 기반을 일부 공유하고 있다. 그럼에도 불구하고 SHA-2가 더 안전하다고 평가받는 이유는 SHA-1보다 SHA-2의 해시 길이가 더 길기 때문이다. 가장 많이 사용되는 SHA-256과 비교하면 SHA-1의 해시 길이는 160비트에 불과하고 SHA-256는 해시 길이가 256비트이기 때문에 더 안전하다는 것이다.[3]
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가 공식 권장 표준이 됐다.[3]
  • SHA-3로 전환하지 않은 이유
여기서 SHA-1을 포기하고, 대부분의 마이그레이션 작업은 2016년 후반에서 2017년 사이에 이뤄졌고, SHA-1 전환의 공식 마감 날짜인 2017년 12월 31일 임에도 불구하고, 3년이란 시간이 있었는데 왜 SHA-3로 마이그레이션(전환)하라고 권하지 않은 이유로는 3가지가 있다. 1. SHA-3를 지원하는 소프트웨어 또는 하드웨어가 사실상 전무했다. SHA-3로 전환하고 싶어도 소유하거나 사용하고 있는 모든 기기를 위한 코드와 펌웨어를 본인이 직접 작성하지 않는 한 방법이 없다는 것, 2. SHA-3SHA-2의 마이그레이션 계획이 이미 수립된 시점에서 비교적 새로운 표준이었고, 초기 SHA-1 폐기 회의가 열릴 당시 SHA-3는 공식 표준도 아니었다는 점과 SHA-1에서 파생되긴 했지만 SHA-1만큼 악용의 소지가 없었다는 점, 3. SHA-3SHA-2에 비해 훨씬 더 속도가 느리다는 것이 중론이었다. 결국 더 느리고 필요하지도 않은 것을 권장할 이유는 없었기 때문에 SHA-3로 전환을 권장하지 않았던 것이다.[3]

종류

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

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

각주

  1. 1.0 1.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. MOBILEFISH, 〈"https://www.mobilefish.com/services/hash_generator/hash_generator.php MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator"〉, MOBILEFISH
  6. 6.0 6.1 6.2 6.3 윈디하나, 〈해시알고리즘 비교〉, 《윈디하나의 솔라나라》, 2011-09-04
  7. MOBILEFISH, 〈MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator〉, 《MOBILEFISH》
  8. 티핀, 〈SHA-2(Secure Hash Algorithm 2) 알고리즘 분석하기 (이론 1편)〉, 《네이버 블로그》, 2011-10-19

참고자료

같이 보기


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