비밀번호 입력.. 꼭 그렇게까지 해야 속이 후련할까?

2023. 2. 3. 15:26학습일지

Overview

회원가입을 진행하기위해 플로우 차트를 작성하던 중, 비밀번호 입력 제약에 대해 고민하게 되었다. 일반적으로 대부분 서비스들을 살펴보면, 비밀번호 입력시 다음과 같은 패턴을 강요한다.

  • 최소 10자이상
  • 영문 대소문자
  • 숫자
  • 특수문자

이러한 패턴을 강요하는 과정이 보안을 강화시켜줄 수 있겠지만, 결과적으로 사용자 경험을 낮추는 요소가 될 수 있을 듯하여, 해당 내용을 조사하고 상황을 다시 정의해보고자 한다.

 

위와 같은 비밀번호 패턴이 발생한 이유

아무리 개인정보 보안을 강화하기 위해서라지만, 너무 복잡하다. 사용자 경험 개선을 위해, 이 패턴을 없앨 수 있는지 확인을 해볼 필요가 있다.

먼저 이러한 패턴이 생긴 이유를 살펴보자.

 

범인(?)은 빌 버(Bill Burr)

“NIST Special Publication 800-63. Appendix A.”의 저자인 빌 버는 2003년 국립표준기술연구소에 근무하는 동안 '해킹 당하고 싶지 않으면, 대소문자,숫자,특수문자를 써서 패스워드를 만들어라'라고 하면서, 다음과 같은 규칙을 만들었다.

  1. 최소 8자 이상
  2. 대문자, 소문자, 숫자, 특수문자 각각 1개 이상 포함
  3. 90일 주기로 변경

특히 3번의 경우, 몇몇 웹 서비스를 이용하다보면 많이 경험해보는 부분이다.

그런데 이러한 규칙을 만든 빌버는 이 규칙을 만든걸 매우 후회한다고 한다. 왜 그럴까?

 

빌버: "사람들이 내 생각처럼 안해줘... 😥"

제목이 곧 내용이다. 사실 3가지의 규칙을 만든이유가 비밀번호를 유추하기 힘들게해서, 해킹을 어렵게 하려는 의도가 강하다. 그런데, 위의 규칙을 그대로 따르려고 하니.. 사용자들이 귀찮아서 그냥 구색 맞추기용으로 대충 지킨다는 것이다.

 

이상

dFq#$09dh!

 

현실!

qweQWE123!

 

이렇게 입력해도 어쨋든 빌버의 규칙에는 어긋나지 않지만.. 사실 비밀번호를 이렇게 쓰면, 굳이 해커가 아니라도 아이디만 알면 충분히 유추해볼 수 있는 패턴이다.

또한 90일 주기로 변경도 사실 구색맞추기로 진행할 수 있는데 요런식으로 하면, 진짜 바꾸는 보람이 없다..

// 최초 비밀번호
qweQWE123!
​
// 90일 후...
qweQWE123@
​
// 또 90일 후...
qweQWE123#

위와 같은 사례들로 미루어봤을 때, 규칙을 지켜봐야 별 효용성은 없어보인다. 그렇다면, 비밀번호를 본래 의도대로 입력하는게 효과적일까?

 

해커: 해킹을 하는데 굳이 비밀번호를 알아야돼?

소 제목 그대로, 사실 해커가 해킹을 하는데 사용자 번호를 기억하거나 알아내려고 하지 않아도 된다. 웹 서비스를 기준으로 생각해본다면, 어차피 서비스를 제공받기 위해 특정 페이지에 접근할 수 있기만 하면 된다. 대부분 서비스는 1차적으로 악의적인 사용자 혹은 미확인 사용자의 접근을 막기위해 인증을 수행하지만, 보안의 허점을 찾고 우회한다면, 굳이 비밀번호를 몰라도 인증이 필요한 리소스에 접근이 가능할 수 있다.

그리고, 레인보우 테이블 등을 참고하면, 간단한 평문 암호 뿐만아니라, 시간만 충분하다면, 무작위의 문자열을 해시함수로 암호화를 했음에도 충분히 탈취당할 수 있다. 스프링 시큐리티에서는 레인보우 테이블+브루트포스 방식으로 암호를 탈취하는 것을 막고자 기본적으로는 Bcrypt 암호화 알고리즘같이 적응형 해시 함수 암호화 방식을 채택하고 있기는 하지만, 이 부분은 나중에 좀 더 자세히 이야기 하겠다.

 

결론

마지막에 잠깐 이야기가 샜는데, 정황상 내가 내릴 수 있는 결론은 '보안 강화를 위해 비밀번호 입력 패턴을 제한하는 것은 좋은 방법이 아니며, 오히려 사용자를 힘들게 한다'이다. 어려운 암호는 사용자의 기억력을 시험하게 하며, 보안 강화랍시고 여기저기 계정을 만들때마다 무작위 문자열로 마구마구 찍어내면, 나중엔 기억이 안나서 결국엔 일일이 비밀번호 찾기 로그인을 하게 되는 현상이 생긴다.

따라서, 보안 강화가 목적이라면, 비밀번호를 복잡하게 쓰도록 강요할게 아니라 비밀번호 자체는 사용자 식별용으로 단순하게 사용하고, 네트워크 보안 혹은 비즈니스 로직 코드 자체(즉, 시큐어 코딩)에 더 힘을 쓰는 것이 더 효과적인 방법이 아닐까 싶다.

심지어 한국인터넷진흥원도 역시 꽤 오래전부터 (약 18년) 비밀번호 입력 규약을 간소화하여

  • "세가지 종류 이상의 문자구성으로 8자리 이상의 길이로 구성된 문자열" 또는
  • "두가지 종류 이상의 문자구성으로 10자리 이상의 길이로 구성된 문자열"로 변경되었다.

 

참고