강력한 비밀번호 만드는 법 (제대로 하는 방법)
강력한 비밀번호를 만들려면 길고 무작위로 만드세요. 암호학적으로 안전한 출처에서 생성한 최소 16자를 목표로 하고, 계정마다 다른 것을 쓰세요. 공격자를 실제로 막는 것은 느낌표를 몇 개나 욱여넣느냐가 아니라 길이와 예측 불가능성입니다. 가장 빠른 방법은 도구가 대신 만들어 주게 하는 것으로, Andev의 비밀번호 생성기 같은 것을 쓰면 됩니다. 이 도구는 브라우저에서 바로 비밀번호를 만들고 그것을 어디로도 전송하지 않습니다.
비밀번호를 실제로 강하게 만드는 것
비밀번호는 추측하기 어렵고 무차별 대입으로 깨기 어려울 때 강합니다. 그것을 좌우하는 두 가지가 있습니다.
- 길이. 한 글자가 늘어날 때마다 공격자가 시도해야 하는 가능한 조합의 수가 곱절로 늘어납니다. 그 곱셈은 지수적이어서, 추가하는 각 글자가 그 앞의 글자보다 더 큰 의미를 갖습니다.
- 무작위성. 글자들이 진짜로 예측 불가능해야 합니다. 단어, 이름, 생일, 키보드 패턴으로 만든 비밀번호는 아무리 길어 보여도 소프트웨어가 쉽게 추측합니다.
간단히 말해, 길고 무작위한 비밀번호는 강합니다. 짧고 “영리한” 비밀번호는 그렇지 않습니다. 그 밖의 모든 것, 즉 어떤 기호를 쓰는지, 대문자를 어디에 넣는지는 이 두 요소에 비하면 반올림 오차에 불과합니다.
길이 대 복잡성의 통념
수년간 표준 조언은 “복잡한 비밀번호를 쓰라”는 것이었습니다. 대문자, 소문자, 숫자, 기호를 섞으라는 거죠. 그 조언은 P@ssw0rd! 같은 비밀번호를 낳았습니다. 복잡해 보이지만 사실은 약합니다. 공격자들이 사람들이 하는 치환을 정확히 알기 때문입니다(a는 @가 되고, o는 0이 되고, 끝에 느낌표가 붙는 식이죠).
수학이 더 분명한 이야기를 들려줍니다. 비밀번호에 한 글자를 더하면 공격자가 필요로 하는 추측 횟수가 사용한 문자 집합의 크기만큼 곱해집니다. 특수 기호를 추가하면 그 집합이 조금 넓어질 뿐입니다. 그래서 더 긴 비밀번호는 거의 언제나 더 짧은 “복잡한” 비밀번호를 이깁니다. 위 그림이 보여 주듯, 길이는 구두점을 뿌리는 것보다 난이도를 훨씬 빠르게 끌어올립니다.
이것이 무작위 단어 여러 개로 된 패스프레이즈가 강하면서도 외우기 쉬울 수 있는 이유입니다. 서로 무관하게 무작위로 고른 단어들의 나열은 길고, 추측하기 어렵고, 기호의 벽보다 입력하기 쉽습니다. 핵심 단어는 무작위입니다. 자신에게 의미가 있어서 고른 문구는 바로 공격자의 단어 목록에 이미 들어 있는 종류입니다.
복잡성 규칙도 나름의 자리가 있습니다
많은 사이트가 문자 종류를 섞도록 강제하는데, 생성된 비밀번호는 어차피 그 규칙을 충족합니다. 핵심은 기호를 피하는 것이 아니라, 기호를 강함의 원천으로 의존하지 않는 것입니다. 먼저 길이와 무작위성을 제대로 잡으면 복잡성은 저절로 해결됩니다.
왜 “생성하기”가 “머리로 짜내기”를 이기는가
사람은 형편없는 난수 생성기입니다. 우리는 단어, 날짜, 반려동물 이름, 패턴에 손을 뻗고, 계정마다 자신을 반복합니다. 공격자들은 바로 이런 습관을 노립니다.
좋은 생성기는 암호학적으로 안전한 무작위성 출처에서 끌어와 추측의 여지를 없앱니다. 브라우저에서 그 출처는 Web Crypto API, 구체적으로는 예측 불가능하도록 설계된 crypto.getRandomValues()입니다. 이는 재생 목록을 섞는 것 같은 용도에 쓰이는 단순한 “무작위” 함수와는 전혀 다릅니다. 그런 함수들은 충분히 예측 가능해서 보안에는 결코 써서는 안 됩니다.
Andev의 비밀번호 생성기는 바로 이것 위에 세워졌습니다. Web Crypto API를 사용해 브라우저에서 로컬로 비밀번호를 만듭니다. 작업이 사용자 기기에서 이루어지므로, 생성된 비밀번호는 어디로도 전송되지 않습니다. 그것을 보거나 기록하거나 유출할 수 있는 서버가 없습니다. 결과를 제3자에게 맡기지 않고도 강력한 비밀번호를 얻습니다.
실용적인 체크리스트
이것들을 따르면 진짜로 중요한 것들을 챙긴 셈입니다.
- 길게 하세요. 최소 16자를 쓰세요. 길수록 좋고, 생성기와 비밀번호 관리자가 입력을 대신해 주면 들이는 비용은 거의 0입니다.
- 무작위로 만드세요. 직접 지어내지 말고 암호학적으로 안전한 출처에서 생성하세요.
- 개인 정보를 절대 바탕으로 삼지 마세요. 이름, 생일, 주소, 좋아하는 팀, 또는 누군가 당신에 대해 찾거나 추측할 수 있는 것은 안 됩니다.
- 사이트마다 고유한 비밀번호를 쓰세요. 비밀번호 하나에 계정 하나. 한 사이트가 뚫려도 피해가 거기서 멈춥니다.
- 비밀번호를 절대 재사용하지 마세요. 재사용은 유출된 비밀번호 하나가 “크리덴셜 스터핑”을 통해 여러 침해 계정으로 번지는 방식입니다. 공격자가 유출된 로그인 정보를 다른 사이트들에 그대로 시도해 보는 것이죠.
- 비밀번호 관리자에 저장하세요. 16자짜리 무작위 문자열 수십 개를 외울 필요는 없습니다. 그건 관리자의 몫입니다. 입력까지 대신해 주므로 길이가 더 이상 불편하지 않습니다.
- 2단계 인증(2FA)을 켜세요. 강력한 비밀번호는 1차 방어선이고, 2FA는 비밀번호가 어떤 식으로든 노출되어도 버티는 두 번째 자물쇠입니다.
몇 초 만에 만드는 법
- 비밀번호 생성기를 엽니다.
- 길이를 16자 이상으로 설정합니다(정말 중요한 계정은 더 길게).
- 원하는 문자 종류를 고릅니다. 대부분의 사이트는 전부 섞은 것으로 만족합니다.
- 계정을 만들거나 갱신하면서 생성된 비밀번호를 비밀번호 관리자에 복사합니다.
- 계정이 제공하는 곳이라면 어디서든 2FA를 켭니다.
이것이 전체 작업 흐름입니다. 생성기가 무작위성을 처리하고, 비밀번호 관리자가 기억을 처리하니, 다시는 비밀번호를 지어내거나 재사용할 필요가 없습니다.
관련 도구에 관한 메모
비밀번호와 해싱은 혼동하기 쉬우므로 분명히 해 둘 가치가 있습니다. 비밀번호는 로그인하기 위해 간직하고 반복해서 쓰는 비밀이고, 해시는 어떤 데이터의 단방향 지문으로, 사용자를 인증하기보다는 무결성을 검증하는 데 흔히 쓰입니다. 파일이나 문자열의 체크섬을 만들어야 한다면, 그것은 해시 생성기의 일이지 강력하고 고유한 비밀번호의 대체물이 아닙니다. 비밀번호를 해싱 도구에 붙여 넣고 그것이 안전하게 저장될 수 있게 만들어 주리라 기대하지 마세요. 계정 로그인을 위해 비밀번호를 해싱하는 일은 그런 것이 아닙니다.
핵심 요약
- 길이와 무작위성이 이깁니다. 비밀번호가 깨기 얼마나 어려운지를 의미 있게 결정하는 유일한 두 요소입니다.
- 복잡성 통념은 그저 통념일 뿐입니다. 길고 무작위한 패스프레이즈는
P@ssw0rd!같은 짧고 “복잡한” 비밀번호를 매번 이깁니다. - 안전한 도구가 생성하게 하세요. 추측 가능하거나 사람이 고른 문자열이 아니라, Web Crypto API의
crypto.getRandomValues()위에 세워진 출처를 쓰세요. - 사이트마다 고유한 비밀번호 하나씩, 매번. 절대 재사용하지 말고, 개인 정보를 바탕으로 삼지 말고, 비밀번호 관리자에 저장하세요.
- 두 번째 자물쇠를 더하세요. 2단계 인증을 켜서 비밀번호 하나가 노출되어도 게임 끝이 되지 않게 하세요.
다음 비밀번호는 강한 것으로
비밀번호 생성기는 무료이고 가입이 필요 없으며 전적으로 브라우저에서 실행됩니다. 비밀번호는 Web Crypto API로 로컬에서 만들어지고 기기를 결코 떠나지 않습니다. 클릭 한 번으로 16자 무작위 비밀번호를 생성해 비밀번호 관리자에 넣고, 더 많은 보안 작업을 같은 비공개 방식으로 처리하는 Andev의 다른 비공개 브라우저 도구들도 둘러보세요.