·비밀번호 세기

비밀번호 100칸 — 길이보다 저장 방식이 답을 더 바꿉니다

문자 집합 열 가지와 길이 열 가지가 만나는 칸마다 비트와 뚫는 데 걸리는 시간을 계산했습니다. 속도는 지어내지 않고 hashcat을 RTX 4090 한 장에서 돌린 공개 측정값을 썼습니다.

아스키 전체(기호 포함) 12 · 78.7 bit

  • NTLM (윈도 암호)26136.9년
  • MD545950.7년
  • SHA-256343132.2년
  • WPA2 와이파이10^9.5년
  • bcrypt10^10.6년

한 글자가 담는 것

한 글자가 담는 세기는 집합 크기의 로그입니다. 숫자만 쓰면 한 글자가 3.3비트, 소문자까지면 4.7비트, 기호를 넣은 아스키 94자면 6.6비트입니다. 전체 세기는 여기에 길이를 곱한 값이라, 종류를 늘리는 것보다 길이를 늘리는 쪽이 대개 더 큽니다 — 아스키에 한 글자를 더하면 6.6비트가 붙지만, 소문자에서 아스키로 넓혀도 한 글자당 1.9비트가 붙을 뿐입니다.

사이트가 어떻게 저장했느냐

같은 비밀번호라도 저장 방식에 따라 답이 백만 배 넘게 갈립니다. RTX 4090 한 장이 NTLM은 초당 2,885억 번, MD5는 1,641억 번 두드리지만 bcrypt는 18만 4천 번뿐입니다. 일부러 느리게 만든 방식이기 때문입니다. 그래서 기호를 포함한 아스키 여덟 글자가 NTLM으로 저장된 곳에서는 세 시간이 안 되고, bcrypt로 저장된 곳에서는 500년이 넘습니다 — 그리고 어느 쪽인지는 쓰는 사람이 고를 수 없습니다.

한글은 한 글자가 두 글자 몫

완성형이 정한 상용 한글 음절은 2,350자입니다. 자모가 아니라 음절 하나를 한 글자로 세므로 한 글자가 11.2비트를 담습니다 — 아스키 한 글자의 1.7배입니다. 그래서 한글 여덟 글자가 아스키 열세 글자보다 세고 열네 글자보다는 약합니다. 다만 쓸 수 있는 곳이 정해져 있고, 입력기가 없는 기기에서는 아예 못 칩니다.

이 표가 세는 것과 세지 않는 것

여기 적힌 시간은 **무작위로 고른 비밀번호**를 처음부터 끝까지 훑을 때의 값입니다. 사람이 지은 비밀번호는 그만큼 못 버팁니다 — 사전에 있는 낱말, 자판 순서, 생일, 뒤에 붙인 !와 1은 공격하는 쪽이 먼저 시도합니다. "P@ssw0rd!"는 아스키 9자로 세면 59비트지만 실제로는 몇 초입니다. 반대로 카드가 여러 장이면 시간은 장수만큼 나뉩니다.

가장 흔한 사고는 뚫린 게 아닙니다

한 곳에서 새어 나간 비밀번호를 다른 곳에 그대로 넣어 보는 것이 훨씬 흔합니다. 몇 년이 걸릴 비밀번호라도 두 곳에 같이 쓰면 약한 쪽이 뚫린 날 함께 무너집니다. 길이를 늘리는 것보다 **다시 쓰지 않는 것**과 2단계 인증이 먼저입니다.

집합과 길이로 찾기

집합 크기 · 길이

숫자만집합 크기 10

16진수집합 크기 16

소문자만집합 크기 26

Base32집합 크기 32

소문자+숫자집합 크기 36

대소문자집합 크기 52

대소문자+숫자집합 크기 62

Base64집합 크기 64

아스키 전체(기호 포함)집합 크기 94

한글 음절집합 크기 2350

읽는 방법

  • 한 글자가 담는 비트 = log2(집합 크기). 전체는 여기에 길이를 곱합니다.
  • 뚫는 시간 = 경우의 수의 절반 ÷ 초당 시도 횟수.
  • 속도는 hashcat을 RTX 4090 한 장에서 돌린 공개 측정값입니다.
  • 무작위 비밀번호를 전제한 값입니다. 사람이 지은 것은 훨씬 빨리 뚫립니다.
  • NTLM (윈도 암호)2.89e+11 /s
  • MD51.64e+11 /s
  • SHA-2562.20e+10 /s
  • WPA2 와이파이2.53e+6 /s
  • bcrypt1.84e+5 /s

자주 묻는 질문

Q. 비밀번호는 몇 자가 안전한가요?

저장 방식에 달렸습니다. 기호를 포함한 아스키 12자가 78.7비트인데, NTLM으로 저장된 곳이면 2만 6천 년이고 bcrypt면 400억 년입니다. 여덟 자로 줄이면 NTLM에서는 세 시간이 안 됩니다.

Q. 길이를 늘리는 것과 기호를 넣는 것 중 뭐가 낫나요?

대개 길이입니다. 아스키에서 한 글자를 더하면 6.6비트가 붙지만, 소문자에서 아스키로 넓혀도 한 글자당 1.9비트만 늘어납니다.

Q. 한글로 만들면 더 센가요?

한 글자가 11.2비트로 아스키의 1.7배입니다. 다만 받아 주는 곳이 적고 입력기가 없으면 못 칩니다.

Q. 이 시간이 실제인가요?

무작위로 고른 비밀번호를 처음부터 끝까지 훑을 때의 값입니다. 사람이 지은 비밀번호는 사전 공격에 훨씬 빨리 뚫립니다.

Q. 가장 중요한 것은 무엇인가요?

다시 쓰지 않는 것입니다. 유출된 비밀번호를 다른 곳에 넣어 보는 공격이 훨씬 흔합니다.