본문 바로가기

computer science

비밀번호는 왜 해시 함수를 이용해 암호화를 할까?(feat. 디피 헬만 키 교환)

개요

어떤 사이트에 접속해서 아이디와 패스워드를 입력해 가입을 한 뒤 로그인을 한다고 가정해보자. 아이디와 비밀번호라는 개인정보가 모두 공개되지 않으면 좋겠지만, 아이디는 비교적 공개되어도 되는 데이터에 가깝다. 하지만 비밀번호는 절대 공개되어선 안되는 데이터다. 심지어 웹사이트를 관리하는 관리자조차도 비밀번호를 함부로 알아선 안된다.

그렇지만 사용자가 로그인을 하기 위해선 회원가입 시에 입력한 비밀번호의 값을 서버 저장소에 보관한 뒤, 로그인 시에 입력하는 비밀번호가 저장된 비밀번호와 일치하는지 확인하는 작업이 필요하다. 보통 비밀번호는 평문 자체를 저장하지 않고 암호화한 임의의 값을 저장한다. 여기에서 핵심은 다음과 같다.

 

데이터를 한방향으로만 흐르게 해야 한다.

임의의 값으로 암호화하는 작업은 쉽고 빠르지만 복호화하는 작업은 불가능에 가까워야 한다. 비밀번호를 입력했을 때 해당 값을 암호화하는 작업은 쉽고 빠르게 되어야 하지만, 암호화된 값을 기반으로 비밀번호 평문을 알아내는 것은 불가능에 가깝게 만들어야 한다. 이를 이해하기 위해서 디피 헬만 키 교환(Diffie–Hellman key exchange)을 알아보자.

 

디피 헬만 키 교환

공개키를 안전하게 교환하기 위한 방법으로 Whitfield Diffie, Martin Hellman의 이름을 땄다. 현대에는 RSA가 지배적인 공개키 알고리즘이므로 데이터를 한방향으로 흐르게 한다는 개념을 이해하기 위한 정도로 짚고 넘어가자.

단순히 y = f(x)로 설명하자면, 값을 계산하기 위한 매개 변수를 모두 알면 결과 값을 도출해내긴 쉽지만 결과 값을 기반으로 매개변수를 도출하기는 어렵다는 뜻이다. g, x, p 값을 알면 y의 값을 계산하기는 쉽고 빠르지만, y, g, p 값을 이용해서 x의 값을 역으로 알아내는 것은 어렵다.

Alice와 Bob이 주고 받게 되는 데이터, 위 그림에서는 common paint와 public transport에 해당한다. 이 두 데이터는 공개적인 네트워크에서 주고 받기 때문에 탈취될 수 있다. 

하지만 secret colours는 각각 Alice와 Bob 이외에는 알 수가 없다. 공개적으로 주고 받는 색깔들이 무엇인지와는 상관 없이(최초의 common paint는 공개되어도 상관은 없지만, 양 측이 같은 데이터라는 확신을 갖고 있는 데이터다), 양 측은 공개적인 네트워크로 주고 받은 적이 없는 'common secret'이라는 동일한 색상을 공유하게 된다. 이 값이 서로가 공유하게 되는 대칭적인 비밀키가 된다. 

이해를 돕기 위해 다음 자료(위키, 영상)들을 참고하면 좋다.

 

비밀번호를 암호화하자

엄밀히 따지면 위에서 설명한 디피-헬만 키 교환 방식은 암호화와는 관계가 없다. '공개적으로 주고 받는 데이터를 이용해 대칭적인 비밀키를 어떻게 생성해낼 수 있는가?'에 대한 방법이기 때문이다.

다만 '데이터를 한방향으로 흐르게 한다'는 점에 착안하자. 암호화는 쉽고 빠르지만 복호화는 불가능에 가깝다. 비밀번호 암호화에 해시 알고리즘을 사용하는 이유다. 해시 알고리즘을 활용하면 입력값에 대해 동일한 출력값을 반환하지만, 출력값을 이용해 입력값을 찾아내는 것은 어렵게 된다.

 

 

[참고자료]

The discrete logarithm problem

https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange