2023년 6월, Neal Agarwal이라는 프로그래머가 자기 사이트 neal.fun에 The Password Game이라는 것을 올렸다. 비밀번호를 입력하라고 한다. 다음엔 최소 다섯 글자. 다음엔 숫자 하나. 다음엔 대문자 하나. 다음엔 특수문자 하나.
여기까지는 게임이 아니다. 당신 은행의 가입 양식이다.
그다음부터가 다른 이야기다. 숫자의 합이 25가 되어야 한다. 월 이름이 들어가야 한다. 곱해서 35가 되는 로마 숫자가 들어가야 한다. 오늘의 Wordle 정답이 들어가야 한다. 사진 속 나라를 맞혀 넣어야 한다. 주어진 체스 국면의 최선수를 대수 기보법으로 넣어야 한다. 규칙은 모두 서른다섯 개고, 그 사이에 당신의 비밀번호 안에서 Paul이라는 이름의 달걀 이모지가 부화해 애벌레를 먹여야 하며, 제때 끄지 않으면 불꽃이 글자를 하나씩 먹어 치운다.
이 게임이 통하는 이유는 불편하다. 농담을 설명해 줄 사람이 필요 없기 때문이다. 첫 1초에 알아챈다. 그 구조를 인생의 절반 동안 겪어 왔으니까. Agarwal이 한 일은 실을 조금 더 잡아당긴 것뿐이다.
그리고 바로 여기서 속도를 늦출 필요가 있다. 처음 네 규칙은 그가 만든 것이 아니다.
이미 알고 있던 규칙은 어디서 왔나
대문자 하나, 숫자 하나, 기호 하나, 그리고 최소 길이. 이것은 인터넷 민담이 아니다. 미국 NIST가 2003년에 펴낸 문서, Bill Burr가 쓴 SP 800-63의 실무적 번역본이다. 거기서 세계 절반의 입력 양식으로 내려왔고, 거기서 당신 머릿속으로 들어왔다.
전체 이야기는 비밀번호란 무엇인가에 썼다. Burr에게는 실제 비밀번호에 관한 데이터가 없었다 — 거의 존재하지 않았다 — 그래서 합리적으로 보이는 쪽으로 추론했다. 문자 종류가 다양할수록 조합이 늘고 더 안전하리라고. 2017년 NIST 스스로 방향을 돌렸고, Burr는 Wall Street Journal에 자기가 쓴 것의 상당 부분을 후회한다고 말했다.
그러니 Agarwal의 게임은 어떤 보안 정책을 과장한 것이 아니다. 첫 줄부터 이미 틀려 있던 목록을 그대로 이어 간 것이다. 「기호를 포함해야 한다」와 「숫자의 합이 25여야 한다」의 유일한 차이는, 앞엣것에 당신이 익숙해졌다는 점뿐이다.
그 규칙들이 한 번도 재지 않은 것
여기서 농담은 웃기지 않게 된다. 잴 수 있기 때문이다.
아래 숫자는 이 사이트의 비밀번호 검사기에서 나온다. 검사기가 밝힌 모델은 빠른 해시에 대한 오프라인 공격, 초당 10¹² 회 시도다. 홍보용 추정치가 아니다. 같은 문자열을 거기에 입력하면 당신도 보게 될 값이다.
| 비밀번호 | 충족하는 규칙 | 시도 횟수 | 버티는 시간 |
|---|---|---|---|
Password1! |
네 가지 모두 | 20,000 | 1초 미만 |
Yeoreum2026! |
네 가지 모두 | 3.3 × 10¹⁰ | 1초 미만 |
Zx9#kQ2m |
네 가지 모두 | 3.3 × 10¹⁵ | 55분 |
| 주사위로 뽑은 여섯 단어, 소문자 | 하나도 없음 | 1.1 × 10²³ | 3,500년 |
마지막 줄은 검사기가 아니라 산수에서 나온 값이고, 이는 의도적이다. 검사기는 그 여섯 단어가 주사위에서 나왔다는 사실을 알 수 없으므로 다른 값을 계산할 것이다. 여섯 번 굴리면 정확히 77.5비트이고, 초당 10¹² 회 시도에 대해 77.5비트는 약 삼천오백 년이다. 마지막에 다시 다룬다.
다시 읽어 보자. Password1!은 지구상의 어떤 양식이든 통과하고, 키에서 손을 떼기도
전에 무너진다. 그 단어가 사전에 있고 나머지는 모두가 붙이는 장식이기 때문이다. 앞에
대문자, 뒤에 숫자와 기호. 그리고 마지막 줄, 소문자 여섯 단어는 당신이 계정을 가진
사이트의 절반이 거부할 것이다. 대문자도 숫자도 기호도 없으니까.
Zx9#kQ2m에서는 잠깐 멈출 만하다. 규칙 입장에서 가능한 최선의 사례이기 때문이다.
정말로 무작위인 여덟 글자에 네 종류가 모두 들어 있다. 2003년 정책이 모범적인
비밀번호로 여긴 바로 그것이다. 55분. 게다가 이는 상한이다. 검사기는 당신이 그걸
무작위로 쳤는지 알 수 없으므로 의심의 이익을 주고 최선의 시나리오를 계산한다. 애초에
아무도 그렇게 치지 않는다. 사람에게 기호가 들어간 여덟 글자를 달라고 하면 나오는 것은
Annyeong123! 같은 것이다 — 3.3 × 10¹¹ 회, 1초 미만.
규칙은 이 둘을 구분하지 못한다. 양식이 보기에 Annyeong123!과 Zx9#kQ2m은 같은
비밀번호다. 결함은 그게 전부다. 조합 규칙은 문자열의 모양을 재는데, 저항력은 모양에
있지 않다.
90일 규칙, 혹은 Gaeul2026!이 만들어지는 방식
2003년 유산의 나머지 절반은 만료다. 90일마다 바꿔라.
90일마다 새 비밀번호를 만들어 내는 사람은 없다. 사람들이 하는 일 — 당신이 하는 일,
나도 하는 일 — 은 쓰던 것을 한 칸 올리는 것이다. Yeoreum2026!이 Gaeul2026!이
되고 일은 끝난다. 둘 다 1초 미만 버틴다. 공격자가 앞의 것을 가지고 있다면 뒤의
것을 맞히는 일은 공격이 아니다. 빈칸을 채우는 일이다.
NIST는 2017년 SP 800-63B에서 강제 주기 변경을 폐기했다. 2025년 8월 개정판에서는 표현이 단단해졌다. 검증자가 조합 규칙을 부과하거나 주기적 변경을 요구하지 않는 것이 좋다고 되어 있던 자리에, 이제는 둘 다 해서는 안 된다고 적혀 있다. 변경은 그 비밀번호가 노출되었다는 정황이 있을 때만 강제한다.
첫 번째 철회로부터 9년이 지났는데도 당신 회사는 분기마다 대문자를 요구한다.
글자 수 제한이 가장 나쁜 신호다
Agarwal은 게임을 만들게 된 마지막 계기가, 계정을 만들려다가 자기 비밀번호가 너무 길다는 말을 들은 일이었다고 밝혔다.
모든 터무니없는 규칙 가운데, 나쁜 신호이기까지 한 것은 이것 하나뿐이다.
비밀번호를 제대로 저장하는 시스템은 비밀번호를 저장하지 않는다. 해시를 저장한다. 그리고 해시는 여덟 글자를 넣든 팔백 글자를 넣든 언제나 같은 길이다. 열여섯 글자 제한에 저장상의 이유는 없다. 알려진 정당한 기술적 예외는 정확히 하나다 — bcrypt는 72바이트를 넘는 부분을 무시한다 — 그리고 그것으로는 열두 글자에서 멈추는 양식을 설명할 수 없다.
짧은 상한이 당신 비밀번호를 평문으로 보관한다는 증거는 되지 않는다. 하지만 누군가 고정 폭 데이터베이스 열에 그것을 밀어 넣었을 때만 나타나는 종류의 흔적이다. SP 800-63B 자체는 그 반대를 요구한다. 최소 64글자를 받아들일 것.
정말로 통하는 규칙은 양식에 들어가지 않는다
밑바닥의 불편함은, 좋은 습관을 검증 상자로 표현할 수 없다는 데 있다. 「다른 곳에서 쓰지 않았을 것」이나 「최근 유출 목록에 없을 것」을 확인하는 정규식은 누구도 쓸 수 없다.
할 수 있는 일은 세는 것이다. 주사위로 고른 단어들로 만든 구절 — Diceware — 은 단어당 12.9비트를 깔끔하게 더하고, 그 비트는 진짜 비트다. 초당 10¹² 회라는 같은 모델로:
- 다섯 단어는 64.6비트, 약 164일.
- 여섯 단어는 77.5비트, 약 3,500년.
두 숫자를 다 말해야지 뒤의 것만 말해서는 안 된다. 다섯 단어 구절이 「수 세기를 버틴다」는 말이 자주 반복되지만, 빠른 해시 앞에서는 수 세기를 버티지 못한다. 다섯 달 반이다. 그래서 Reinhold는 다섯을 하한으로, 정말 중요한 것에는 여섯을 권했다. 눈금을 바꾸는 것은 여섯 번째 단어이고, 그건 공짜다.
둘 다 당신 은행의 양식은 통과하지 못한다.
이 게임이 웃긴 이유
숫자의 합을 25로 맞추라는 요구에 웃는 것은, 그것이 비밀번호를 안전하게 만드는 것과 아무 상관 없는 자의적 조건이기 때문이다.
기호를 요구하는 것도 비밀번호를 안전하게 만드는 것과 아무 상관 없는 자의적 조건이다. 차이는 그쪽을 인터넷의 절반이 내놓고 있고, 그쪽에는 우리가 정이 들었다는 것뿐이다.
실무 요약을 원한다면 세 줄이면 된다. 생성기나 주사위를 쓰고, 결과를 비밀번호
관리자에 넣고, 양식의 규칙은 요구하는 것을 덧붙여서 충족시켜라. 다만 그걸로 무엇인가
막았다고 믿지는 마라. 앞의 대문자와 끝의 !는 통행료지 방어가 아니다.
나머지는 게임이다. 아주 잘 만들었고, 게임으로만 남았더라면 좋았을 것이다.
출처: Neal Agarwal, 「The Password Game」(neal.fun, 2023년 6월 27일), 35개 규칙과 비밀번호가 너무 길다고 말한 양식에 관한 저자 본인의 설명 · NIST SP 800-63(2003), SP 800-63B(2017), SP 800-63B-4(2025년 8월. 조합 규칙과 만료에 대해 「하지 않는 것이 좋다」에서 「해서는 안 된다」로 바뀌었고, 최소 64글자를 받아들일 것을 요구한다) · Bill Burr가 Wall Street Journal에 한 발언, 2017년 8월 · Arnold G. Reinhold, Diceware(1995), 단어당 12.9비트의 출처. 표의 시간은 이 사이트 검사기로, 검사기가 밝힌 빠른 해시 대상 초당 10¹² 회 시도 모델에서 측정했다. Diceware 값은 같은 속도로 단어당 log₂(7,776)에서 계산했다.
사진: Olha Ruskykh · Pexels