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

SHA2

위키원
leejia1222 (토론 | 기여)님의 2019년 7월 1일 (월) 17:29 판 (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의 상용화

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이 가장 많이 채용되어지고 있다. [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로의 마이그레이션 계획, 즉 상용화 일정은 완전히 성공했다.[3]

SHA-1SHA-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 그림1
SHA-2 그림2

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

SHA-224

SHA-224는 국가안보국(NSA)이 설계한 암호 해시함수이다. SHA-224는 224비트(28바이트)의 해시 값을 생성하고, 일반적으로 길이가 56자리 인 16진수로 렌더링된다. 또한 SHA-224는 SHA-256을 두 가지 방법으로 수정하여 정의되었는데, 1. 256비트에서 32비트를 뺀 224비트로 줄여, 유효 보안 수준이 2의 224제곱을 갖고 있어 충돌 발견에 소요되는 예상 비용을 줄였고, 2. 다른 초기화 값. 즉, SHA-224SHA-256에 대한 정보를 노출하지 않도록 한다(또는 그 반대도 마찬가지). 하지만 상위 버전인 SHA-256이 있기 때문에 자주 쓰이는 편은 아니나 해시가 많은 경우와 타원 곡선 그룹에 매핑 할 때는 유용하게 쓰일 수 있다.[5][6]

  • SHA-256과 차이점
    • 초기 해시 값 h0 ~ h7은 서로 다르다.
    • 출력은 h7을 생략하고 출력한다.[4]
  • 문제점 : SHA-256보다 효율이 떨어진다. 128비트 이상 256비트 이하의 해시를 원하는 경우, SHA-256을 사용하여 원하는 비트 길이로 출력하는 것이 SHA-224를 사용하는 것만큼 간단하고 효율적이기 때문이다.[6]

SHA-256

SHA-256은 현재 블록체인에서 가장 많이 채택하여 사용되고 있는 암호 방식이다. SHA-256은 256비트로 구성되어 62자리 문자열을 반환하며 유효 보안 수준이 2의 256제곱만큼을 가지고 있어 무차별 대입을 수행해 해시 충돌에 비교적 안전하다고 할 수 있고, 출력 속도가 빠르다는 장점을 갖고있다. 또한 단방향성의 성질을 띄고 있는 암호화 방법으로 복호화가 불가능하다. SHA-384, 512, SHA-3에 비해서는 유효 보호 수준이 낮을 지는 모르지만, 현재까지 안정성 문제에서도 큰 단점이 발견되지 않았고, 속도가 빠르기 때문에 인증서, 블록체인 등 많이 사용되고있으며, SHA-2라고 하면 SHA-256이라고 말할 정도로 상용화가 잘 되어있다.[5][7]

  • 문제점 : SHA-2에 대한 공격은 2008년부터 발생하기 시작했고, SHA-1의 경우와 마찬가지로 SHA-2에 대한 공격 역시 점점 더 박차를 가하며 SHA-2마저 약화시키고 있다. 일부 공격은 SHA-2의 유효 보호 수준을 237비트까지 낮췄고 2016년에 발표된 일부 최근 공격을 보면 SHA-2 공격은 이미 "실용" 단계에 있다고 할 수 있다. 따라서 추후 방법을 찾아야 한다는 것이다.[3]

가기.png SHA-256에 대해 자세히 보기

SHA-384

SHA-384는 국가안보국(NSA)에서 설계한 암호 해시함수이다. SHA-384는 384비트(48바이트)의 해시 값을 생성하고, 일반적인 길이는 96자리 인 16진수로 렌더링이 된다. 또한 SHA-384SHA-256보다 큰 유효 보호 수준을 가지기 때문에 SHA-512만큼은 아니지만 대부분의 상상할 수 있는 충돌 저항에 대해 강점을 보인다. 어떤 해시를 사용할 것인가에 대한 주된 결정 요소는 얼마나 많은 양의 출력이 필요한가에 달려있는데, 예를 들어 256비트의 해시 기반 메시지 인증 코드(HMAC : Hash-based Message Authentication Code) 키와 128비트의 암호화 키를 모두 생성하기 위한 해시가 필요한 경우에 SHA-384의 사용은 당연하다고 할 수 있다. 계산 비용, 즉 의사 난수 생성기(PRNG : Pseudo Random Number Generator)의 출력이나 랜덤 패딩에 대해 가능한 많은 출력이 필요한 경우에는 SHA-512를 선택하는 것이 옳은 방법이라고 할 수 있다. 또한 SHA-384는 내부 상태로 출력을 감소시키지 않으므로 SHA-3에도 취약하지 않다.[5][8]

  • SHA-512과 차이점
    • 초기 해시 값 h0 ~ h7은 다르다(9번째 ~ 16번째 소수)
    • 출력은 h6과 h7을 생략하고 출력한다.[4]
  • 문제점 : SHA-384는 길이 확장 공격(Length extension attack)에 있어서 SHA-512에 비해 강세를 보인다 SHA-512는 길이 확장 공격에 대해 휘발성이지만 [S[HA-384]]는 휘발성이 아니기 때문이다. 하지만 SHA-384의 경우에는 다이제스트의 서명이 필요하한데, 만약 ECDSA-384 서명을 채택할 경우 512비트가 아닌 384개의 해시 다이제스트가 필요로 한다. SHA-224SHA-256처럼 큰 비트에서 필요한 만큼의 비트를 자르고 출력하는 것이 더 쉬운 일이기 때문에 필요 상황에 맞게 사용해야 한다.[8]

SHA-512

SHA-512는 국가안보국(NSA)이 설계한 암호 해시함수이다. SHA-512는 512비트(64바이트) 해시 값을 생성하는데, 일반적으로 길이가 128자리인 16진수로 렌더링된다. 또한 PRNG의 출력이나 랜덤 패딩에 대해 가능한 많이 출력이 필요한 경우에 대해 강점을 갖고있다. 또한 SHA-512는 전체적인 진행과정 중 가장 처음으로 발생하는 것이 패딩(Padding)과정이며, 해시 함수의 연산을 진행하기 전에 파싱(Parsing)이라는 과정을 거치고 진행된다.[5]

  • SHA-256과의 차이점
    • 블록의 크기는 1024비트로 변경
    • 초기 해시 값 및 라운드 상수는 64비트로 확장
    • 라운드(과정)는 62라운드가 아닌 80라운드로 변경
    • 메시지 스케줄 배열은 64개의 32비트 문자 대신 80개의 64비트의 문자를 갖게 된다
    • 메시지 스케줄 배열을 확장하기 위해 루프는 16개에서 63개로 확장시키는 것이 아니라 16개에서 79개로 확장 시킨다.
    • 원형 상수는 처음 80개의 소수에 기초한다 2.409,
    • 계산에 사용되는 단어 크기는 64비트이다.
    • 메시지의 추가 길이 (전처리 전)는 비트 단위로 128비트 빅 엔디안 정수를 갖는다.
    • 사용 된 이동 및 회전 양이 다르다.[4]
  • 문제점 : SHA-512로 서명 된 인증서는 Windows TLS 1.2에서는 작동하지 않는 점이 발견되었고,[9]길이 확장 공격에 대해 취약하며, SHA-256이 SHA-512보다 훨씬 빠르게 64개의 해시를 만들어낸다. 즉, 아직까지 SHA-512를 사용할 만큼의 문제점도 발견되지 않았다. 또한 현재에는 짧은 문자열(36 ~ 49 문자)이 사용되고 있고 긴 문자열(72 ~ 85 문자)에서도 큰 속도의 차이는 없기 때문에 상대적으로 속도적으로 느리며, 상대적으로 기술 비용이 많이 들어가는 SHA-512를 채택할 필요는 없다는 것이다. 하지만 64비트 CPU에서는 처리성능(속도)이 좋아지고, 현재는 64비트 CPU가 많이 사용되고 있고 성능도 좋아졌기 때문에 속도적인 측면에서의 단점은 어느 정도 해결이 되었지만, SHA-512의 특성상 결과 값이 512비트로만 나와서 용량(공간)을 너무 많이 차지한다는 단점이 있다.[8][7]

가기.png SHA-512에 대해 자세히 보기

SHA-512/224 & SHA-512/256

SHA-512/224, 256은 SHA-512와 동일한 특징을 갖고있는게 특징인데, SHA-512에서의 공간을 많이 차지한다는 단점과 SHA-512가 SHA-256보다 64비트 CPU에서 계산이 빠르기 때문에 개발된 알고리즘이다. 계산방법은 SHA-512와 동일하지만 마지막에 결과 비트를 SHA-224, SHA-256과 같은 길이로 결과값을 축소하는 단계를 추가한 것(초기 벡터값도 다르다.)인데, 이는 SHA-512의 안정성을 해치지 않으며, 비트수를 줄였음에도 불구하고 보안 위협도 현재까지도 크게 없었다.[10][11][12]

  • SHA-512와의 차이점
    • 초기 해시 값 h0 ~ h7은 SHA-512/t IV 생성 함수에 의해 주어진다.
    • 출력은 t비트에서 h0 ~ h7의 결합 절단하여 생성된다.
    • t는 384와 같을 수 없고, 대신 SHA-384가 지정된 대로 사용해야 한다.
    • t 값 224와 256은 승인된 것으로 언급한다.[4]

각주

  1. 1.0 1.1 SHA-2〉, 《위키백과》
  2. SHA〉, 《네이버 IT용어사전》
  3. 3.0 3.1 3.2 3.3 3.4 3.5 Roger A. Grimes|CSO, 〈왜 SHA-3을 사용하지 않는가〉, 《ITWORLD》, 2018-02-23
  4. 4.0 4.1 4.2 4.3 4.4 SHA〉, 《위키피디아》
  5. 5.0 5.1 5.2 5.3 MOBILEFISH, 〈MD5, SHA1, SHA224, SHA256, SHA384, SHA512 and RIPEMD160 hash generator〉, 《MOBILEFISH》
  6. 6.0 6.1 Ilmari Karonen, 〈sha-224〉, 《Cryptography》, 2014-03-21
  7. 7.0 7.1 Lyudmil Latinov, 〈MD5, SHA-1, SHA-256 and SHA-512 speed performance〉, 《Automation Rhapsody》, 2018-05-03
  8. 8.0 8.1 8.2 David Schwartz, 〈Why chose SHA512 over SHA384?〉 , 《stackoverflow》, 2012-04-08
  9. st.he.ag, 〈TLS 1.2 and SHA-512〉, 《TechNet Microsoft》, 2014-04-16
  10. 윈디하나, 〈SHA-512/224, SHA-512/256〉, 《윈디하나 블로그》, 2013-04-09
  11. 스타버드, 〈SHA-256 , SHA-512 pseudo code로 원리 이해하기〉, 《스타버드 블로그》, 2018-05-15
  12. 윈디하나, 〈해시알고리즘 비교〉, 《윈디하나의 솔라나라》, 2011-09-04

참고자료

같이 보기


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