본문 바로가기
개발 1도 모르지만 어디가서 아는 척할 수 있는 IT 지식

주의!! 여러분의 비밀번호는 암호화되지 않습니다..!

by 성장하는 마인드 2022. 10. 19.

여러분의 패스워드는 안전하신가요?

혹시 아래와 같은 사이트에서 여러분의 패스워드가 얼마나 해킹당하기 힘든지 알아보신 적이 있으신가요? 

(없으시다면 재미삼아서 한 번 해보시기 바랍니다)

https://www.passwordmonster.com/

 

Password Strength Meter

How strong are your passwords? Test how secure they are using the My1Login Password Strength Test.

www.passwordmonster.com

 

그런데, 회사에서 보통 패스워드를 저장할 때 암호화를 하지 않고 저장한다는 거 아시나요? 혹시 패스워드 찾기할 때 왜 재설정만 있고 지금 패스워드는 안 알려주는지 의문을 가져보신 적 없으신가요?

 

네, 맞습니다. 보통 회사에서 로그인 시스템을 만들때 여러분이 적은 패스워드를 별도로 암호화하지 않습니다. (물론 하는 곳도 있습니다^^) 그런데도 여러분의 패스워드는 안전하게 보관됩니다. 회사에서 데이터를 볼 수 있는 사람도 여러분의 패스워드를 볼 수가 없습니다. 암호화가 안되어 있는데 어떻게 가능할까요?

 

암호화(Encryption) vs 해시(Hash)

여기서 중요하게 알아두시면 좋은 개념이 바로 암호화와 해시입니다. 

 

암호화는 말그대로 원래의 문자를 나만 알아보도록 특정 키로 변환해놓는 것을 의미합니다. 예를 들어서 abc 라는 글자를 나름의 방식으로 bcd 라고 암호화 할 수 있습니다. 여기서 키(key)는 "알파벳을 하나씩 뒤로 옮긴다" 입니다. 같은 키로 여러가지 문자를 암호화할 수 있습니다. "father"는 "gbuifs"로 "hello"는 "ifmmp" 로 암호화할 수 있습니다. 그러면 키를 모르는 사람이 봤을때 "gbuifs" 라는 문자는 의미를 알 수 없는 괴상한 문자가 됩니다. 하지만 여러분이 키만 알려주면 원래 의도했던 단어인 "father"를 찾아낼 수 있는 겁니다. 이렇게 암호화된 문자를 다시 해독하는 것을 복호화라고 합니다.

 

해시많은 요소들을 고정된 틀안에 맞도록 만드는 것을 의미합니다. 가장 간단한 예가 나머지 연산입니다. 예를 들어 학급에 30명의 학생들이 있다고 해보겠습니다. 학생들을 5개 조로 나누려고 합니다. 그러면 간단하게 자신의 출석번호를 5로 나눈 나머지가 같은 사람들끼리 묶으면 됩니다. 즉, (1,6,11,16,21,26)번 학생들은 같은 조에 배정될 겁니다. 이렇게 고정된 길이(5개 조) 안에 그보다 많은 양의 데이터를 넣을 때 (30명) 이렇게 해시라는 기법을 사용합니다.

 

암호화와 해시의 가장 큰 차이는 변환되는 방향입니다.

 

암호화는 원래 문자에서 암호화된 문자로 변환이 되면서, 반대로 암호화된 문자에서 원래 문자로 복호화가 가능합니다. 즉, 양방향으로 변환이 가능합니다. 이때 핵심은 결국 암호화/복호화에 쓰이는 키(Key)입니다. 어떤 회사에서 패스워드를 A라는 키로 암호화 했다고 하겠습니다. 해커가 여러분의 패스워드를 알아내기 위해서는 어떤 키를 사용하는지만 알면 됩니다. 그 키를 알아내면 그 회사에 가입한 모든 유저의 패스워드를 평문으로 복호화할 수 있습니다. 따라서 회사 입장에서는 키를 안전하게 관리해야하는 부담이 발생합니다.

 

반면, 해시는 원래 문자에서 매핑된 문자로 변환만 가능합니다. 즉, 변환된 문자에서 원래 문자를 찾는 것은 불가능합니다. 위의 예시에서 1번 학생이 어느 그룹으로 들어가는지는 알 수 있지만, 그 그룹에 들어간 사람이 1번인지는 알 수가 없습니다. 만약 "특정학생이 나머지가 1인 그룹에 있다" 라는 정보를 입수했다고 하면, 그 학생이 찾아내기 위해 6번의 비교를 해야합니다. 만약 학급에 학생들이 1억명 있다고 해보겠습니다. 그러면 한 그룹에 2천만명이 들어가는데, 이때는 한 명의 학생을 찾기위해 2천명을 다 비교해야 합니다.

 

해시를 활용해서 패스워드를 관리하면 위와 같은 장점을 누릴 수 있습니다. 설령 매핑된 값을 안다고 하더라고, 그 원래 값을 찾으려면, 그 값으로 매핑될 수 있는 수많은 평문들을 다 비교해야만 합니다. 여러분의 패스워드가 82,589,933 * 77,232,917 의 결과인 6,378,661,440,424,561 라고 하면, 해커는 6,378,661,440,424,561 되는 두 쌍을 1부터 차근차근 찾아야 합니다. 보통 최근에 많이 사용하는 해시 방식을 사용하면, 같은 값을 찾는데 수십억년이 걸립니다. 즉, 여러분의 패스워드는 수십억년 뒤에 누군가 해킹할수도 있습니다! 다만, 수십억년이라는 시간이 안전을 보장해주는 것 뿐입니다.

 

 

이제는 "왜 패스워드 찾기를 지원하지 않을까" 에 대한 의문이 해소되셨을 겁니다!

이유는 간단합니다! 회사도 모릅니다. 그래서 그냥 새롭게 설정하라고 하는 겁니다!

 

여담

참고로 패스워드를 안전하게 만들때 알수 없는 괴상한 난수보다 문장이 더 해킹하기 어렵다고 합니다. ENISA라는 유럽정보보호 전문 기관에서는 아래와 같이 안전한 패스워드를 위한 5가지 가이드를 제공하기도 합니다. 

 

1. 패스워드 길이는 무차별 대입 공격을 기하급수적으로 어렵게 하므로, 복잡성보다는 패스워드 길이가 길어야 함
2. 특수문자가 포함된 문자열보다 문장이 기억하기 쉽고 보안성이 높아야함
3. 조직의 서로 다른 시스템에는 동일한 암호를 사용금지함
4. 격자의 암호해독 시간 제한 및 노출된 패스워드의 도용방지를 위해 정기적인 패스워드 변경이 필요함
5. 사용자가 정기적으로 패스워드를 변경하는 경우, 이전에 사용했던 패스워드를  재사용하는것을 금지함

출처: https://koreascience.kr/article/JAKO202125761257599.page?&lang=ko

댓글