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

SHA2

위키원
ajm97 (토론 | 기여)님의 2019년 7월 1일 (월) 11:26 판 (SHA-512)
이동: 둘러보기, 검색

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

개요

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

등장배경

1993년에 미국 국립표준기술연구소(NIST)에서 SHA-0을 미국 연방 정보 처리표준(FIPS PUB 180)으로 채택하고, 암호확적으로 심각한 결함이 발견됨에 따라 SHA-0 표준을 폐기하고, 1995년에 SHA-1(FIPS PUB 180-1)을 표준으로 채택하였으나 마찬가지로 해독 방법이 제시되어, 2002년에 미국 국가안보국(NSA)에서 설계한 SHA-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이 가장 많이 채용되어지고 있다.

이렇게 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-1과의 차이점
    • SHA-1과 SHA-2는 동일하지는 않지만 똑같은 암호화 결함을 갖고있으며 동일한 수학적 기반을 일부 공유하고 있다. 하지만 SHA-2가 더 안전하다고 평가받는 이유는 SHA-1보다 SHA-2의 해시 길이가 더 크기 때문이다. 제일 많이 사용되는 SHA-256과 비교하자면 SHA-1의 해시 길이는 160비트인 것에 불과하지만 SHA-256는 해시 길이가 256비트이기 때문에 더 안전하다는 것이다.
  • SHA-2에 대한 공격
    • 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을 포기하고, 대부분의 마이그레이션 작업은 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-2 계열은 224, 256, 384, 512비트로 된 다이제스트(해시값)이 있는 6개의 해시 함수를 구성하고 있다.

SHA-224

SHA-224는 국가안보국(NSA)이 설계한 암호 해시함수이다. SHA-224는 224비트(28바이트)의 해시 값을 생성하고, 일반적으로 길이가 56자리 인 16진수로 렌더링된다. 또한 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비트로 구성되어 62자리 문자열을 반환하며 유효 보안 수준이 2의 256제곱만큼을 가지고 있어 무차별 대입을 수행해 해시 충돌에 비교적 안전하다고 할 수 있고, 출력 속도가 빠르다는 장점을 갖고있다. 또한 단방향성의 성질을 띄고 있는 암호화 방법으로 복호화가 불가능하다. SHA-384, 512, SHA-3에 비해서는 유효 보호 수준이 낮을 지는 모르지만, 현재까지 안정성 문제에서도 큰 단점이 발견되지 않았고, 속도가 빠르기 때문에 인증서, 블록체인 등 많이 사용되고있으며, SHA-2라고 하면 SHA-256이라고 말할 정도로 상용화가 잘 되어있다. 향후 3~5년 정도는 더 안전할 것이라는 전망을 띄고있다,

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

SHA-384

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

  • 단점

SHA-384는 길이 확장 공격(Length extension attack)에 있어서 SHA-512에 비해 강세를 보인다 SHA-512는 길이 확장 공격에 대해 휘발성이지만 SHA-384는 휘발성이 아니기 때문이다. 하지만 SHA-384의 경우에는 다이제스트의 서명이 필요하한데, 만약 ECDSA-384 서명을 채택할 경우 512비트가 아닌 384개의 해시 다이제스트가 필요로 한다. SHA-224와 SHA-256처럼 큰 비트에서 필요한 만큼의 비트를 자르고 출력하는 것이 더 쉬운 일이기 때문에 필요 상황에 맞게 사용해야 한다.

SHA-512

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

  • 단점

SHA-512로 서명 된 인증서는 Windows TLS 1.2에서는 작동하지 않는 점이 발견되었고, 길이 확장 공격에 대해 취약하며, SHA-256이 SHA-512보다 훨씬 빠르게 64개의 해시를 만들어낸다. 즉, 아직까지 SHA-512를 사용할 만큼의 문제점도 발견되지 않았다. 또한 현재에는 짧은 문자열(36 ~ 49 문자)이 사용되고 있고 긴 문자열(72 ~ 85 문자)에서도 큰 속도의 차이는 없기 때문에 상대적으로 속도적으로 느리며, 상대적으로 기술 비용이 많이 들어가는 SHA-512를 채택할 필요는 없다는 것이다. 하지만 64비트 CPU에서는 처리성능(속도)이 좋아지고, 현재는 64비트 CPU가 많이 사용되고 있고 성능도 좋아졌기 때문에 속도적인 측면에서의 단점은 해결이 되었지만, SHA-512의 특성상 결과 값이 512비트로만 나와서 용량(공간)을 너무 많이 차지한다는 단점이 있다.

SHA-512/224

SHA-512/256

참고자료

같이 보기


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