confirm password 필드는 더 이상 필요 없는가

비밀번호는 보안상의 문제로 ""으로 표시되기 때문에 오타를 냈어도 확인할 수 없고 잘못 입력하면 앞으로 로그인할 수도 수정할 수도 없어 계정을 그대로 버리는 문제를 발생시킨다. 따라서 비밀번호의 오타는 다른 정보들과는 다르게 큰 문제가 된다.

그래서 일반적으로 회원가입을 할 때, 비밀번호를 두 번 입력하도록 한다. 하지만 이런 방식이 UX를 크게 저하한다면서 다른 방식을 사용해야 한다고 주장하는 글이 있었다. 이 글에서는 비밀번호를 두 번 입력하는 대신 입력한 비밀번호를 읽을 수 있게 보여주는 토글 버튼이 있어야 한다고 주장한다.

언뜻 들으면 그럴싸해 보이지만 결론부터 말하면 절대 좋은 방식이 아니다. 최소한 웹 환경에서는 절대 해서는 안 되는 방식이다. 비밀번호를 보여줄 수 있게 만드는 방법은 다음과 같은 문제가 몇 가지 있다.

우선 브라우저에서 지원하지 않는다. 현재의 웹 스펙에 password input을 보여주는 방법은 없다. 따라서 text input을 이용해야 한다. 문제는 브라우저, 최소한 제대로 된 브라우저(심지어 I.E조차도)는 text input과 password input을 완전히 별도로 처리한다는 것이다. 이 둘의 차이는 단순히 내용이 눈에 보이는가 아니면 ""으로 보이는가의 차이가 아니다.

일단 당장 눈앞의 문제로 text input은 password input과 다르게 브라우저가 캐싱하고 자동 완성 한다는 것이나, 브라우저의 비밀번호 저장 기능을 생각해볼 수 있다. 캐시와 관련한 것은 autocomplete를 이용해서 조정할 수 있지만, 비밀번호 저장 기능은 password input만을 저장하기 때문에, text input을 이용한 상태에서는 어떻게 할 방법이 없다.

사실 비밀번호 저장기능이 중요한 기능이 아니기는 하다. 하지만 이 기능은 포기한다고 해도 여전히 브라우저가 password input과 text input 전혀 별개의 것으로 처리한다는 것은 문제다. 브라우저 개발자들은 비밀번호를 password input을 이용할 것을 기대하지 text input을 사용할 것으로 생각하지 않는다. 최소한 HTML 6가 나와 스펙이 변하거나, 많은 사람이 text input을 이용해서 비밀번호를 저장할 때까지는 그럴 것이다.

게다가 비밀번호를 눈으로 확인하게 하는 시스템은 기존의 방식보다 시간이 오래 걸린다. 단순히 절차상으로 걸리는 시간이 길어지는 것뿐 아니라, 내 비밀번호와 화면에 출력되는 시간이 길어진다.

이 시간은 보안에도 큰 문제가 된다. 내가 눈으로 내 비밀번호를 확인할 수 있다는 것은 내 등 뒤의 사람도 그 비밀번호를 볼 수 있다는 것이다. 설령 시스템이 아무리 안전하게 구성되어 있다고 해도 정작 다른 경로로 비밀번호가 노출될 가능성이 있다면, 이 시스템은 안전하지 않은 시스템이다. 즉, 비밀번호를 눈으로 보고 확인하게 하는 방식은 보안적으로 안전하지 않은 방식이다.

그다음 문제는 강력한 비밀번호일수록 사람의 눈으로 읽고 확인하는 것이 좋은 확인 수단이 아니라는 것이다. 짧고 간단한 비밀번호라면 금방 확인할 수 있다. 하지만 특수기호와 영대소문자를 섞어가면서 20글자의 비밀번호를 만들었다면? 그 비밀번호를 눈으로 보고 자신이 의도한 대로 친 것이라고 확신할 수 있을까?

기존의 비밀번호를 확인하는 방식으로 잘못된 비밀번호를 확인 못 하는 경우도 있다. Caps lock 키가 눌려서 대소문자가 바뀌어서 입력된 경우는 기존의 방식으로 잘못된 비밀번호를 확인할 수 없다. 하지만 이는 caps lock 키가 눌렸는지를 확인해서 해결해야 할 문제이지 위와 같은 문제를 감수하고 비밀번호를 보여주는 옵션을 추가해서 해결할 문제는 아니다.

즉, 비밀번호를 보여주는 방식은 기존의 방식에 비해서 제대로 된 비밀번호를 적었을 것을 보장하지도 않고, 안전하지도 않고, 플랫폼에서 지원하지도 않는다. 물론 이것은 웹에서의 이야기이고 위의 문제가 발생하지 않는 환경이라면 딱히 상관없다. 예를 들면, 데스크탑 OS나 서버 프로그램의 설치 화면이라면 그래도 상관없다고 생각한다. 하지만 이것은 오히려 특수한 경우이고 일반적으로 특히나 웹 환경에서 쓸만한 이야기는 아니라고 생각한다.

하지만 비밀번호를 두 번 타이핑하는 것이 사용자에게 안 좋은 UX를 제공할 수 있다는 의견에는 동의한다. 그렇지만 이를 해결하는 방법이 비밀번호를 보여주는 것은 아니다. 최소한 웹에서 쓸만한 방법은 아니다. 게다가 사실 비밀번호를 다시 타이핑하지 않고 가입하는 좋은 방법은 이미 나와있다. 이미 github이나 facebook이나 twitter 등에서 사용하고 있다. 가입 시 이메일을 받고 이메일을 통해서 인증받도록 하는 것이다. 이렇게 가입을 받으면 비밀번호를 잘못 입력했더라도 이메일을 통해 바꾸도록 하면 되니 문제 없고, 이메일을 잘못 입력하였더라도 일정 기간 내로 인증을 받지 않은 회원가입은 무효화 하면 되니 잘못 타이핑할 걱정을 하지 않아도 된다.

댓글

이 블로그의 인기 게시물

[C++] enum class - 안전하고 쓰기 쉬운 enum

RAII는 무엇인가

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

[Python] cache 데코레이터로 최적화하기

[Web] SpeechSynthesis - TTS API