아무 단어나 하나 떠올려보세요. 지금 당장, 제일 먼저 떠오르는 걸로.
무엇이 떠올랐든 그건 무작위가 아니었습니다. 그건 당신의 단어입니다. 이번 주에 읽은 것, 지금 눈앞에 있는 물건, 당신 이름의 첫 글자. 사람에게 무작위를 요구하면 나오는 건 자서전입니다. 그리고 자서전은 맞힐 수 있습니다.
비밀번호 문제 전부가 여기 요약돼 있습니다. 사람들이 게을러서가 아니라 — 게으른 것도 맞지만 — 우리가 무작위를 만들어낼 능력이 없어서입니다. 우리는 특정 글자를 좋아하고, “무작위처럼 안 보인다”는 이유로 반복을 피하고, 자기도 모르게 자음과 모음을 번갈아 쓰고, 숫자를 대라고 하면 손에 잡히는 것을 씁니다. 날짜, 나이, 의미가 있는 숫자들. 공격자는 그걸 써먹기 위해 당신이 누구인지 알 필요가 없습니다. 당신이 인간이라는 것만 알면 충분합니다.
엔지니어 한 명, 주사위 다섯 개, 목록 하나
1995년, Arnold G. Reinhold는 자기 홈페이지에 Diceware라는 이름의 방법을 공개했습니다. 아이디어가 너무 단순해서, 이걸 설명해야 한다는 사실이 조금 억울할 정도입니다. 인간이 무작위로 못 고르는 게 문제라면, 인간에게서 선택권을 빼앗으면 됩니다.
전체 절차는 세 줄이면 끝납니다.
- 주사위 다섯 개를 굴리고 나온 순서대로 적습니다. 이를테면
4-2-6-1-3. - 목록에서
42613을 찾습니다. - 그게 당신의 단어입니다. 다음 단어를 위해 반복합니다.
목록에는 7,776개 항목이 있고, 이 숫자는 아무렇게나 정한 게 아닙니다. 6⁵,
주사위 다섯 개로 나올 수 있는 모든 결과입니다. 11111부터 66666까지 모든
조합이 서로 다른 항목 하나를 가리키고, 빠지는 것도 겹치는 것도 없습니다. 원래
목록은 짧은 영어 단어에 음절 몇 개, 숫자, 낱개 기호를 섞어놓았는데, 쓸 만한 단어를
7,776개나 모으는 일이 생각보다 어렵기 때문입니다.
중요한 건 목록이 아닙니다. 주사위입니다.
12.9비트가 왜 진짜 12.9비트인가
여기가 거의 아무도 이해하지 못하는 부분이고, 유일하게 중요한 부분입니다.
Diceware 단어 하나의 엔트로피는 log₂(7,776) = 12.9비트입니다. 이건 보안이 아니라 산수입니다. 결과가 7,776가지이고 전부 정확히 같은 확률입니다.
당신이 직접 고를 때와 비교해보세요. 7,776개짜리 사전에서 단어 하나만 골라달라고 하면 계산은 같아 보입니다. 선택지도 똑같이 7,776개니까요. 하지만 아닙니다. 당신은 그것들을 같은 확률로 고르지 않으니까요. 흔한 단어, 마음에 드는 단어, 오늘 본 단어를 고르게 됩니다. 그 사전은 종이 위에서는 12.9비트지만 당신 머릿속에서는 훨씬 적고, 공격자는 목록을 빈도순으로 정렬해서 사람들이 고르는 것부터 넣어봅니다. 엔트로피는 선택지가 몇 개인지가 아닙니다. 공격자가 당신의 취향에 대해 아는 것을 빼고 나서 선택지가 몇 개 남는지입니다.
주사위에게는 취향이 없습니다. 기억도 없습니다. 주사위는 직전에 숲이 나왔다는 걸
모르므로 반복을 피하지도, 다양성을 챙기지도, 같은 글자로 시작하는 단어가 둘 나왔다고
민망해하지도 않습니다. 그래서 Diceware의 12.9비트는 진짜 12.9비트이지, 광고
전단에 적힌 낙관적인 숫자가 아닙니다.
그래서 계산이 위로 쌓입니다. 단어마다 더해집니다.
- 다섯 단어: 약 64비트.
- 여섯 단어: 약 77비트.
- 일곱 단어: 약 90비트.
마법 같은 곱셈이 아니라 깨끗한 덧셈입니다. 굴림 하나하나가 나머지와 독립이기 때문입니다. Reinhold는 다섯 단어 밑으로는 내려가지 말라고, 정말 중요한 것에는 여섯 단어 이상을 쓰라고 권합니다. 생성기에서 직접 확인해보세요. 단어를 하나 더 넣으면 언제나 같은 양이 더해지고, 그 “언제나”가 이 발명의 전부입니다.
비밀은 목록이 아니다
반론은 저절로 나옵니다. 목록이 공개돼 있으면 깨기 더 쉬운 거 아닌가?
아닙니다. 이건 천천히 말할 필요가 있습니다. 12.9비트는 공격자가 목록을 갖고 있다는 전제를 이미 깔고 있습니다. 당신이 Diceware를 쓴다는 것도, 문구가 몇 단어인지도, 어떤 순서로 적는지도 안다고 전제합니다. 그건 전부 이미 빼고 계산한 값입니다. 공격자가 모르는 건 당신 주사위에 뭐가 나왔는가 하나뿐이고, “77비트”라고 말할 때 당신이 세고 있는 게 바로 그것입니다.
P@ssw0rd에서 우리가 하는 짓은 정확히 그 반대입니다. 거기서 모든 희망은 a를
@로 바꿀 생각을 아무도 못 하기를 바라는 데 걸려 있습니다. 다들 합니다. 사전 공격
도구라면 어느 것이든 제일 먼저 적용하는 규칙에 속합니다. 해보고 싶다면
검사기에 넣고 얼마나 버티는지 보세요.
EFF와 다른 목록들
2016년, Electronic Frontier Foundation은 주사위로 문구를 만드는 자체 단어 목록을 공개했습니다. 긴 목록은 7,776개 항목을 그대로 유지합니다. 같은 주사위 다섯 개, 같은 12.9비트. 대신 내용을 바꿨습니다. 이상한 음절과 기호는 빼고, 흔하고 치기 쉽고 서로 구분되는 단어를 넣었습니다. 1,296개짜리 짧은 목록도 함께 냈습니다(6⁴, 주사위 네 개, 단어당 10.3비트). 하나는 더 짧고 외우기 쉬운 단어로, 다른 하나는 각 단어가 앞 글자만으로 서로 구분돼 자동완성이 되도록 설계했습니다. 그 대가로 굴림 하나의 값이 줄고 더 여러 번 굴려야 합니다.
이 대목의 우아한 점은 산수가 누구의 취향에도 흔들리지 않는다는 것입니다. 항목 수가 결정합니다. 제주어로든, 경상도 사투리로든, 클링온어로든 자기 목록을 만들 수 있습니다. 서로 다른 항목이 7,776개이고 주사위로 고르기만 하면 단어 하나는 12.9비트입니다. 목록을 바꾸면서 당신이 정하고 있는 건 결과가 얼마나 마음에 드느냐일 뿐, 얼마나 안전하냐가 아닙니다.
망치는 세 가지 방법
Diceware는 세 가지로 실패하고, 셋 다 같은 실수입니다. 인간이 다시 손을 대는 것.
- “이건 마음에 안 드는데” 하고 다시 굴리기. 결과를 버리는 순간 당신은 주사위를 쓰는 게 아닙니다. 소품용 주사위를 놓고 당신의 판단을 쓰는 겁니다. 나온 건 나온 겁니다.
- 말이 되게 단어 순서 바꾸기. 순서도 굴림의 일부입니다.
- 끝에
!, 앞에 대문자를 붙여 “개선”하기. 사람들이 끝에!를 붙이고 앞을 대문자로 쓴다는 걸 아는 공격자 앞에서 그건 아무것도 더하지 않습니다. 멍청한 정책을 맞춰야 한다면 하세요. 하지만 그걸로 보안을 얻었다고 믿지는 마세요. 보안은 한 번 더 굴릴 때 얻은 겁니다.
그리고 Reinhold가 이미 해둔 당부 하나. 흔한 주사위로 충분합니다. 카지노용이 더 정밀하긴 해도 필요하진 않습니다. 평평한 바닥에 굴리는 게 좋고, 결과는 나온 그대로 적습니다.
요약
주사위로 뽑은 여섯 단어짜리 문구는 P@ssw0rd보다 치는 데 오래 걸리고,
Tr0ub4dor&3보다 외우기 쉬우며, 둘 다보다 깨는 비용이 몇 자릿수는 비쌉니다. 더
기교를 부려서가 아니라 — 기교는 없습니다, 평범한 단어 여섯 개입니다 — 당신의
비밀번호에서 유일하게 당신이 정하지 않은 부분이기 때문입니다.
Diceware의 농담은 이겁니다. 당신이 가질 수 있는 최고의 비밀번호는 당신 의견이 끼지 않은 비밀번호입니다.
출처: Arnold G. Reinhold, 「The Diceware Passphrase Home Page」 및 7,776개 단어 목록(1995) · Electronic Frontier Foundation, 주사위로 만드는 비밀번호 문구용 단어 목록(2016) · 산수는 직접 확인 가능합니다. 6⁵ = 7,776이고 log₂(7,776) ≈ 단어당 12.92비트.