강도 퍼센트는 소수점 두 자리가 붙은 의견일 뿐입니다.
어떤 사이트가 당신의 비밀번호를 “92 % 안전”하다고 말할 때 떠오르는 질문은 당연합니다. 무엇의 92 %입니까? 100 %는 어디에 있습니까? 없습니다. 나머지를 재는 기준이 될 완벽한 비밀번호를 발표한 사람은 아무도 없습니다. 그 숫자는 누군가 화요일 오후에 즉흥으로 만든 채점표에서 나옵니다. 대문자에 몇 점, 기호에 몇 점. 그리고 그 숫자의 진짜 임무는 하나뿐입니다. 초록색 막대를 띄워 당신을 다음 화면으로 보내는 것.
반면 비트는 언제나 정확히 같은 것을 뜻합니다. 그리고 그 뜻은 실제로 쓸 수 있는 것입니다.
비트는 예 아니면 아니오 질문 하나다
전부 한 문장에 들어갑니다. 1비트가 늘 때마다, 당신에 대해 아무것도 모르는 사람이 해야 할 시도의 수가 두 배가 됩니다.
1비트는 두 가지 경우입니다. 2비트는 넷. 3비트는 여덟. 10비트는 1,024가지이고 20비트는 백만이 조금 넘습니다. 이 셈은 올라가는 게 아니라 접힙니다. 그리고 접히는 것이야말로 우리 직관을 절벽 아래로 떨어뜨리는 것입니다.
그래서 “40비트는 20비트의 두 배”라는 말은 거의 웃길 만큼 틀렸습니다. 20비트와 40비트 사이에는 스무 번의 배가, 즉 2²⁰의 배율이 있습니다. 40비트는 20비트의 두 배가 아니라 백만 배입니다. 그리고 60비트는 20비트의 세 배가 아니라, 40비트의 백만 배입니다. 우리 머리는 이 눈금을 줄자처럼 읽지만 줄자가 아닙니다. 지진 규모나 데시벨과 같은 눈금입니다. 숫자에서 반 발짝이 현실에서는 아득한 도약인 그런 눈금.
비트가 퍼센트보다 나은 점은 그게 전부입니다. 퍼센트는 기분을 줍니다. 비트는 작업량을 줍니다.
이 말은 어디서 왔나
정보에 쓰이는 엔트로피라는 말은 1948년의 한 논문에서 왔습니다. Claude Shannon의 A Mathematical Theory of Communication입니다.
정확하게 말해 둘 필요가 있습니다. 자주 잘못 인용되니까요. 섀넌은 비밀번호를 생각하고 있지 않았습니다. 언급할 가치가 있는 컴퓨터 비밀번호라는 것이 아직 없었습니다. 그는 벨 연구소에서 아주 다른 문제를 붙들고 있었습니다. 메시지가 실제로 얼마나 많은 정보를 나르는가, 망가지기 전까지 얼마나 압축할 수 있는가. 그러려면 손에 잘 잡히지 않는 것을 재야 했습니다. 반대편에 있는 사람의 불확실성입니다.
그의 발견을 거칠게 말하면 이렇습니다. 정보와 놀라움은 같은 것이다. 이미 알던 메시지는 아무것도 알려주지 않습니다. 도저히 미리 짐작할 수 없는 메시지는 엄청나게 많은 것을 알려줍니다. 엔트로피는 메시지를 만들어내는 출처에 놀라움이 얼마나 들어 있는지를 재고, 단위는 비트입니다.
그게 비밀번호에 쓸모가 있다는 건 다행스러운 사고에 가깝습니다. 비밀번호란 정확히, 미리 짐작할 수 없어야만 하는 메시지니까요.
다이얼 자물쇠
이 글에 나오는 유일한 수식입니다. 공짜로 넘어간다고 약속합니다.
H = L × log₂(N)
로그는 잠깐 잊고 숫자 다이얼이 달린 자전거 자물쇠를 떠올려 보세요. 그걸 열려는 사람을 괴롭히는 방법은 두 가지입니다.
- 다이얼을 더 단다. 이게 길이(
L)입니다. 비밀번호가 몇 글자인가. - 다이얼 하나에 기호를 더 새긴다. 이게 알파벳(
N)입니다. 다이얼마다 숫자 열 개만 있는가, 알파벳 26자가 있는가, 아니면 글자와 숫자와 기호가 다 있는가.
로그가 하는 일은 하나뿐입니다. “다이얼 하나에 기호가 몇 개인가”를 “그 다이얼이 비트를 얼마나 보태는가”로 번역하는 것. 26자짜리 다이얼은 약 4.7비트를 보탭니다. 키보드의 출력 가능한 95자가 다 새겨진 다이얼은 약 6.6비트입니다.
여기에 농담이 숨어 있습니다. 수식에서 각각이 어디에 있는지 보세요. 알파벳은 로그 안에 짓눌려 있고, 길이는 밖에서 곱하고 있습니다.
다이얼 하나의 기호를 거의 네 배로 늘려도, 즉 26자에서 95자로 가도, 다이얼당 두
비트도 못 삽니다. 다이얼을 하나 더 다는 건 log₂(N)을 통째로, 다시, 또다시, 또
사는 것입니다. 그래서 소문자 열두 자만 쓴 것(약 56비트)이 가입 양식이 기어이
요구하는 대문자·숫자·기호를 다 넣은 여덟 자(약 53비트)를 이깁니다.
P@ssw0rd는 correcthorsebatterystaple에게 집니다. 근처에도 못 갑니다.
NIST는 SP 800-63B에서 다른 길로 같은 자리에 도착했습니다. 대문자 하나, 숫자 하나, 기호 하나 같은 구성 규칙을 통째로 내다 버리고 길이와 유출 목록 대조만 남겼습니다. 하지 않은 말을 그들의 입에 넣지는 맙시다. 그들의 논거는 이 수식이 아니라, 사람에게 기호를 억지로 넣게 해도 그 사람이 예측 불가능해지는 게 아니라 다른 방식으로 예측 가능해질 뿐이라는 것입니다. 실제로 그 문서 자체가 사람이 고른 비밀번호의 엔트로피를 추정하는 일을 미더워하지 않습니다. 서로 다른 두 논리, 같은 결론. 강제된 복잡성은 로그 안에서 일합니다. 길이는 밖에서 일합니다.
아무도 세지 않는 작은 글씨
함정이 하나 있고, 이게 이 이야기에서 가장 정직한 대목입니다. 엔트로피는 당신의 비밀번호를 재지 않습니다. 그것을 만든 과정을 잽니다.
4$Kp!9zQ가 53비트인 건 어려워 보여서가 아닙니다. 95개 키 중에서 진짜로
무작위로 뽑았을 때만, 오직 그때만 그렇습니다. 무작위인 척하려고 당신이 직접
쳤다면 수식은 적용되지 않습니다. 당신은 추첨기가 아니니까요. 대문자는 맨 앞,
숫자는 맨 뒤, 기호는 !. 공격자는 자리마다 95가지를 다 시도하지 않습니다.
사람이 하는 것부터 먼저 시도합니다.
여기서 비밀번호 보안의 불편한 비대칭이 나옵니다. 엔트로피는 천장이지 바닥이 아닙니다. 기계가 만들면 그 천장은 진짜입니다. 당신이 고르면 아는 건 하나뿐입니다. 천장 아래에 있다는 것. 얼마나 아래인지는 모릅니다.
그래서 도구가 하나가 아니라 둘입니다. 생성기는 진짜로 뽑고, 그래서
비트를 정색하고 보여줄 수 있습니다. 다이얼이 몇 개인지 알고(L), 다이얼마다
기호가 몇 개인지 알고(N), 당신 눈앞에서 곱셈을 합니다. 슬라이더를 움직였을
때 숫자가 올라가는 걸 본다면, L이 밀어 올리는 걸 보고 있는 것입니다. 반면
검사기는 이미 존재하는 비밀번호에 그렇게 할 수 없습니다. 그게
어떻게 태어났는지 전혀 모르니까요. 그래서 유일하게 분별 있는 일을 합니다.
사전과 이름과 키보드 패턴에서 찾아보고 최악을 가정하는 것.
가져갈 것
세 문장입니다.
- 1비트는 한 번의 배가다. 10비트를 더하면 천 배의 작업, 20비트를 더하면 백만 배.
- 길이는 곱하고, 알파벳은 겨우 더한다. 단어 하나를 더하는 게 느낌표 하나를 더하는 것보다 낫습니다.
- 비트는 무작위가 진짜일 때만 값어치가 있다. 기계는 그걸 약속할 수 있습니다. 손으로 치는 당신은 못 합니다.
섀넌은 메시지 하나에 놀라움이 얼마나 담기는지를 찾고 있었습니다. 칠십 몇 년이 지나고 보니, 그게 바로 비밀번호에 대해 던져야 할 정확한 질문이었습니다. 복잡해 보이는가가 아니라, 당신을 전혀 모르는 사람에게 얼마나 큰 놀라움을 품고 있는가.
출처: C. E. Shannon, “A Mathematical Theory of Communication”, Bell System Technical Journal, 1948 · NIST SP 800-63B, Digital Identity Guidelines (Authentication and Lifecycle Management) · H = L × log₂(N)을 계산하고 L, N과 그 결과인 비트를 보여주는 password.es의 생성기.