비밀번호 아이디어: 당신의 아이디어가 소용없는 이유

게시일 글쓴이 David Carrero

끝없이 반복되는 검색어가 있다. 비밀번호 아이디어. 이해가 간다. 입력란은 기다리고 있고, 뭔가는 지어내야 하고, 어떻게 하는지 아무도 알려준 적이 없으니까.

문제는 아이디어라는 말 자체가 이미 실패라는 점이다. 좋은 비밀번호는 좋은 아이디어가 아니다. 뒤에 아무 아이디어도 없는 비밀번호다.

이건 글을 열기 위한 근사한 문장이 아니다. 공격은 말 그대로 그렇게 작동한다.

당신에게 떠오르는 아이디어 목록이 곧 그가 가장 먼저 돌리는 목록이다

사전 공격은 aaaaaaaa에서 시작해 위로 세어 올라가지 않는다. 이미 수백만 번 유출된 비밀번호에서 시작해, 사람 이름, 보통명사, 도시, 축구 클럽, 네 자리 연도로 이어진다. 그리고 그 토대 위에 규칙을 얹는다. 앞에 대문자, 뒤에 숫자나 !, a@로, e3으로, o0으로, 단어를 거꾸로, 단어를 두 번.

이 규칙들은 비밀도 아니고 새롭지도 않다. 수십 년째 문서로 남아 있고, 어떤 공격 도구든 기본으로 갖고 있다. 달리 말하면 당신이 「비밀번호 아이디어」라고 부를 착상들의 목록은, 거의 그 순서 그대로, 당신을 공격하는 쪽의 설정 파일이다.

여기서부터 모든 숫자는 이 집의 검사기에서 나온다. 검사기는 빠른 해시를 상대로 한 오프라인 공격, 초당 10¹² 회 시도를 가정한다. 결과 아래에 그렇게 적혀 있고, 그 전제 없이는 어떤 시간도 아무 의미가 없다. 모든 숫자는 직접 재현할 수 있다. 예를 입력하고 보면 된다.

첫 번째 아이디어: 당신의 이름과 태어난 해

Minji1985. 아홉 글자, 대문자 하나, 숫자 넷. 인터넷 절반이 요구하는 조건을 충족한다.

검사기는 1985에 **「연도나 날짜 같습니다」**를 붙이고, 1,0 × 10⁷ 회를 내놓는다. 그 속도라면 여전히 1초 미만이다.

여기서 정직하게 짚어야 할 것이 있다. 검사기의 사전은 우리말 사전이라 로마자로 적은 Minji를 잡아내지 못한다. 그러니까 이 숫자는 후하게 계산한 값이다. 로마자 한국 이름 목록은 이미 존재하고, 그 목록을 가진 사람에게는 이것이 아홉 번의 결정이 아니라 두 번의 결정이다. 어떤 이름과 어떤 해.

두 번째 아이디어: 글자를 숫자로 바꾸기

이건 모두가 통한다고 믿는 잔재주이고, 가장 빨리 낡는 잔재주다.

M1nji19851,0 × 10⁷ 회다. 조금 오른 게 아니라, 마지막 자리까지 앞의 숫자와 똑같다. 치환은 여기서 문자 그대로 아무것도 벌어주지 못한다. 새 비밀번호를 만든 게 아니라, 공격자가 이미 계산에 넣어둔 예/아니오 질문 하나를 더했을 뿐이기 때문이다. 이 사람은 i를 바꿨는가, 안 바꿨는가.

얼마나 멀리 가는지 보고 싶다면 정석 예제를 넣어 보자. 대문자와 골뱅이와 0을 갖추고 잘 고민한 티가 나는 P@ssw0rd17 회에 무너진다. 열일곱. 두 손 손가락과 약간의 인내면 셀 수 있다. 이 경우 검사기는 「사전에 있습니다」라고 말하고, 글자를 숫자로 바꾼 것이라는 꼬리표를 단다. 단어는 그대로 찾아낸 것이다.

세 번째 아이디어: 거꾸로 쓰기

ijnim19851,0 × 10⁷ 회다. 역시 같은 숫자다.

뒤집기가 조금밖에 도움이 안 되는 게 아니다. 아무것도 바꾸지 못한다. 단어를 뒤집는 것은 사전이 기본으로 갖고 있는 규칙 중 하나다. 검사기가 사전에서 찾아내는 경우에는 똑같이 찾아내고 똑같이 분류하며, 거꾸로 쓴 것이라는 꼬리표만 덧붙는다.

반복도 마찬가지다. MinjiMinji200,003 회떨어진다. 글자를 두 배로 쳤는데 앞보다 나빠진다. 「일부를 반복합니다」 역시 이름이 붙은 패턴이기 때문이다.

네 번째 아이디어: 손가락으로 키보드 훑기

생각하기 싫을 때 사람은 키보드를 보고 모양을 따라간다. 그렇게 qwerty123, 1qaz2wsx, 1q2w3e4r, asdfghjkl이 나온다.

의미가 없으니 무작위처럼 느껴진다. 하지만 키보드에는 고정되고 아주 좁은 기하가 있고, 그 위를 훑는 일이야말로 프로그램이 당신보다 잘하는 일이다.

  • qwerty123273 회.
  • 1qaz2wsx29 회.

스물아홉. 이 비밀번호들은 너무 닳아서 키보드 규칙조차 필요 없다. 유출된 비밀번호 목록에 그 형태 그대로 실려 있고, 검사기는 「사전에 있습니다」 한마디로 처리한다.

다섯 번째 아이디어: 강아지, 그리고 절대 잊지 않는 날짜

Toby2015!는 이력을 가진 비밀번호다. 강아지 이름, 집에 온 해, 그리고 입력란을 달래기 위한 느낌표. 1,2 × 10⁸ 회가 나오고, 그래도 여전히 1초 미만이다.

가장 흔한 반려동물 이름은 몇천 개 수준이고, 사람 이름과 같은 목록에 들어 있다. 끝의 !는 모두가 적용하는 규칙이 기여하는 만큼 기여한다. 즉 0이다.

기념일은 더 불편하다. 24121985 — 일, 월, 연 — 은 여덟 자리 숫자로 읽히지만, 검사기는 「날짜가 들어 있습니다」라는 꼬리표를 붙이고 14,966 회에 끝낸다. 이유는 달력에 있다. 날은 31, 달은 12, 그럴듯한 해는 한 세기 남짓. 천만 가지 조합처럼 보이는 여덟 자리가 실제로는 만 오천 정도다.

이것이 날짜의 함정이다. 길이는 주지만 불확실성은 주지 않는다. 그리고 값이 매겨지는 것은 불확실성뿐이다.

여섯 번째 아이디어: 자동차 번호, 그리고 검사기가 볼 수 없는 것

4521KDR은 다른 경우이고, 잠시 멈춰 볼 가치가 있다.

여기서 검사기는 **「알려진 패턴을 찾지 못했습니다」**라고 말하고 3,9 × 10¹⁰ 회를 계산한다. 하지만 그 숫자에 상한이라는 표시를 단다. 바로 그 단어가 핵심이다. 당신의 패턴을 못 찾았을 뿐, 당신에게 패턴이 없다는 증명은 아니다. 그렇게 후하게 잡아도 시간은 여전히 1초 미만이다.

여기에 이해해야 할 간극이 있다. 검사기는 당신이 어떤 차를 타는지 모른다. 당신을 아는 사람, 당신의 인스타그램을 펼쳐 놓은 사람, 당신의 차량번호가 들어 있는 유출 데이터를 산 사람에게는 3,9 × 10¹⁰ 회가 필요 없다. 한 번이면 된다. 패턴이 없을 때 보이는 숫자는 낯선 사람의 무지를 재는 것이지, 당신을 찾아본 사람의 무지를 재는 것이 아니다.

집 번지, 주민등록번호, 전화번호, 결혼기념일도 똑같다.

여섯 가지의 공통점

이 아이디어들 중 어느 것도 「덜 복잡해서」 실패하지 않는다. 모두 같은 이유로 실패한다. 전부 자서전이기 때문이다. 그리고 자서전은 맞힐 수 있다. 당신의 이름, 당신의 연도, 당신의 강아지, 당신의 차, 당신이 키보드를 훑는 방식. 그 결정 하나하나가 개인적이고 당신의 것처럼 느껴지고, 바로 그래서 누군가 이미 적어 놓은 짧은 목록에 속한다.

복잡함을 더해도 해결되지 않는다. 당신이 적용하는 복잡함 또한 당신의 결정이고 역시 그 목록에 있기 때문이다. 그래서 M1nji1985는 한 자리도 벌지 못하고 ijnim1985도 마찬가지다.

숫자로 된 논증을 원한다면 엔트로피 비트에 있다. 중요한 것은 당신이 쓸 수 있었던 비밀번호가 몇 개인가가 아니라, 당신의 취향에 관해 알려진 것을 모두 뺀 뒤 몇 개가 남는가다.

출구는 더 나은 아이디어가 아니라, 아이디어를 그만두는 것

그 목록에서 벗어나는 유일한 방법은 비밀번호가 당신 머리에서 나오지 않는 것이다.

Diceware가 하는 일이 정확히 그것이다. 주사위 다섯 개를 굴리고, 그 숫자를 7,776개 단어 목록에서 찾아, 나온 것을 적는다. 한 번 굴릴 때마다 12.9비트이고, 그것은 진짜 12.9비트다. 주사위에는 취향도, 기억도, 당신의 출생 연도도 없기 때문이다. 여섯 단어면 약 77비트다.

그것을 검사기에 넣고 무엇이 달라지는지 보라. 주사위로 뽑은 평범한 여섯 단어는 「매우 약함」에서 **「매우 강함」**으로 올라가고, 시간은 더 이상 초로 재지 않는다. 정교해서가 아니다 — 정교하지 않다, 평범한 여섯 단어다 — 당신이 결정하지 않은 유일한 부분이기 때문이다. 브라우저가 대신 굴려 주기를 원한다면 생성기가 같은 추첨을 하고, 그러는 동안 비트 수를 보여 준다.

그러니 「비밀번호 아이디어를 달라」는 요청에 대한 정직한 답은 이렇다. 필요 없다, 오히려 너무 많다. 없는 것은 주사위 한 개다.


출처: 이 글의 모든 숫자는 password.es의 검사기에서 나왔다. 검사기는 결과 아래에 자신의 모델을 밝힌다 — 초당 10¹² 회 시도, 오프라인 공격, 빠른 해시 — 그리고 각 예를 /ko/checker/에 입력하면 재현할 수 있다 · 패턴 분석 엔진은 Daniel Lowe Wheeler(Dropbox)의 zxcvbn으로, USENIX Security 2016에서 「zxcvbn: Low-Budget Password Strength Estimation」으로 발표되었다 · 인용한 치환·역순·반복 규칙은 사전 공격 도구가 기본으로 갖고 있는 규칙이다 · Arnold G. Reinhold, 「The Diceware Passphrase Home Page」(1995), 7,776개 단어와 한 번 굴릴 때 12.9비트에 관하여.

사진: RDNE Stock project · Pexels

← 블로그로 돌아가기