CNET Korea뉴스엔터프라이즈

20년 묵은 보안 기법 깨부순 구글 "SHA-1은 버려라"

슈퍼컴퓨터도 깨기 힘들다던 보안 기법, 어떻게 무너졌나

구글이 20년 전 만들어진 보안 기법인 SHA-1을 무용지물로 만드는 데 성공했다.

(씨넷코리아=권봉석 기자) 구글이 20년 전 만들어져 아직도 인터넷 일부 분야에서 쓰이는 보안 기법 중 하나인 SHA-1을 무용지물로 만드는 데 성공했다. 서버, 웹브라우저, 소프트웨어 등 모든 면에서 보완이 시급해졌다.

SHA-1이란?

SHA-1은 파일이나 비밀번호, 인증서 전체를 확인하지 않고도 진위 여부를 확인할 수 있는 일종의 디지털 지문이다. 컴퓨터 내부에서 복잡한 소수 계산을 거쳐서 나온 160비트짜리 결과값만 확인하면 파일이나 비밀번호가 올바른지 확인할 수 있다는 장점을 지녔다.

SHA-1은 조금만 내용이 바뀌어도 전혀 다른 SHA-1 값이 나온다. 예를 들어 “CNET Korea 2016″이라는 단어와 “CNET Korea 2017″이라는 단어의 SHA-1 값은 이렇게 달라진다.

CNET Korea 2016 : 2E36B5B1BBEF9DB0079AB8456F5C687FEDC37891

CNET Korea 2017 : 251828174D1E0F2696506C818C422A180004E006

비슷한 단어를 SHA-1로 처리한 예.

이 때문에 대용량 파일을 다운로드할 때 이상이 없는지 확인하는 용도로도 쓰인다. 파일을 다운로드하는 도중에 단 1비트라도 달라지면 SHA-1 값이 완전히 달라지기 때문이다.

파일을 다운로드한 뒤 컴퓨터에서 SHA-1 값을 확인하면 이상 여부를 쉽게 알 수 있다. 애플도 소프트웨어 업데이트에 이상이 없을 때 확인하는 수단으로 SHA-1을 이용하고 있다.

SHA-1은 이용자가 입력한 비밀번호를 확인하는 데도 쓰인다. 비밀번호를 아무런 암호화 없이 그대로 서버에 저장하면 만에 하나 유출되었을 때 큰 피해를 입을 수 있기 때문이다.

SHA-1을 활용한 비밀번호 보호의 한 예

예를 들어 이용자가 비밀번호를 ‘password’라고 지정하면 이를 ‘password’라고 저장하지 않고 SHA-1을 거친 값인 ’5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8′로 저장하는 것이다.

그런 다음 이용자가 ID와 비밀번호를 입력하면 이 비밀번호를 SHA-1로 변환한 값을 비교해 본다. 만약 이 값이 맞다면 로그인에 성공하며, 서로 다르다면 로그인이 불가능하다. 물론 현재는 SHA-1 뿐만 아니라 다양한 암호화 기법을 이용해서 비밀번호를 보호하고 있다.

“슈퍼컴퓨터라도 못 깰 것” 장담했지만⋯

SHA-1은 1995년 처음 개발된 뒤로 20년 이상 비밀번호나 파일, 각종 인증서를 검증하는데 널리 쓰였다. 고성능 컴퓨터가 아니더라도 짧은 시간에 SHA-1로 검증한 값을 비교할 수 있고 같은 값을 가지는 원본 파일이나 인증서가 지구상에 존재하기 힘들다는 이유 때문이다.

굳이 확률로 따지자면 1,208,925,819,614,629,714,706,176분의 1이다(2의 80승 분의 1). 이 때문에 SHA-1이 처음 개발될 때만 해도 비싼 슈퍼컴퓨터를 수십 대 동원해서 몇 달 이상을 확인하지 않는 한 겹치는 값(이를 전문용어로 ‘충돌’이라 한다)을 찾아낼 수 없을 것으로 여겨졌다.

그러나 2005년, 중국 암호학자 세 명이 예상보다 쉽게 겹치는 값을 찾아냈고 SHA-1이 당초 예상보다 썩 안전하지 않다는 사실이 드러났다

구글은 SHA-1을 어떻게 파괴했는가

구글은 미국시간으로 23일 보안 블로그를 통해 “네덜란드 암스테르담 국립수학전산학연구소(CWI)와 협력해 내용물은 전혀 다르지만 SHA-1로 검증한 값이 완전히 똑같은 PDF파일 두 개를 만들어내는 데 성공했다”고 밝히고 PDF 파일도 공개했다.

실제로 웹사이트에 포함된 PDF 파일을 다운받은 다음 맥OS에 내장된 명령어를 이용해 검증하면 SHA-1로 검증한 값이 똑같다는 사실을 알 수 있다.

구글이 공개한 PDF 파일 두 개의 SHA-1 값을 확인한 화면.

내가 가지고 있는 SHA-1 값과 완전히 똑같은 값을 가지는 단어를 찾는데는 엄청난 시간이 걸린다. GPU(그래픽칩셋) 하나가 1초에 한 번씩 SHA-1 값을 만들어 비교한다고 칠 경우 1천200만 년이 걸릴 정도다. 그렇다면 구글은 SHA-1을 어떻게 무용지물로 만든 것일까.

구글 보안팀은 PDF 문서 전체가 아니라 일부 부분만 바꿔가면서 겹치는 값을 찾았다. 이 값을 찾기 위해 구글 클라우드에 있는 컴퓨터를 총 동원해서 922경 3천372조 368억 5천475만 번 이상 연산을 수행했다.

GPU를 많이 동원할 수록 계산에 드는 시간은 급격히 줄어든다.

922경번이라는 숫자가 엄청나게 크게 보일 수 있지만 GPU를 110개 동원하면 1년도 채 안되어 끝난다. 220개 동원하면 반 년(6개월), 440개 동원하면 3개월, 880개 동원하면 한 달 반만에 끝난다. 고성능 그래픽카드를 아낌없이 투입할 수 있다면 그야말로 시간 문제다.

실제로 구글은 “처음부터 하나씩 모든 값을 찾아 내는 것보다 우리가 이용한 방법이 10만 배 이상 빠르다”고 강조했다. 하지만 구글의 정책에 따라 어떤 방법을 어떻게 적용했는지는 90일이 지난 5월 말에나 공개될 예정이다.

은행 위장한 피싱사이트에 악용될 가능성 커

결국 구글은 그동안 인터넷 세상에서 안전하다고 여겨졌던 디지털 지문을 복사하는 방법을 찾아낸 셈이다. SHA-1이 인증서를 검증하는 데 널리 쓰였다는 사실을 생각해 보면 이것이 왜 심각한 문제인지 금방 알아챌 수 있다.

예를 들어 보안카드 비밀번호나 계좌번호, 인터넷뱅킹 ID와 비밀번호를 빼돌리기 위해 가짜 인터넷뱅킹 사이트를 만들었다고 가정해 보자. 하지만 인증서를 통해 이 웹사이트가 진짜라는 것을 증명할 수 없기 때문에 많은 사람을 속이는 데는 한계가 있다.

그러나 이 인증서를 위조한 다음 진짜 은행의 인증서와 똑같은 SHA-1 값을 갖게 하면 누구나 속아넘어갈 수 밖에 없다. 그럴싸한 디자인으로 정교하게 베낀 웹사이트에 가짜 인증서가 겹쳐지면 그 파괴력이 얼마나 위험할 지는 쉽게 짐작할 수 있다.

인증서에 내장된 SHA-1 서명을 위조하면 가짜 인터넷뱅킹 사이트도 만들 수 있다.

“웹브라우저 업데이트를 게을리 말라”

구글은 SHA-1이 더 이상 쓰여서는 안 되는 보안 기법이라는 것을 전 세계에 증명했다. 하지만 대부분의 보안 문제가 그렇듯이, 이런 문제는 보안 전문가와 개발자의 숙제로 남아 있다. 기자를 포함해 평범한 인터넷 이용자가 할 수 있는 일은 거의 없다.

그나마 다행인 것은 SHA-1이 이미 보안 업계에서도 요주의로 평가받는 기법이었다는 사실이다. 이미 국내 인터넷뱅킹에는 보다 강력한(깨기 어려운) SHA-256이 쓰이고 있다.

마이크로소프트와 구글, 애플과 모질라 등 웹브라우저를 개발하는 여러 기업도 SHA-1로 서명한 인증서에 대해 안전하지 않다는 경고창을 띄우거나 심하면 거부하기로 한 지 오래다.

결국 이 문제에 일반 인터넷 이용자가 대처할 수 있는 가장 좋은 방법은 낡은 보안 기법에 대해 이용자에게 경고를 보내주는 최신 웹브라우저를 쓰는 것 뿐이다. 너무나 간단한 일이지만 의외로 이를 지키지 않는 이들이 많다.

권봉석 기자bskwon@cnet.co.kr

소비자들이 꼭 알아야만 손해를 안 볼 정보가 무엇인지 항상 고민합니다. 숫자만 잔뜩 등장하는 알맹이 없는 이야기는 빼고, 고민하는 시간을 줄일 수 있는 정보를 보다 쉽게 전달하기 위해 노력하겠습니다.