해시
e-mail: gerecter@gmail.com                                곽재식의 hehehe 블로그
암호 분야에서 유용한 것은 정보를 알아볼 수 없게 암호화하고 그것을 필요할 때 다시 되돌릴 수 있는 기술입니다. 그런데, 자료를 해시(hash)로 바꾸면 알아볼 수 없는 암호가 되기는 하지만 그 정보는 파괴되어 다시 되돌릴 수가 없게 됩니다.

파괴해서 되돌릴 수 없게 바꿔버린다니, 얼핏 하등하고 쓸모 없는 방법인데, 역설적으로 이런 파괴적인 특성 때문에 해시는 암호 분야에서 오히려 유용한 특징이 생깁니다. 이 글에서는 이에 대해 기초에 해당하는 이야기들을 해 보겠습니다.

쓸모 없음의 쓸모, 되돌릴 수 없기 때문에 유용한 해시

해시는 어떤 파일이나 정보를 짤막한 다른 숫자로 바꾸는 기술 입니다. 대중적인 @MD5 기술의 경우, 어떤 문장이나 파일을 약 38자리 숫자로 특정한 규칙에 따라 바꾸어 줍니다. 이렇게해서 생긴 숫자를 MD5 해시라고 합니다. 이때 같은 파일을 바꾸면 항상 같은 숫자가 나오기는 하지만, 그렇다고 해서 이 숫자를 보고 원래 파일의 내용을 복원해 낼 수 있는 것은 아닙니다.
  • @기미독립선언서의 MD5 해시는 이렇습니다: 1e6dc8fb9b45869d812a91402c1ea54d
  • @세계인권선언 전문의 MD5 해시는 이렇습니다: 364d80c2c4e3f2f36714593d90f3140d
  • 보통 아주 커다란 파일이 정확히 오류 없이 전송 되었는지 확인하려고 할 때, 원본과 전송본이 같은 지 일일히 전체 내용을 비교해 보면 너무 오래 걸리니까 각 파일을 MD5 해시로 변환한 뒤에, 이 몇 글자 안되는 MD5 해시 값만 같은 지 다른 지 비교해 보는 식으로도 활용 합니다. (만약 MD5 해시 값이 다르다면 원본과 전송본은 다르다는 것입니다. 한편, 같다고 해서 100% 확실히 같다고 보장할 수 있는 것은 아니지만 우연으로 같아질 확률은 높지 않습니다.)

(이 사람이 MD5 개발자인 Ronald L. Rivest 입니다.)

어떤 귀중한 내용을 알 수 없게 만들어 전달한답시고 해시로 바꾸어 전달한다면 그걸 받아도 무슨 내용이었는 지 알아 볼 길이 없는 것입니다. 즉 해시로 바꾸는 순간 원래의 자료는 망가지고 파괴되어, 되돌릴 수 없는 형태로 변해 버립니다.

그런데 여기에도 장점이 있습니다. 해시로 바꾸어 전달하면, 전달하는 도중에 누군가 그걸 훔친다고 해도 무슨 내용이었는지 그 사람 역시 알아볼 길이 없는 것입니다.

얼핏 생각하면 그러면 정당하게 자료를 받은 사람 조차도 원래 무슨 말인지를 알 수가 없으니, 아무 소용 없지 않나 싶을 수도 있습니다. 그러나 받은 사람 입장에서는 원래 무슨 내용인지 알아 낼 수 없다고 해서 완전히 쓸모가 없는 것만은 아닙니다. 같은 내용을 자기가 전부터 갖고 있었다면, 상대방이 그 같은 내용을 정말 보냈는지 아닌지 확인은 할 수 있습니다.

패스워드 저장에 활용

이런 것은 패스워드(password)를 저장하는데 유용하게 쓰일 수 있습니다. 동호회 웹사이트에서 회원들의 패스워드를 저장해 둔 것이 만약 유출된다면 모든 회원들의 패스워드가 악용될 것입니다. 그런데, 만약 패스워드를 그대로 저장해 둔 것이 아니라 해시로 바꾸어 저장해 두었다면, 누가 훔쳐 간다 하더라도 원래 패스워드가 무엇이었는지는 알 수 없습니다. 해시로 바꾸면 되돌릴 수 없게 변해 버리기 때문입니다.

그러면서도 로그인 할 때 패스워드를 입력 받는 경우에는, 입력 받은 것의 해시와 저장된 것이 같은 지만 비교하면 맞는 패스워드를 입력했는지 아닌지는 알 수 있습니다.

예를 들어,
  • 내 패스워드가 brazil1985 라고 할 경우,
  • 이것을 서버에 그대로 저장해 둔다면
  • 서버를 누가 엿볼 경우 내 패스워드는 탄로 납니다.
  • 그런데 이것의 MD5 해시인 5cf56e59e93d4ae97570e39905cfb4eb 를 대신 저장해 둔다면,
  • 서버를 누가 엿봐서 이 값을 안다고 해도 패스워드를 알아낼 길이 없습니다.
  • 한편 서버에 누가 패스워드를 접속할 때, macao1952 라고 입력한다고 하면,
  • 그것을 비교할 때는 macao1952를 MD5 해시로 바꾼 de5ea7b8d7058cc3afbe9103776bc33e 를 기준으로 비교하는데,
  • 이것은 서버에 저장된 내 패스워드의 MD5 해시 5cf56e59e93d4ae97570e39905cfb4eb 와 다르기 때문에 틀린 패스워드임을 알 수는 있습니다.
같은 방식이 되는 것입니다.

보안에 활용

마찬 가지로, SSL 같은 암호화 기술이 없는 경우에 해시를 이용해서 최소한의 보안을 갖추는 임시 수단으로도 활용할 수 있습니다.

인터넷은 보통 통신하는 내용을 같은 망을 사용하는 다른 사용자가 엿보기 좋은 구조로 되어 있습니다. 그래서 중요한 내용은 엿봐도 무슨 내용인지 모르도록 암호화 해서 보내야 합니다. 주요 웹사이트의 경우에는 주로 SSL, @TLS 기술을 이용해서 암호화를 하곤 합니다. 이런 조치가 없다면, 공용 와이파이로 인터넷을 하다가 패스워드를 입력해서 보낼 때, 그 내용을 같은 와이파이를 쓰는 사람이 엿보고 그 패스워드를 그냥 바로 눈으로 읽을 수도 있을 것입니다.



서버에서 보관하고 있는 패스워드와 사용자가 입력한 패스워드를 전송 받아 비교할 때에, 이런 식으로 중간에 누가 엿보는 것을 대비해야 합니다. 이때, SSL을 쓸 형편이 안된다면, 없는대로 부실하나마 해시를 이용해서 다음과 같은 방법을 임시로 써 볼 수 있을 것입니다.
  • 패스워드를 입력 받기 전에 서버에서 임시 숫자를 만들어서 세션 쿠키 등으로 보냅니다.
  • 사용자가 로그인하려고 패스워드를 입력하면, 웹브라우저에서 Javascript 등을 이용해 받은 임시 숫자와 패스워드를 조합 합니다. (그냥 이어 붙여도 됩니다.)
  • 웹브라우저에서 Javascript로 조합한 내용을 해시로 바꾸어 서버로 보냅니다.
  • 서버에서는 아까 보낸 임시 숫자와 서버 쪽에서 예전부터 보관하고 있는 패스워드를 조합한 뒤 역시 해시로 바꿔 봅니다.
  • 서버쪽에서 만든 해시와 웹브라우저에서 전송 받은 것과 같은 지 비교합니다. 다르다면, 잘못된 패스워드를 입력한 것입니다. 반대로 같다면 보관하고 있던 패스워드와 같은 것을 사용자가 입력했다고 거의 확신할 수 있습니다.
이렇게 하면, 브라우저에서 서버로 자료가 전달 되는 도중에 누가 엿본다 하더라도, 다음 번에 로그인을 할 때에는 임시 숫자가 바뀌어 써먹을 수가 없게 됩니다. 왜냐하면 새로운 임시 숫자에 맞는 내용을 서버에 보내려면 패스워드와 새로운 임시 숫자를 조합해야 하는데, 엿본 내용을 패스워드로 되돌릴 방법이 없기 때문에 패스워드는 알아낼 수가 없습니다.

설령 엿 봤을 당시의 임시 숫자가 뭔지까지 알아냈다고 하더라도, 패스워드로 되돌릴 수 없기는 매한가지 입니다. (이런 식으로 원래 암호에 섞어서 사용하는 임시 숫자를 보통 salt라고 합니다.)

한계와 다른 이야기들

해시를 만드는 규칙이 좋지 않으면, 엉뚱한 내용을 입력해도 우연으로 같은 해시가 나타날 가능성이 높습니다. 이런 경우를 충돌 저항성이 없다고 합니다. 이렇게 되면, 정확한 패스워드를 입력하지 않더라도 우연히 맞는 패스워드로 판정될 수가 있습니다.

널리 알려진 MD5의 경우, 21세기에 접어 들면서 이렇게 우연히 맞아 떨어지는 원본 자료를 찾아낼 수 있는 몇가지 영리한 방법이 고안 되었습니다. 그래서 요즘에는 보안을 위해 사용하는 해시의 경우 MD5를 쓰지 않고 다른 기술인 SHA 계통을 더 많이 사용한다고 합니다.

MD5에 대해서는 소위 rainbow table 이라는 수법도 상당히 진전되어 있습니다. 이것은 자주 나오는 다양한 MD5 해시에 대해서, 그 해시로 변환될 수 있는 원본값들을 꾸준히 수집해서 막대한 양으로 모아 놓은 커다란 표입니다. 지금껏 MD5 해시를 원래 자료로 정확하게 되돌릴 수는 없다고 했습니다만, 이 표에 만약 그 MD5 해시가 적혀 있는 경우라면, 그 자료 역할을 하는 내용을 알 수 있는 것입니다.

역설

비대칭 키를 이용하는 복잡한 암호화 기술이 없는 상황에서, 해시를 이용하는 이런 보안 기술을 급한대로 쓸 수 있다는 것은 재미 있습니다. 특히나, 돌이킬 수 없게 정보를 파괴해 버린다는 특징 때문에 도리어 보안에 유리해진다는 것이 역설적인 느낌이 들어서 더 재미 납니다.

쓸모 없다는 점이 가장 큰 장점이 되는 느낌입니다. 쓸모 없는 나무일 수록 사람들이 베어 가지 않기 때문에 오래오래 크게 자라나서 나중에는 커다란 그늘을 드리우게 된다는 옛 이야기가 생각 납니다. #IT


블로그지기 곽재식
작가로 활동하면서, 한편으로는 공학 분야에 종사하며 안전, 환경에 대한 연구를 하고 있습니다.

April/18,2016 16:09:51
이전글: 공통

처음 | 업데이트목록 | 가나다순목록