최근 수정 시각 : 2024-11-13 10:35:47

SHA

SHA-2에서 넘어옴


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
워크래프트 시리즈에 등장하는 적에 대한 내용은 샤(월드 오브 워크래프트) 문서
번 문단을
부분을
, 중국 상하이 소재의 훙차오 공항의 IATA 코드에 대한 내용은 상하이 훙차오 국제공항 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
''' 이론 컴퓨터 과학
{{{#!wiki style="display: inline-block; font-family:Times New Roman, serif;font-style:italic"'''
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#a36> 이론
기본 대상 수학기초론{ 수리논리학( 논리 연산) · 계산 가능성 이론 · 범주론 · 집합론} · 이산수학( 그래프 이론) · 수치해석학 · 확률론 통계학 · 선형대수학
다루는 대상과 주요 토픽
계산 가능성 이론 재귀함수 · 튜링 머신 · 람다대수 · 처치-튜링 명제 · 바쁜 비버
오토마타 이론 FSM · 푸시다운 · 튜링 머신( 폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임 · 형식언어
계산 복잡도 이론 점근 표기법 · 튜링 기계^ 고전, 양자, 비결정론적, 병렬 임의접근 기계^ · 알고리즘 · 자료구조 · 알고리즘 패러다임( 그리디 알고리즘, 동적 계획법)
정보이론 데이터 압축( 무손실 압축 포맷 · 손실 압축 포맷) · 채널 코딩(채널 용량) · 알고리즘 정보 이론(AIT) · 양자정보과학
프로그래밍 언어이론 프로그래밍 언어( 함수형 언어 · 객체 지향 프로그래밍 · 증명보조기) · 메타 프로그래밍 · 유형 이론 · 프로그래밍 언어 의미론 · 파싱 · 컴파일러 이론
주요 알고리즘 및 자료구조
기초 정렬 알고리즘 · 순서도 · 탐색 알고리즘
추상적 자료형 및 구현 배열^ 벡터^ · 리스트^ 연결 리스트^ · 셋(set)^ 레드-블랙 트리, B-트리^ · 우선순위 큐^, 피보나치 힙^
수학적 최적화 조합 최적화 외판원 순회 문제 · 담금질 기법 · 유전 알고리즘 · 기계학습
볼록 최적화 내부점 방법 · 경사하강법
선형계획법 심플렉스법
계산 수론 및 암호학 밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · LLL 알고리즘 · 해시( MD5 · 암호화폐 · 사전 공격( 레인보우 테이블) · SHA) · 양자 암호
대칭키 암호화 방식 블록 암호 알고리즘( AES · ARIA · LEA · Camellia) · 스트림 암호 알고리즘(RC4)
공개키 암호화 방식 공개키 암호 알고리즘( 타원 곡선 암호 · RSA) · 신원 기반 암호 알고리즘(SM9)
계산기하학 볼록 껍질 · 들로네 삼각분할 및 보로노이 도형^Fortune의 line-sweeping 알고리즘^ · 범위 탐색^vp-tree, R-tree^ · k-NN
그래프 이론 탐색^ BFS, DFS, 다익스트라 알고리즘, A* 알고리즘^ · 에드몬드-카프 · 크루스칼 알고리즘 · 위상 정렬 · 네트워크 이론
정리
정지 문제 대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결
틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학 }}}}}}}}}



[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 || 수학( 해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학( 환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학( 형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU( 그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/ C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시( SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로( 보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{ 컴파일러( 어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩( 유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도( 최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리( 기계 번역 · 음성인식) · 버전 ( 버전 관리 시스템 · Git · GitHub)
Secure Hash Algorithm

1. 개요2. 역사
2.1. SHA-0와 SHA-12.2. SHA-22.3. SHA-3
3. 활용한 소프트웨어
3.1. SHA-13.2. SHA-23.3. SHA-3
4. 지원하는 소프트웨어

1. 개요

SHA(Secure Hash Algorithm, 보안 해시 알고리즘)은 미국 국립표준기술연구소( NIST)에서 표준으로 채택한 일련의 암호학적 해시 함수이다.

대부분의 현대 해시 알고리즘이 그렇듯이, 원본 데이터가 단 한 글자, 단 1비트만 바뀌어도 출력되는 해시 값이 천차만별로 바뀔 수 있다. 보통 이를 가리켜 눈사태 효과라 부른다.

문자열 https://namu.wiki/w/SHA를 각종 SHA 알고리즘으로 해시하면 다음과 같다.
  • SHA-1: 3f57b4255732fbd8df203466ef5cd5f4c980e545
  • SHA-256(SHA-2의 일종): a0d20951336a0e6a39da2682efff30ab31012e88ea606aea6fdae9b502012fe5
  • SHA3-256(SHA-3의 일종): a12e06fd9a7f3f7804bfeea99b4910b7e9b3e5515ff2fe6221e629168aaa54cf

2. 역사

2.1. SHA-0와 SHA-1

1993년 SHA의 표준으로 정의되어 발표되었으며 160 비트의 해시값을 사용한다. 그러나 2년 만에 바로 취약점이 발견되어 이를 개선한 SHA-1이 새로 발표되었고, 이는 널리 사용되었다. SHA-1 역시 160 비트 해시값을 사용한다. 처음 발표된 SHA는 편의상 SHA-0로 표기하여 구분한다.

그러나 2005년도에 한 중국의 대학 연구팀에 의해 SHA-1에 대한 충돌 공격이 이론적으로 가능하다는 논문 발표되면서, 결국 2008년에 해시 충돌이 발생했으며[1] 2015년에는 주요 브라우저에서도 지원 중단을 예고하는 등 퇴출 수속을 밟고 있다. 그리고 2017년 SHA-1 전체의 해시 충돌이 구글 프로젝트 제로 팀에 의해 밝혀졌다. 구글은 아예 충돌하는 키를 완전히 공개할 예정으로, 구글 정책상 90일 뒤인 5월 말쯤 어떤 방법을 적용했는지 공개가 되면 SHA-1은 그냥 끔살될 예정. 그 이전에 다른 알고리즘으로 안 갈아타면 그대로 망하게 만들겠다는 반협박 수준의 강력한 보안 경고이다. 관련 기사

결국 구글 크롬 브라우저는 2017년 1월에 출시한 56버전부터는 SHA-1 인증서를 사용하는 사이트에 접속시 안전하지 않은 사이트라며 경고 메시지를 띄우도록 했고, 2019년부터는 SHA-1 인증서를 사용하는 사이트는 접속하지 못하도록 차단했다. 파이어폭스 등 다른 브라우저도 2017년부터 SHA-1 인증서를 사용하는 사이트에 접속시 경고 메시지를 띄우는 등의 업데이트를 하며, 2015년 기준 90%이상의 사이트가 사용하던 SHA-1은 더 이상 찾아보기 힘들게 되었다. 여담으로 지원 종료된 운영체제에서 프로그램이 정상적으로 동작하지 않는 원인이 해당 해시 지원 문제 때문인 경우가 있다. 윈도우 기준으로 이러한 문제를 꼼수 없이 해결 가능한 운영체제의 마지노선은 연장 지원 기간 막바지에 관련 업데이트를 배포한 Windows 7.

다만 정확히 말하자면 운영체제에 내장된 암호화 라이브러리에서 SHA-2와 같은 신형 알고리즘을 지원하지 않을 뿐이므로, OpenSSL같은 외부 암호화 라이브러리를 가져다 쓰는 프로그램이라면 구형 OS에서도 신형 알고리즘을 사용할 수 있다.

한편, SHA-1을 표준화한 NIST에서는 이미 2006년부터 SHA-1을 SHA-2로 교체할 것을 권고하고 있었으며, 2030년 12월 31일부로 SHA-1을 NIST FIPS 180(보안 해시 표준)에서 완전히 삭제할 예정이다.

2.2. SHA-2

SHA-1 역시 해시 충돌을 이용한 위험성이 발견되어 차세대 버전이 나왔는데, 개선된 버전이 SHA-2 로 2001년에 발표되었다. SHA-2 해시 함수는 8개의 32비트 상태를 업데이트하는 압축 함수를 기반으로 하고 해시 길이에 따라서 224, 256, 384, 512 비트를 선택해서 사용할 수 있으며, 당연히 해시 길이가 길 수록 더 안전하다. 편의상 해시 길이에 따라 SHA-224, SHA-256, SHA-384, SHA-512 등으로 부른다. 일반적으로 SHA-256을 사용한다.

해시 길이가 길어졌기에 그만큼 안전하긴 하지만, 알고리즘의 기본 동작이 SHA-1과 큰 차이가 없기 때문에 완전히 안전하다(=공격 받을 가능성이 없다.)고 장담하긴 어렵다. 해시 함수 특성상 기본 동작(round)이 많아질수록 안정성이 높아져 현재까지 SHA-2에 대해 알려진 충돌 등은 없지만, 만약을 위해 SHA-1하고 기본적인 원리 자체가 아예 다른 SHA-3이 개발되었다.

2.3. SHA-3

SHA-2 도 위험성 문제가 제기되자, 충돌 가능성을 피하기 위해서 SHA-1과 2와 전혀 다른 알고리즘인 SHA-3의 개발이 진행되었다. 정확하게는 개발이라기보단, 여러 보안 전문가들과 컴덕후들이 만들어낸 해시 알고리즘 중 몇 개를 추려서 가장 견고한 것에 SHA-3 딱지를 붙이는 공모전에 가깝다.[2] 고려대학교에서도 이 공모전에 아리랑이라는 이름의 알고리즘을 출품했지만 탈락했다. 3차 후보까지 남은 건 BLAKE, Grøstl, JH, Keccak, Skein의 5개 알고리즘이다.

2012년 10월 2일, 최종 우승자로 Keccak 알고리즘이 선정되었다. # 이후 NIST에 의한 표준화 과정을 거친 뒤, 2015년 8월 5일 Keccak 알고리즘에 기반한 SHA-3 정식 표준(FIPS 202)이 출시되었다.

SHA-3에는 다음의 종류가 있다.
  • SHA3-224: 224비트 고정 길이 해시 함수
  • SHA3-256: 256비트 고정 길이 해시 함수
  • SHA3-384: 384비트 고정 길이 해시 함수
  • SHA3-512: 512비트 고정 길이 해시 함수
  • SHAKE128, SHAKE256: 확장 가능한 출력 함수(eXtendable Output Functions; XOF). 해시 결과의 길이를 사용자가 지정할 수 있는 유형의 해시함수이다.

현재 SHA-3은 SHA-2처럼 널리 사용되지는 않는다. SHA-2로도 보안성 측면에서 문제가 없고, 더 많은 시스템에서 지원되는데다 실행 속도도 더 빠르기 때문이다. 현재로써는 SHA-2가 깨지는 날을 대비한 보험 정도의 존재감을 가지고 있다.

3. 활용한 소프트웨어

3.1. SHA-1

  • 비트토렌트는 파일을 BASE32로 바꾼 SHA-1을 해시로 사용한다.
  • 깃(Git)은 파일이나 커밋 등 모든 오브젝트를 SHA-1으로 해시한 식별자를 통해 관리한다. SHA-1을 깬 구글이 "깃(Git) 시스템도 불안하다"고 하였으나 깃을 만든 리누스 토발즈는 "깃은 데이터를 해시하기만 하는 게 아니라, 거기에 타입과 길이 필드를 측량한다"며 동의하지 않았다. #

3.2. SHA-2

  • 대한민국 인터넷뱅킹은 SHA-256을 사용하고 있다.
  • 비트코인은 작업 증명에 SHA-256을 사용한다.
  • TrueCrypt는 키 유도에 SHA-512를 사용할 수 있다. 여러 옵션 중 하나이다.
  • Windows 업데이트는 파일의 디지털 서명에 SHA-256을 사용한다. 2020년 7월까지는 SHA-1도 병용했으나, 이후 서버에 등록된 모든 파일에서 SHA-1 디지털 서명을 제거하였으며, SHA-2를 지원하지 않는 구형 Windows에 대한 업데이트 파일은 아예 서버에서 삭제해버렸다.[3]

3.3. SHA-3

  • 이더리움 - 이더리움은 Keccak256을 사용한다. 다만, Keccak이 SHA-3로 제안될 때 일부 변경된 부분이 있기 때문에 엄밀하게 말하면 이더리움이 SHA-3 표준을 따른다는 표현은 약간 오류가 있다.

4. 지원하는 소프트웨어

  • OpenSSL - SHA1, SHA2, SHA3 지원
  • Libgcrypt

[1] 물론 이건 알려진 것이다. 모든 암호화 알고리즘이 다 그렇지만 암호학의 지하에선 더 빨리 뚫렸을지도 모른다. [2] 물론 이것만 그런건 아니고, 전세계적으로 제일 대표적인 양방향 암호화 표준인 AES NIST의 공모전에서 Rijndael(라인달) 알고리즘이 선정된 것이다. 이런 식으로 암호화 표준은 제시된 여러 알고리즘 중 제일 강력한 하나를 골라서 제정되는 경우가 많다. [3] 정확히는 Windows 2000, Windows XP, Windows Server 2003, Windows Server 2003 R2, Windows Vista이다. Windows 9x 계열과 Windows NT 4.0에 대한 업데이트 서버는 2012년에 이미 중단하였으며, Windows Vista를 기반으로 한 Windows Server 2008은 별도의 SHA-2 지원 패치를 배포하였다.