본문 바로가기

IT 기술 정보

패스워드 길이와 복잡도에 관한 고찰(NIST 800-63B)

반응형

본 내용은 NIST 800-63의 Appendix A를 번역한 것임을 알려드립니다. 이해를 돕기 위해 일부 의역이나 자의적인 해설 등을 포함하였으니 원문을 정확히 확인하고 싶으신 경우 아래 링크를 클릭하세요.


https://pages.nist.gov/800-63-3/sp800-63b.html#appA

부록 A - 사람이 기억하는 패스워의 강도

이 부록에서 "패스워드"라는 단어는 토론의 편의를 위해 사용된다. 이는 숫자로된 PIN번호 및 문자열, 숫자, 특수문자 등으로 구성된 암호 등을 포함한다. 여기서 사람이 기억하는 패스워드란 시스템에서 자동으로 발급된 키(Key)나 소스코드에 내장된 암호값이 아니라 주로 사람들이 스스로 정해서 머리로 기억하여 사용하는 형태의 패스워드를 말하는 것이다.


1. 소개(Intro)

패스워드를 사용하는 것은 사용 편의성과 보안 측면에서 문제가 많아 왔음에도 불구하고, 패스워드는 아직까지 매우 널리 사용되는 인증 형태이다. 하지만 인간은 복잡하고 무작위적인 비밀을 외우는 능력이 제한돼 있어 쉽게 짐작할 수 있는 암호를 선택하는 경우가 많다. 이로 인한 보안 문제를 해결하기 위해 온라인 서비스는 이러한 패스워드의 복잡성을 증가시키기 위한 노력의 일환으로 패스워드 수립 규칙을 도입했습니다. 이러한 규칙 중 가장 눈에 띄는 것은 '구성 규칙'이다. 구성 규칙은 사용자가 하나 이상의 숫자, 대문자 및 기호와 같은 문자 유형을 혼합하여 구성한 패스워드를 선택해야 한다는 것이다. 그러나 유출된 패스워드 DB를 분석해보면 그러한 규칙들은 사용성(usability)과 기억 편의성(memorability)에 미치는 영향은 심각하지만 처음에 생각했던 것만큼 그 효익이 크지 않다는 것을 알 수 있다.

 

사용자가 선택한 패스워드의 복잡성은 샤넌의 엔트로피 정보 이론을 사용하여 계산되기도 한다. 결정론적 분포함수를 가진 데이터에 대해서는 엔트로피를 쉽게 계산할 수 있지만, 사용자가 선택한 패스워드에 대해서는 엔트로피를 추정하는 것이 어렵고, 그렇게 정확하게 되지도 않았다. 이러한 이유로, 패스워드 길이에 기반한 다소 단순하고 새로운 접근법이 이렇게 제기되게 되었다.

 

비밀번호를 향한 많은 공격은 비밀번호의 복잡성이나 길이에 영향을 받지 않는다. 키 로깅, 피싱 및 소셜 엔지니어링 공격은 간단하지만 길고 복잡한 암호에도 똑같이 효과적이다. 이런 류의 공격들은 본 부록의 적용범위에 포함되지 않는다.

 

2. 길이(Length)

암호 길이는 암호 강도를 특징짓는 주요 요인으로 밝혀졌다. 너무 짧은 암호는 무차별 대입 공격(brute force)뿐만 아니라 일반적인 단어들과 흔히 선택되는 패스워드를 모아 놓고 대입하는는 사전 공격에 취약하다.

 

필요한 최소 암호 길이는 해결하려는 위협 모델에 따라 크게 달라진다. 공격자가 암호를 추측하여 로그인을 시도하는 온라인 공격은 연속적인 로그인 시도의 속도를 제한함으로써 완화할 수 있다. 공격자(또는 비밀번호를 자꾸 틀리는 사람)의 반복적인 틀린 시도로 이용자가 서비스 접속을 차단당하는 것은 방지되어야 한다. 그러기 위해선 그저 몇번의 잘못된 입력이 아니라 진짜 추측이 성공할지도 모를만큼의 많은 시도가 있기 전에서야 비율 제한(rate limiting)이 생길 정도로 패스워드가 복잡해야 한다.

 

공격자가 데이터베이스 침투를 통해 하나 이상의 해시된 패스워드를 얻게 되면 이는 오프라인 공격으로 이어질 수 있다. 공격자가 실제 사용자의 암호를 얻어낼 수 있는지는 암호가 저장되는 방식에 따라 다르다. 일반적으로 암호는 임의의 솔트값을 추가하여 해시되며, 가급적 계산 비용이 많이 드는 알고리즘을 사용한다. 그럼에도 불구하고 제한 없이 초당 수십억 개의 해시를 계산하는 현재의 컴퓨팅 파워를 고려하면 단순히 온라인 공격에만 대응할 수 있는 수준보다 훨씬 복잡한 암호가 필요하다.

 

사용자가 원하는 만큼 긴 패스워드를 사용할 수 있도록 권장해야 한다. 해시된 값의 크기는 길이에 독립적이므로 사용자가 원할 경우 긴 패스워드를 사용하지 못하도록 허용할 이유가 없다. 매우 긴 암호(메가바이트 규모)는 해시에 과도한 처리 시간이 필요할 수 있으므로 제한을 둘 수도 있다.

 

3. 복잡도(Complexity)

위에서 사용자가 선택한 패스워드를 추측하는 난이도를 높이기 위해 구성 규칙이 일반적으로 사용된다고 언급한 바 있다. 그러나 연구 결과에 따르면 사용자들은 구성 규칙에 의해 부과된 요구사항에 너무 예측 가능한 방식으로 대응한다. 예를 들어, 암호로 "password"를 선택한 사용자는 대문자와 숫자를 포함해야 한다고 안내받으면 "Password1"을, 기호도 필요한 경우 "Password1!"을 선택할 가능성이 상대적으로 높다.

서비스에서 너무 복잡한 패스워드를 작성하지 못하게 하는 문제도 있다. 많은 서비스에서 공백과 다양한 특수 문자가 포함된 패스워드를 입력하지 못하게 막는다. SQL 인젝션과 같은 공격이나 파싱 오류 등을 방지하기 위함이다. 그러나 올바르게 해시된 암호는 어떤 경우에도 데이터베이스로 온전하게 전송되지 않으므로 이러한 예방 조치는 필요하지 않다. 또한 사용자는 문장을 사용할 수 있도록 공백 문자를 포함할 수 있어야 한다. 그러나 공백 자체는 암호의 복잡성을 거의 증가시키지 않으며 사용 편의성 문제(예: 의도치 않은 앞 뒤 공백, 또는 두칸의 공백 사용)를 유발할 수 있으므로 확인 전에 입력된 암호에서 반복되는 공간은 제거하는 것이 좋을 수 있다.

사용자의 암호 선택은 매우 예측 가능하기 때문에 공격자는 과거에 성공한 암호를 추측할 가능성이 높다. 여기에는 위의 "Password1!" 예제와 같은 이전에 유출되어 단어 사전에 있는 패스워드도 포함된다. 따라서 사용자가 입력한 패스워드를 허용할 수 없는 "블랙리스트"와 비교해 주는 것이 좋다. 이 목록에는 예전에 유출되었던 쉬운 패스워드들, 일반적이 영어 단어, 쉬운 문자열 및 사용자가 쉽게 떠올릴 수 있는 특정 단어(예: 서비스 이름)들을 포함한다. 사용자는 최소 길이 요구 사항을 준수해야 하므로, 이 사전 또한 해당 요구 사항을 충족하는 항목만들 포함하면 된다. 즉 비밀번호를 8자리 이상으로 넣도록 규칙을 만들었는데 이 비밀번호가 apple과 같은지는 비교하는 것은 컴퓨팅 리소스 낭비이다.

너무 복잡한 패스워드는 기억이 어려워 안전하지 않은 방식으로 기록·저장될 가능성이 높다는 새로운 잠재적 취약점을 유발한다. 이러한 관행이 반드시 취약한 것은 아니지만 통계적으로 이러한 패스워드를 기록하는 몇 가지 방법이 있다. 이는 지나치게 길거나 복잡한 암기비밀을 요구하지 않아야 하는 추가적인 이유다.

 

요약

이 글에서 권장하는 것 이상으로 과도한 길이 및 복잡성 요구사항은 패스워드의 사용성을 떨어뜨리고 사용자의 불만을 증가시킨다. 그 결과, 사용자는 종종 이러한 제한 사항을 역효과를 초래하는 방식으로 해결한다. 또한 블랙리스트, 보안 해시 스토리지 및 재시도 방지와 같은 완화 기능으로 무차별 공격을 방지할 수도 있다. 따라서 추가적인 복잡성 요구사항은 지양되어야 한다.

 

반응형