[include(틀:다른 뜻1, other1=워크래프트 시리즈에 등장하는 적, rd1=샤(월드 오브 워크래프트), other2=중국 상하이 소재의 훙차오 공항의 IATA 코드, rd2=상하이 훙차오 국제공항)] {{{+3 Secure Hash Algorithm}}} >3f57b4255732fbd8df203466ef5cd5f4c980e545 > - "https://namu.wiki/w/SHA"(따옴표 제외)의 SHA-1값 >a0d20951336a0e6a39da2682efff30ab31012e88ea606aea6fdae9b502012fe5 > - "https://namu.wiki/w/SHA"(따옴표 제외)의 SHA-2중 SHA-256값 >1e3d31e819d5c890c6d9e48498ba2945f759be742699ad8e70f4b536059e6f38b472f1eea9c0d73aae792371fe38481401b7bef4e18b4a9a1d86056138dcfda2 > - "https://namu.wiki/w/SHA"(따옴표 제외)의 SHA-3값 [* 이것은 엄밀히 말해서 {{{Keccak[c=2d]}}}의 512-bit 해시값이다. Keccak 알고리즘은 이전의 SHA 알고리즘과는 달리 출력 길이가 제한되어 있지 않고, 알고리즘 자체에도 변경 가능한 파라미터가 있기에 어떤 파라미터를 쓰느냐에 따라 얼마든지 결과값이 달라질 수 있다.] [목차] == 개요 == [[1993년]]부터 미국 [[NSA]]가 제작하고 미국 국립표준기술연구소(NIST)에서 표준으로 채택한 [[암호]]학적 [[해시]] 함수이다. 참고로, SHA는 원본 값이 단, 한 글자, 단 1비트만 바뀌어도 값이 천차만별로 바뀔 수 있다. 보통 이를 가리켜 [[눈사태 효과]]라 부른다. [* 눈사태 효과가 없거나 적다면 보안에 치명적이기에, 거의 모든 암호화 알고리즘에서 기본적으로 포함되어 있다. SHA 만의 특성은 아니다. ] == 역사 == === SHA-0와 SHA-1 === [[1993년]] SHA의 표준으로 정의되어 발표되었으며 160 비트의 해시값을 사용한다. 그러나 2년 만에 바로 취약점이 발견되어 이를 개선한 SHA-1이 새로 발표되었고, 이는 널리 사용되었다. SHA-1 역시 160 비트 해시값을 사용한다. 처음 발표된 SHA는 편의상 SHA-0로 표기하여 구분한다. 그러나 2005년도에 한 중국의 대학 연구팀에 의해 해독의 가능성이 제시되었으며, 결국 [[2008년]]에 해시 충돌이 발생했으며[* 물론 이건 알려진 것이다. '''모든 암호화 알고리즘이 다 그렇지만 암호학의 지하에선 더 빨리 뚫렸을지 모른다'''.] [[2015년]]에는 주요 브라우저에서도 지원 중단을 예고하는 등 퇴출 수속을 밟고 있다. 그리고 2017년 SHA-1 '''전체'''의 해시 충돌이 구글 프로젝트 제로 팀에 의해 밝혀졌다. 구글은 아예 충돌하는 키를 '''완전히 공개'''할 예정으로, 구글 정책상 90일 뒤인 5월 말쯤 어떤 방법을 적용했는지 공개가 되면 SHA-1은 그냥 끔살될 예정. 그 이전에 다른 알고리즘으로 안 갈아타면 그대로 망하게 만들겠다는 반협박 수준의 강력한 보안 경고이다. [[http://www.zdnet.co.kr/view/?no=20170224153403&re=R_20170227105154|관련 기사]] 결국 [[Chrome|구글 크롬 브라우저]]는 2017년 1월에 출시한 56버전부터는 SHA-1 인증서를 사용하는 사이트에 접속시 안전하지 않은 사이트라며 경고 메시지를 띄우도록 했고, 2019년부터는 SHA-1 인증서를 사용하는 사이트는 접속하지 못하도록 차단했다. [[Firefox|파이어폭스]] 등 다른 브라우저도 2017년부터 SHA-1 인증서를 사용하는 사이트에 접속시 경고 메시지를 띄우는 등의 업데이트를 하며, 2015년 기준 90%이상의 사이트가 사용하던 SHA-1은 더 이상 찾아보기 힘들게 되었다. === SHA-2 === SHA-1 역시 해시 충돌을 이용한 위험성이 발견되어 차세대 버전이 나왔는데, 개선된 버전이 SHA-2 로 [[2001년]]에 발표되었다. 해시 길이에 따라서 224, 256, 384, 512 비트를 선택해서 사용할 수 있으며, 당연히 해시 길이가 길 수록 더 안전하다. 편의상 해시 길이에 따라 SHA-224, SHA-256, SHA-384, SHA-512 등으로 부른다. 일반적으로 SHA-256을 사용한다. 해시 길이가 길어졌기에 그만큼 안전하긴 하지만, 알고리즘의 기본 동작이 SHA-1과 큰 차이가 없기 때문에 완전히 안전하다(=공격 받을 가능성이 없다.)고 장담하긴 어렵다. [[비둘기 집의 원리]]에 의해서 수학적으로는 충돌 가능성이 존재하기 때문이다. 그러나, 취약점이 발견되지 않는 한 공학적으로 그 가능성은 없다고 봐도 무방하다. 왜냐하면 SHA-256 기준으로 2^256 = 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 = 약 1.158*10^77가지 경우의 수가 존재하며, 이는 관측 가능한 우주에 있는 모든 원자수보다도 크다는 주장이 있다. 따라서 겹칠 가능성은 멀리 떨어진 두 원자가 갑자기 한 곳에서 만나 충돌하는 수준이다. === SHA-3 === [[2012년]] 10월에 더욱더 안정성이 높은 방식으로 설계된 [[http://en.wikipedia.org/wiki/SHA-3|SHA-3]]이 정식 발표되었다. SHA-2 도 위험성 문제가 제기되자, 충돌 가능성을 피하기 위해서 SHA-1과 2와 전혀 다른 알고리즘인 SHA-3의 개발이 진행되었다. 정확하게는 개발이라기보단, 여러 보안 전문가들과 [[컴덕후]]들이 만들어낸 해시 알고리즘 중 몇 개를 추려서 가장 견고한 것에 SHA-3 딱지를 붙이는 '''[[공모전]]'''에 가깝다. [[고려대학교]]에서도 [[아리랑]]이라는 이름으로 출품했지만 탈락했다. 3차 후보까지 남은 건 [[http://131002.net/blake|BLAKE]], [[http://www.groestl.info|Grøstl]], [[http://www3.ntu.edu.sg/home/wuhj/research/jh/index.html|JH]], [[http://keccak.noekeon.org|Keccak]], [[http://www.skein-hash.info|Skein]]의 5개 알고리즘이다. 2012년 10월 2일자로 [[http://keccak.noekeon.org|Keccak]]이 SHA-3로 확정되었다. [[http://www.nist.gov/itl/csd/sha-100212.cfm|#]] == 활용한 소프트웨어 == === SHA-1 === * [[비트토렌트]]는 파일을 BASE32로 바꾼 SHA-1을 해시로 사용한다. * [[Git|깃(Git)]]은 파일이나 커밋 등 모든 오브젝트를 SHA-1으로 해시한 식별자를 통해 관리한다. SHA-1을 깬 구글이 "깃(Git) 시스템도 불안하다"고 하였으나 깃을 만든 리누스 토발즈는 "깃은 데이터를 해시하기만 하는 게 아니라, 거기에 타입과 길이 필드를 측량한다"며 동의하지 않았다. [[https://www.zdnet.co.kr/view/?no=20170227105154|#]] === SHA-2 === * [[대한민국]] [[인터넷뱅킹]]은 SHA-256을 사용하고 있다. [[2011년]]까진 [[2008년]]에 이미 뚫린 SHA-1을 사용하고 있었다. * [[비트코인]]은 작업 증명에 SHA-256을 사용한다. * [[TrueCrypt]]는 키 유도에 SHA-512를 사용할 수 있다. * [[Windows Update]]는 파일의 디지털 서명에 SHA-256을 사용한다. 2020년 7월까지는 SHA-1도 병용했으나, 이후 서버에 등록된 모든 파일에서 SHA-1 디지털 서명을 제거하였으며, SHA-2를 지원하지 않는 구형 Windows에 대한 업데이트 파일은 아예 서버에서 삭제해버렸다.[* 정확히는 [[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 지원 패치를 배포하였다.] === SHA-3 === * [[이더리움]] - 이더리움은 Keccak256 을 사용하는데, Keccak 이 SHA-3 로 제안될때 일부 변경된 부분이 있고, SHA-3 는 이것이 반영되어 확정되었다. 그래서 엄밀하게 말하면 Keccak256 과 SHA-3 는 동일하진 않으며, 이더리움은 변경전의 Keccak256 을 사용하므로 정확하게 SHA-3 표준을 따른다고 할 순 없다. [[분류:컴퓨터 보안]] [[분류:암호학]] [[분류:알고리즘]]