암호
웹 사이트에 가입할 때마다 계정과 암호를 정해 입력해야 한다. 처음에는 계정을 정하는 것도 어려웠고 사이트마다 달라지는 문제 때문에 고민했다. 아이디로 쓸만한 것은 이미 다른 사람에게 선점당했기 때문이다. 지금은 계정때문에 고민하는 일은 거의 없다. 사람들이 거의 사용할 일이 없을 문자열로 내 아이디를 정했기 때문이다. 다른 사람이 보기에 내 아이디는 알파벳의 무의미한 나열일 뿐이리라. 어떤 이상한 사이트는 아이디도 영문자와 숫자 조합으로 만들라는 이상한 제약조건을 걸어두기도 하지만, 그런 사이트는 가입하지 않으면 그만이다.
그러나 암호의 경우는얘기가 약간 달라진다 . 우선 각 사이트마다 신뢰도가 다르기 때문에 보안수준이 약할 것이라 판단되는 사이트의 암호와 보안수준이 강할 것으로 판단되는 사이트의 암호를 같게 할 수 없다. 예를 들어 은행 등의 금융기관 사이트의 암호와 별로 유명하지도 않은 커뮤니티 사이트의 암호를 같게 할 수는 없는 것이다. 보안 측면에서 봤을때는 사이트마다 암호를 다르게 하는 것이 좋겠지만 내 머리로는 그 모든 암호를 다 기억하지 못할 것이다. 그래서 나는 암호 집합을 미리 만들어두고 그것들을 약간씩 변형하며 번갈아 쓴다.
그런데 일부 사이트는 암호에 온갖 제약을 걸어 놓는다. 암호 길이를 몇자 이상으로 강제하기도 하고, 특수문자가 입력되지 않게 하기도 하고, 문자와 숫자의 조합만 가능하게 하기도 한다. 물론 암호의 길이를 강제하는 것은 이해할 수 있다. 너무 짧은 암호는 뚫리기도 쉬우니까. 그러나 암호에 반드시 숫자를 포함하도록 하거나 특수문자를 입력하지 못하게 하는 것이 어떤 의미를 가진단 말인가?
암호 길이 제한
최소 길이 제한은 당연히 있어야 한다. 그러나 12자 또는 15자 이상으로 너무 길게 제한하면 곤란하다. 금융기관이 아니라면 8자~10자 정도로 정해도 충분하지 않을까 싶다. 입력 문자를 제한하지 않는다면 길이는 원하는 만큼 맞춰줄 수 있다고 생각한다. 그런데 암호의 최대 길이를 제한하는 사이트도 있다. 디스크를 얼마나 아끼려고 암호가 8자 또는 10자를 초과하지 못하게 하는지 알 수 없다. 정 길이를 제한하려 했다면 사용자가 입력한 문자열을 앞에서 원하는 길이만큼만 잘라 사용하면 될텐데 입력한 암호가 자릿수를 초과한다고 에러 메시지를 뿌리는 것을 보면 어떤 멍청한 개발자가 만들었는지 짜증이 날 뿐이다.
너무 짧고 간단한 암호라면 제한하는 게 맞겠지만 특정 길이 이하로 암호를 제한하는 일은 없으면 좋겠다. 그냥 사용자가 원하는 만큼 충분히 길게 정할 수 있게 해주자. 한 30자 정도까지 가능하게 하면 충분하지 않을까?
특수문자 입력
암호는 키보드로 입력하는 문자열이므로 특수문자를 막을 이유가 없다. 특수문자 입력을 허용하면 그만큼 조합의 개수가 많아지므로 보안이 더욱 강화되는 것 아닌가? 왜 특수문자 입력을 막아 조합의 수를 제한하려 하는지 이해할 수 없다. 기본적으로 암호를 입력하는데 있어 키보드로 입력가능한 특수문자는 모두 허용해야 한다.
어떤 사이트는 반드시 특수문자를 포함하도록 강제하는 경우도 있다. 암호의 복잡도를 측정하거나 이미 사전에 등록된 단어 하나로 정해진 암호를 제한해 사용자가 사전 공격으로 쉽게 뚫릴 수 있는 암호 사용하지 못하게 하는 것은 의미가 있겠지만, 특수문자 사용을 강제하는 것은 사용자의 자율성을 침해하는 것이다. 특수문자가 포함되어 있는 암호를 사용자가 어떻게 외우겠는가? 결국 사용자는 특수문자를 딱 하나만 사용하거나 암호를 포스트잇 같은 데 적어 컴퓨터 근처(모니터 옆이나 키보드 밑)에 둘 가능성이 커진다. 보안을 강화하려던 의도가 오히려 보안을 약화시키는 결과를 낳을 수도 있다.
숫자 입력 강제
역시 마찬가지다. 사용자가 암호로 뭘 쓰든 그것은 사용자 자율에 맡겨야 한다. 다만 너무 간단한 암호를 사용하려 할때 제한을 할 수는 있겠다. 예를들어 '1234', 'abcd', 'aaaa', 'qwert' 같은 암호는 사전 공격(dictionary attack)을 하면 바로 뚫릴 암호이므로 사용을 제한할 수 있다. 이런 사전은 인터넷에서 쉽게 구할 수 있다고 한다.
결론
암호는 그저 사용자가 알아서 정하게 하는 것이 상책이다. 다만 쉽게 뚫릴 위험이 있는 암호는 제한할 수 있다. 길이가 너무 짧은 암호는 일정 길이 이상이 되도록 강제할 수 있다. 너무 단순한 암호도 사용을 제한할 수 있을 것이다. 가령 해킹할 때 사전 공격에 사용되는 사전을 구해 사전에 있는 단어를 암호로 사용하는 것을 금지하는 방법을 고려할 수 있을 것 같다. 그러나 그 외의 제한은 없는 것이 좋겠다. 내가 암호에 숫자를 넣든 특수문자를 넣든 그건 내 마음대로 하고 싶다는 말이다. 그래야 내가 관리 가능한 암호를 만들 수 있다. 암호는 어디에 적어두지 않고 내 머릿속에서 관리할 수 있어야 보안도 그만큼 강력해지는 것이라 생각한다.