개발·데이터

복잡하게 만든 비밀번호가 약하다고 나오는 이유와 강해지는 조건

대문자와 숫자와 특수문자를 다 넣었는데도 강도가 낮게 나옵니다. 강도 판정이 문자 종류가 아니라 예측 가능성을 본다는 점과 실제로 강해지는 조건입니다.

최종 수정일 읽는 데 약 5

핵심 요약

  • 강도 판정은 문자 종류의 개수가 아니라 얼마나 쉽게 추측되는지를 봅니다.
  • 사전에 있는 단어는 글자를 숫자나 기호로 바꿔도 거의 그대로 간파됩니다.
  • 키보드에서 이어진 배열과 날짜, 반복 패턴도 짧은 규칙으로 인식됩니다.
  • 같은 조건이라면 길이가 강도에 가장 크게 작용합니다.

회원가입 화면에서 비밀번호를 만드는데 강도가 낮다고 나옵니다. 대문자도 넣고 숫자도 넣고 특수문자까지 붙였는데 결과가 달라지지 않습니다.

조건을 더 채운다고 해결되지 않습니다. 결론부터 말하면 강도 판정은 어떤 종류의 문자를 썼는지가 아니라 얼마나 쉽게 추측되는지를 보고, 흔한 단어를 변형한 비밀번호는 아무리 꾸며도 그 사실이 먼저 잡힙니다.

강도를 판정하는 기준

예전에는 "대문자 포함, 숫자 포함, 특수문자 포함"처럼 조건을 세는 방식이 흔했습니다. 지금 널리 쓰이는 판정 방식은 다릅니다. 이 비밀번호를 알아내려면 몇 번을 시도해야 하는가를 추정합니다.

그래서 판정 도구는 먼저 익숙한 구조가 있는지 찾습니다.

  • 사전에 있는 단어인가
  • 글자를 숫자나 기호로 바꾼 흔한 치환인가
  • 키보드에서 이어진 배열인가
  • 날짜나 연도 형태인가
  • 같은 문자나 짧은 조각의 반복인가

이런 구조가 발견되면 그 부분은 통째로 짧은 규칙 하나로 취급됩니다. 열 글자처럼 보여도 실제로는 "흔한 단어 + 숫자 + 기호" 세 조각으로 인식되는 것입니다.

왜 치환이 통하지 않는가

알파벳을 비슷하게 생긴 숫자나 기호로 바꾸는 방식은 오래전부터 널리 쓰였습니다. 문제는 그만큼 널리 알려져 있다는 점입니다.

판정 도구는 이 치환을 되돌려 봅니다. 숫자와 기호를 원래 알파벳 후보로 바꿔 사전에 있는지 확인하는 과정을 거칩니다. 그래서 치환을 몇 겹으로 해도 원래 단어가 드러납니다.

추측하는 쪽도 마찬가지 방식을 씁니다. 흔한 단어 목록에 흔한 치환 규칙을 적용해 조합을 만드는 것이 기본 전략입니다. 즉 치환은 방어가 아니라 이미 예상된 행동입니다.

비밀번호 유형겉보기실제 판정이유
흔한 단어 + 숫자 + 기호복잡함약함가장 흔한 조합 패턴
글자를 숫자로 치환한 단어복잡함약함치환을 되돌려 단어를 찾음
키보드에서 이어진 배열무작위처럼 보임약함짧은 규칙으로 표현됨
생년월일이나 연도 포함개인적임약함범위가 매우 좁음
짧은 조각의 반복길어 보임약함조각 하나로 축약됨
무작위 문자 12자 이상단순해 보임강함줄일 수 있는 규칙이 없음

마지막 줄이 핵심입니다. 사람이 보기에 밋밋한 무작위 문자열이 실제로는 가장 강합니다. 규칙이 없다는 것 자체가 강도의 근거입니다.

실제로 강해지는 조건

  1. 사람이 만들지 않습니다. 사람이 만든 문자열에는 본인도 모르는 규칙이 들어갑니다. 비밀번호 생성기는 브라우저의 암호학적 난수를 사용해 규칙 없는 문자열을 만듭니다.
  2. 길이를 우선합니다. 무작위라는 전제에서 길이는 경우의 수를 지수적으로 키웁니다. 문자 종류를 하나 더 넣는 것보다 두세 글자 늘리는 편이 대체로 효과가 큽니다.
  3. 서비스 규칙을 먼저 확인합니다. 허용 길이와 사용 가능한 특수문자가 서비스마다 다릅니다. 만든 뒤에 거부당하면 다시 만들어야 합니다.
  4. 강도 표시를 확인합니다. 조건을 조합한 뒤 결과가 어떻게 나오는지 보면 어느 요소가 영향을 주는지 감이 잡힙니다.
  5. 관리자에 저장합니다. 외우려 하면 규칙을 넣게 됩니다.
  6. 재사용하지 않습니다. 아무리 강해도 한 곳에서 유출되면 같은 것을 쓴 모든 곳이 함께 뚫립니다.

만들었는데 쓸 수 없을 때

증상원인조치
특수문자가 거부됨서비스가 일부만 허용허용 문자만으로 다시 생성
너무 길다고 나옴최대 길이 제한허용 범위 안에서 최대로
붙여넣기가 막힘입력란이 붙여넣기를 차단길이를 조금 줄여 직접 입력
강도가 여전히 낮음직접 손봐서 규칙이 생김생성된 값을 그대로 사용
로그인할 때마다 틀림앞뒤 공백이 함께 복사됨복사 범위 확인

네 번째 줄이 흔합니다. 생성된 비밀번호가 마음에 안 들어 몇 글자를 익숙한 것으로 바꾸면, 그 순간 규칙이 생겨 강도가 떨어집니다.

비밀번호를 만들 때 착각하는 것

조건을 채우면 강해진다고 봅니다. 대문자·숫자·특수문자를 다 넣어도 바탕이 흔한 단어면 약합니다.

치환으로 단어를 감춥니다. 판정 도구와 공격 도구 모두 이 변형을 되돌립니다.

외울 수 있게 만듭니다. 외우기 쉽다는 것은 규칙이 있다는 뜻이고, 규칙은 곧 추측 가능성입니다.

생성된 값을 손봅니다. 한 글자만 바꿔도 무작위성이 깨집니다.

같은 비밀번호를 여러 곳에 씁니다. 강도와 무관하게 가장 큰 위험입니다.

어딘가에 그대로 적어 둡니다. 메모 앱이나 문서에 평문으로 두면 관리자에 넣는 의미가 없어집니다.

길이가 가장 크게 작용합니다

강도를 올리는 가장 확실한 방법은 특수문자를 하나 더 넣는 것이 아니라 길이를 늘리는 것입니다. 단, 무작위라는 전제에서만 그렇습니다.

사람이 만들지 말고, 만들어진 값을 손대지 말고, 관리자에 저장하고, 서비스마다 다른 것을 쓰세요. 이 네 가지가 지켜지면 문자 종류를 무엇으로 조합하든 충분히 강해집니다.

자주 묻는 질문

특수문자를 넣었는데 왜 약한가요?

판정이 문자 종류를 세는 방식이 아니기 때문입니다. 흔한 단어 뒤에 느낌표 하나를 붙이는 것은 매우 흔한 패턴이라, 추측하는 쪽에서도 가장 먼저 시도하는 조합에 속합니다. 종류를 늘리는 것보다 예측 가능한 구조를 없애는 편이 효과가 큽니다.

글자를 숫자로 바꾸면 안 되나요?

거의 효과가 없습니다. 알파벳 오를 영으로, 이를 삼으로 바꾸는 치환은 워낙 널리 알려져 있어서 강도 판정 도구와 공격 도구 모두 그 변형을 되돌려 원래 단어를 찾아냅니다. 사전에 있는 단어를 쓰는 이상 이 방식으로는 벗어나기 어렵습니다.

길이와 복잡도 중 뭐가 더 중요한가요?

구조에 규칙성이 없다는 전제에서는 길이가 더 크게 작용합니다. 무작위로 만든 비밀번호는 한 글자 늘어날 때마다 경우의 수가 문자 종류만큼 배로 커집니다. 다만 예측 가능한 단어를 길게 늘어놓는 것은 해당하지 않습니다.

만든 비밀번호는 어떻게 보관하나요?

외우지 말고 비밀번호 관리자에 저장하는 방식이 일반적으로 권장됩니다. 무작위 비밀번호는 외우기 어렵고, 외우려고 규칙을 만드는 순간 예측 가능해집니다. 이 사이트는 생성된 비밀번호를 저장하거나 복구해 주지 않으므로 직접 안전한 곳에 옮겨야 합니다.