brunch

You can make anything
by writing

C.S.Lewis

by 김명희 Jun 15. 2020

토스 사태로 보는 쉬운 비밀번호 이야기

쉽게 설명하는 IT

지난주 IT 관련해서 큰 뉴스는 토스 유출 사례가 아닐까 싶다.

https://www.dailysecu.com/news/articleView.html?idxno=109646


은행업에 진출을 앞두고 있고 편리하고 뛰어난 IT 기술로 각광받는 기업, 개인적으로는 매일 사용 중이고 선망하는 회사 중 하나인데 이런 사건이 터져서 안타까운 마음도 있다. 무슨 일이 벌어진 건가 하고 기사들을 살펴보니 일단 뭐가 유출돼서 터진 사고는 아닌 듯한데 토스 쪽 입장문에 비밀번호를 저장하지 않는다는 내용이 있었다.


비밀번호를 저장하지 않는다고? 그럼 어떻게 로그인을 하지? 내가 모르는 IT 기술이 도입되었나? 기사들을 좀 더 찾아보다가 무슨 얘기인 줄 알았다. 


비밀번호를 직접 저장하지 않고 단방향 암호화를 거쳐 해시값만 저장...



난 또 뭐라고. 말장난이잖아. IT 쪽 일을 하는 사람들은 쉽게 이해할 수 있는 말인데 비밀번호를 저장은 하지만 원본 그대로 저장은 안 하고 값을 변형해서 저장한다는 얘기다. 대부분 비밀번호를 이렇게 저장한다. 특별한 기술을 쓴 건 아니다. 저렇게 코멘트하면 비전공자들에게 뭔가 대단한 기술을 사용한 듯 착각하게 만드려고 일부러 어렵게 썼다는 생각도 든다. 그래서 IT 개발자로서 쉽게 이해할 수 있는 비밀번호 이야기를 풀어 보려고 한다. 일반적인 웹사이트에서 내가 입력한 비밀번호는 어떻게 저장되는지 알아보자.




1. 회원가입을 하면 저장되는 비밀번호

대부분 웹사이트에 회원가입을 하면 필수적으로 받는 정보가 아이디와 비밀번호다. 아이디로 사용자를 구분하지만 이 사용자가 맞는지는 비밀번호로 확인하게 된다. 저장소에는 아이디와 비밀번호를 한 쌍으로 묶어서 저장한다.


한쌍으로 저장된 아이디와 비밀번호



2. 비밀번호를 저장하는 방법 : 원문 그대로 저장

첫 번째 방법은 비밀번호를 입력받은 그대로 저장하는 것이다. 이렇게 저장할 때의 장점이 관리가 쉽다. 단점은 해커에게도 쉽다는 것이다. 저장소만 털어가면 온전한 아이디와 비밀번호를 큰 노력 없이 재활용(?) 할 수 있다. 요즘 이렇게 저장하면 큰일 난다. 절대 쓰면 안 되는 방식인데 가끔 뉴스에 해킹 관련 기사를 보면 아직도 이렇게 쓰는 곳도 있더라.


이렇게 저장하면 큰일 난다



3. 비밀번호를 저장하는 방법 : 양방향 암호화

두 번째 방법은 비밀번호를 다른 값으로 바꾸고 바꾼 값을 다시 원래 값으로 복원할 수 있는 방법으로 저장하는 것이다. 비밀번호 원본 값을 다른 값으로 바꾸는 걸 암호화, 암호화된 값을 원본 값으로 바꾸는 걸 복호화라고 한다. 첫 번째 방법보다는 안전하다. 하지만 바뀐 값에서 다시 원본 값으로 바꿀 수 있는 가능성이 존재하기 때문에 이 방법도 좋지는 않다. 어렵더라도 어쨌든 원본 비밀번호로 추출은 가능은 하니까. 이 방법도 아직 쓰이긴 한다.


비밀번호를 바꿔서 저장하니 그대로 저장하는 것보다 안전하다
그러나 바뀐 값에서 원본 값을 추출할 수 있으니 위험성은 남아있다




4. 비밀번호를 저장하는 방법 : 단방향 암호화

세 번째 방법은 비밀번호를 다른 값으로 바꿔서 저장하는데 바뀐 값으로는 다시 원본 값을 추출할 수가 없다. 그래서 해커에게 비밀번호가 유출돼도 이 값으로는 원래 비밀번호 값을 알 수 있는 방법이 없다. 대부분 비밀번호를 이런 방식으로 저장하고, 이게 토스에서 말하는 단방향 해쉬값 저장 방법이다. 단방향은 암호화만 가능하다는 얘기다. 


암호화된 값으로 원본 비밀번호를 추출할 수 없다




5. 비밀번호를 바꿔서 저장하면 맞는지 어떻게 비교하나?

비밀번호를 바꿔서 저장하면 내가 입력한 비밀번호와 어떻게 비교를 할 수 있는지 의문이 생길 수 있다. 일단 로그인할 때 비밀번호를 입력하면 무조건 한번 암호화를 한다. '1111'이라는 값을 입력하면 암호화를 거쳐 'abcd'라는 값으로 바꾼다. 이걸 반드시 한번 수행한다. 이미 저장소에는 'test'라는 아이디의 비밀번호가 'abcd'라는 값으로 바뀌어 저장되어 있다. 그러면 비밀번호 '1111' 입력 후 암호화된  'abcd'와 저장되어 있는 'abcd'값을 비교한다. 같으면 로그인되는 것이다. 


암호화된 값으로 비교한다



6. 해커가 암호화된 비밀번호를 그대로 입력하면 로그인되는 것 아닌가?

암호화된 값으로 비교를 한다? 그러면 해커가 암호화된 비밀번호를 털어서 'abcd'를 입력하면 로그인되는 것 아닌가? 하고 생각할 수 있다. 하지만 위에서 얘기했듯 사용자가 입력한 비밀번호는 무조건 암호화를 한번 거친다. 그러니까 '1111'이라는 비밀번호가 암호화를 거쳐 'abcd'라는 값이 나왔듯이 'abcd'라는 값을 입력하면 이 값도 암호화를 거치기 때문에 전혀 다른 값이 나온다. 그래서 암호화된 값을 그대로 입력하면 값이 달라져 로그인을 할 수 없다.


암호화된 값을 암호화하면 전혀 다른 값이 만들어진다




7. 단순한 비밀번호는 추측이 가능

 단방향 암호화는 특정값을 항상 같은 값으로 바꿔준다. 예를 들어 '1111'을 입력하면 항상 'abcd'라는 값으로 만들어 준다. 그래서 잘 알려진 취약한 비밀번호인 '1111', '1234'와 같은 비밀번호를 사용하면 암호화된 값도 항상 동일하기 때문에 추측이 가능해진다. 그래서 흔한 비밀번호는 사용하면 안 되고 복잡하게 만들어 줘야 한다.



작가의 이전글 직장 동료를 너무 미워하지 말자
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari