mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-11-21 06:55:29

비밀번호


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
스포츠 관련 용어에 대한 내용은 비밀번호(스포츠) 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
1. 개요2. 용도3. 비밀번호 설정 방법
3.1. 흔한 단어나 문자열 사용하지 않기3.2. 사용자 및 주변인물의 개인 정보를 포함하지 않기3.3. 기억하기 쉬운 비밀번호 만들기3.4. 암호화 알고리즘 이용하기
4. 비밀번호 관리 방법
4.1. 비밀번호 관리자 사용하기4.2. OAuth 이용하기4.3. 비밀번호 설정에 제한 거는 사이트 주의하기4.4. 잊어버린 비밀번호 찾아주는 사이트 피하기4.5. 유출된 비밀번호는 폐기하기4.6. 2단계 인증 이용하기
5. 오해
5.1. 비밀번호는 자주 바꿔야 한다
6. 관련 문서

1. 개요

비밀번호()는 이용자가 시스템에 대한 접근 권한을 가지고 있음을 증명하는 암호 문자를 말한다. 영어로는 패스워드(Password)라고 하며 PIN[1]이나 패스코드(passcode)라고 하는 경우도 있다.

보통 아이디(ID, Username, Nickname)와 함께 계정(Account)을 구성한다. 아이디가 사용자 자신을 남에게 표현(식별을 용이하게 하기 위해)하기 위해 노출하는 것이라면 비밀번호는 해당 계정이 자신의 계정임을 증명하는데 사용되는 문자로 사용자 당사자만 아는 암호이다. 타인이 아이디에 불법적으로 개입하지 못하도록 차단하는 시스템이다. 아이디가 집 주소라면 비밀번호는 집 열쇠, 아이디가 이름이라면 비밀번호는 신분증으로 비유할 수 있다.

2. 용도

특정 사용자에 대한 본인 인증성 문자라고 볼 수 있다. 사용자 식별용 개인정보인 ID, 닉네임과는 다르게 겉으로 표기되지 않고 감추어지며 오로지 해당 사용자만 알고 있다.

나무위키에 로그인을 했다면 당신도 비밀번호로부터 자유로울 수 없다.

현실에서도, 사이버상에서도 매우 자주 접하게 되는 것이 비밀번호다. 일단 온갖 웹사이트 로그인 시에는 필수로 사용되고, 버튼형 자물쇠의 번호도 비밀번호고, 현관문의 자동 전자 잠금장치도 비밀번호이고, 은행의 통장 사용 시에도 비밀번호를 요구하고, 각종 전자기기 잠금 기능에서도, 각종 압축 프로그램에서도 쓰이는 것이 비밀번호다.

넓은 폭으로 따지자면 게임 설치할 때 필요한 시리얼 넘버도 포함되지만 이 경우는 공통점은 '문자'로서 구성된다는 것이므로 지문이나 홍채 등은 비밀'번호'로 쳐주지는 않는다. 물론 본인 확인용 시스템이라는 점은 같다.

주로 아이디와 함께 동봉되지만 경우에 따라서는 비밀번호만 필요한 경우도 있다. 이를테면 압축 프로그램에서 비밀번호를 걸어두는 것 혹은 각종 인터넷 쇼핑 사이트에서 비회원 로그인 용으로 주민등록번호만 쓰는 것 등이 있다. 코레일의 철도역에 있는 티켓자판기에서 승차권을 발권할 때 가끔씩 증정해 주는 철도예약용 10% 종이할인쿠폰에도 비밀번호가 찍혀서 나온다.

3. 비밀번호 설정 방법

구글에서 권장하는 안전한 비밀번호 만들기

안전한 보안의 시작은 강력하고 안전한 비밀번호를 만드는 것이다. 쉽게 유추할 수 있는 비밀번호를 사용하는 경우가 상당히 많은데 이는 안전불감증의 온라인 버전이나 다름없다. 모든 사이트에 같은 비밀번호를 사용하다가 모조리 털리는 경우도 있다. 비밀번호 설정에 대한 안일한 생각은 수많은 사이트에서의 로그인이 모조리 뚫리는 연쇄반응으로 돌아올 수 있다.

비밀번호의 강도는 두 가지 요소에 의해 결정된다. 첫째는 무작위성, 둘째는 길이다. 비밀번호는 무작위로 생성되어야 한다. 그래야 공격을 효과적으로 방지할 수 있기 때문이다. 무작위로 생성되지 않으면 공격이 매우 효율적으로 진행될 수 있어 위험하다.

비밀번호의 길이를 늘리면 공격에 필요한 비용을 증가시킬 수 있다. 다만, 이는 각자의 위협 모델에 따라 달라질 수 있는 부분이다.

3.1. 흔한 단어나 문자열 사용하지 않기

AOL 선정 최악의 비밀번호 25선
password 123456[2] 12345678 qwerty abc123
monkey 1234567 letmein trustno1 dragon
baseball 111111 iloveyou master sunshine
ashley bailey passwOrd shadow 123123
654321 superman qazwsx michael football

2011년 11월 17일 AOL에서는 인터넷 보안업체인 스플래시데이터(SplashData)의 자료를 인용해 최악의 비밀번호 25가지를 발표했다. 스플래시데이터는 "해커들은 다양한 첨단 해킹기술을 이용할 수 있지만 그들이 방어벽을 깨고 들어갈 때는 낮게 매달려 있는 과일(the low-hanging fruit)처럼 쉬운 비밀번호부터 사용해본다"고 밝혔다.

아예 이런 '쉬운 비밀번호 목록'이 거래되기까지 한다. 20MB~50MB쯤 하는 비밀번호로 가장 많이 쓰이는 단어들이 기록되어있는 텍스트 파일인데 먼저 이 단어들을 넣고 돌려 본다. 비밀번호에 대한 공격이 비밀번호를 사용하지 않는 관리자 권한 탈취나 키로거 같은 방식이 아니라면 주로 브루트 포스로 되어 있는데 저런 쉬운 단어를 등록해서 사전 공격을 하는 것이라고 생각하면 된다. 물론 관리자 권한의 대다수는 단순하게 뚫릴 리가 없으니 결국은 브루트 포스로 귀결되는 경우가 많다.

3.2. 사용자 및 주변인물의 개인 정보를 포함하지 않기

사용자나 주변 인물의 개인정보를 비밀번호에 적지 말아야 한다. 대표적으로 오남용되는 개인정보는 다음과 같다.
보안에 좀 신경쓰는 사이트는 아예 이런 문자열을 넣으면 못 넣게 경고로 띄워 버린다. 특히 가장 많이 사용되는 위험 문자열 중 하나가 바로 성명 이니셜 + 생일(MMYY) 조합이다. 예를 들어 안철수의 비밀번호가 acs0226인 셈이다. 이러면 사전이고 뭐고 없이 몇 분 안에 뚫린다고 보면 된다. 개인정보 상당수가 노출된 연예인들이 이런 피해를 많이 입는다.

3.3. 기억하기 쉬운 비밀번호 만들기

웹사이트에서 회원가입을 할 때 비밀번호에 대소문자와 특수문자를 섞느라 애를 쓴 적이 한 번씩은 있을 것이다. 이와 같이 안전한 비밀번호를 만들기 위해 특수문자와 알파벳 대소문자를 섞어야 한다고 주장한 사람은 미국의 빌 버라는 사람인데, 2003년에 이 방식을 주장해서 사실상 표준화시키고 10년 뒤에 이걸 후회한다며 자신의 주장을 철회했다. 뉴스링크 쓸데없이 복잡한 비밀번호 규칙의 유해성 Create better passwords

대소문자, 숫자, 특수문자 등을 섞은 복잡한 비밀번호를 만들고 이걸 수시로 바꾸다 보면 혼란을 피할 수 없게 되어, 결국에는 비밀번호 관리에 있어서 최악인 다른 곳에 적어놓는[3] 방법으로 빠지기 쉽기 때문이다.

기억하기 쉬우면서 안전한 비밀번호를 만드는 방법
  1. 비밀번호 생성기를 통해 무작위 비밀번호를 만들 수 있다.
    예시: nelt ruh slif zaiy https://1password.com/pa ssword-generator/(Most Memorable)
  2. 다이스웨어. 주사위를 굴려서 무작위 비밀번호를 만드는 방법이다. 다이스웨어는 사용자에 따라 강도가 변하지 않으며 약간의 물리적인 절차가 필요한 대신 확실한 투명성을 제공한다.
  3. 수학공식, 수식을 사용하는 것도 나쁘지 않다. 수학공식은 숫자, 알파벳 그리고 특수문자까지 다 들어가 있는 경우가 허다하다. 아니면 아무렇게나 조합한 수학공식을 자신만의 비밀번호로 설정해 두면 뚫릴 절대로 일이 없을 것이다. 근데 E=mc2과 같이 짧은 공식은 비추이다. 길지 않으면 대입 공격에 쉽게 뚫리며, 해커가 수학공식들을 사전에 등록해 두었다면 어떤 공식이든 뚫리기 십상이다. 어느정도 긴공식[4]에 몇자를 변형해서 넣자. 이를테면 x^7-y^3=(x-y)(x+y).
  4. 좋아하는 노래 가사나 영화 명언처럼 문장으로 이루어진 암호를 사용할 수 있다. 과거에는 로그인할 때마다 암호를 입력했기 때문에 길게 만들면 사용하기 힘들었지만 현재는 핸드폰이나 컴퓨터에 암호가 저장되기 때문에 이를 사용하는 사람도 늘었다. 다만, 사람이 문장으로 이루어진 암호를 만든다면 무작위성이 감소할 수 있다. 보안을 강화하기 위해서는 비밀번호 생성기나 다이스웨어를 사용하는 것을 권장한다. 예시: 원숭이가GPU로옷걸이레터
  5. OneKeyPass. 1개의 비밀번호만 외우고 있으면 도메인별 다른 비밀번호를 생성해주는 구글 익스텐션이다. OneKeyPass는 일부 도메인에 대하여 암호조건에 만족하는 비밀번호를 생성해준다. 예시: 8 ~ 16 자리, 대소문자 포함, 특수문자 포함 등

3.4. 암호화 알고리즘 이용하기

AES 등의 암호화 솔루션을 이용하면 쉽게 기억할 수 있는 간단한 단어로도 길고 강력한 암호를 만들 수 있다. 현재 가장 널리 사용되는 알고리즘 중 하나인 AES-CBC는 IV(Initialization Vector)와 비밀 키를 이용하여 문자열을 암호화한다. 이때 IV는 공개되어도 상관이 없고, 비밀 키는 반드시 자신만 알고 있어야 한다. 이렇게 암호화된 문자열의 일부를 추출하여 비밀번호로 사용하면 강력한 보안을 보장받을 수 있다.

AES의 가장 큰 장점은 압도적인 보안 수준으로, 미 정부가 이 알고리즘을 믿고 사용할 정도이다. 유추하기는 쉽지만 사이트별로 다른 IV를 사용하고 충분히 강력한 비밀 키를 갖고 있다면 아무리 쉬운 비밀번호를 쓰려고 할지라도 매우 강력하게 암호화할 수 있다. 극단적으로 예를 들어 모든 사이트에 대한 평문을 'password', IV를 각 사이트 도메인으로 설정하더라도 충분히 강력한 비밀 키만 있다면 password라는 단순하고 똑같은 평문도 각기 다른 문자열로 암호화할 수 있다.
.%C%d\>9RWo^3=is/83*
평문 password, IV naver.com(0x0 패딩), 비밀 키 NamuWikllsBest!!를 AES-CBC-128로 암호화 후 Ascii85로 인코딩
위와 같이 간단한 평문과 IV로도 매우 강력한 비밀번호가 생성되었다. 위 비밀번호는 단순 대입으로 해독하는 데에 30해 년이 걸리는데 이 정도면 해독이 사실상 불가능에 가깝다. 무규칙의 복잡한 비밀번호와 같은 수준의 보안을 갖고 있으면서도 원문과 키, IV만 알고 있으면 다시 생성하는 것이 가능한 만큼 기억에도 유리하다.

4. 비밀번호 관리 방법

아무리 강력한 비밀번호를 설정했어도 제 입으로 그걸 말해 버리면 소용이 없다. "여기 비밀번호 뭐예요?" "XXXX예요"라는 대화를 나누어 본 경험이 적잖게 있을 터인데 보안을 위해서는 번거로워도 담당자에게 직접 번호를 눌러 주기만 하고 타인에게는 비밀번호를 절대로 노출해서는 안 된다.

이미 한 번 유출된 비밀번호가 외우기 편하다고 계속 사용해서도 안 된다. 이미 유출된 비밀번호는 그 생명이 끝난 것이다. 아무리 조심하여 비밀번호를 만들더라도 사이트의 보안이 좋지 않으면 고민하여 비밀번호를 만든 의미가 없어진다. 비밀번호는 만드는 것이 끝이 아니다. 관리를 얼마나 철저하게 하는지, 그리고 안전성을 담보할 수 있는 서비스만을 사용하는지가 보안에 결정적인 영향을 미친다.

4.1. 비밀번호 관리자 사용하기

웹사이트나 앱마다 비밀번호를 다르게 설정해두는 것이 좋다. 특히 자신이 같은 아이디를 여러 사이트에 돌려 쓰고 있다면 정말 조심해야 한다. 보안이 취약한 사이트에서 해킹되었을 때 동일한 아이디와 비밀번호 조합을 쓰는 계정들도 해킹당하기 쉽기 때문이다. 해커들의 한 놈만 걸려라 수법에 가장 쉽게 말려드는 사람들이 바로 이렇게 사전에 있는 쉬운 비밀번호들을 아이디가 같은 여러 사이트에 통일해 쓰다가 그중 보안이 약한 사이트에서 하나 걸리는 것이다. 이러면 세계 최고의 구글 보안도 그 사람에게는 아무런 의미가 없다.

비밀번호의 재사용을 방지하려면 비밀번호 관리자를 사용해야 한다. 사람의 뇌는 생각보다 무작위적이지 않기 때문에 도구 없이 추측하기 어려운 비밀번호를 만들어 내기는 어렵다. 비밀번호 관리자는 수많은 계정에 대해 고유하고 무작위적인 비밀번호를 생성해준다. 따라서 사용자는 강력한 마스터 패스워드를 설정하고 이를 잘 기억하기만 하면 된다.

다만 비밀번호 관리자는 사용하기 앞서 주의가 필요한데, 공용 컴퓨터를 사용할 때만큼은 절대로 이 기능을 이용해서는 안 된다.[5] 자신의 비밀번호를 불특정 다수에게 홍보하고 다니는 것이나 마찬가지인 미친 짓이다. 이 때문에 PC방에서 자신의 계정으로 재미있게 보던 유튜브가 비밀번호 저장 기능으로 자동 로그인된 채 다른 누군가에 의해 이용되는 경우도 있다. 로그인한 후 뜨는 저장 팝업에서 반드시 저장 취소를 눌러야 이러한 불상사를 막을 수 있다. 습관 때문에 정 불안하다면 비밀 모드(Incognito) 게스트 모드를 이용하는 것도 방법이다. 비밀 모드와 게스트 모드에서는 비밀번호 저장이 불가능하고, 로그아웃하지 않고 실수로 꺼 버린 사이트들에서도 일괄적으로 로그아웃이 이루어지기 때문이다.

4.2. OAuth 이용하기

비밀번호를 그대로 저장하는 막장 사이트가 아니더라도 보안에 덜 취약한 사이트가 있는 반면 더 취약한 곳들이 있다. 이는 해시 알고리즘이 한 가지가 아니기 때문이다. 일반적인 사이트들은 SHA-1이라는 해시를 사용하는데, 비교적 구식 방법이라 이미 많은 경우에 대한 문자열-해시 대조표가 뚫렸다. 즉, 해커들이 해시값만 보고도 원래 문자열을 어느 정도 유추할 수 있다는 것이다. 이는 비밀번호 찾기 급의 병크는 아니지만 그대로 취약한 보안 수준이라고 할 수 있다.

이에 소규모 사이트에 가입할 때에는 OAuth를 사용하는 것이 권장된다. 로그인 창에서 회원가입, 비밀번호 잊음 등의 버튼 아래에 'Continue with Google', 'Continue with Microsoft' 등이 있는 것을 볼 수 있는데 이것이 바로 OAuth이다. 사용자의 로그인 정보 및 기초적인 개인정보에 대한 관리를 일반 사이트에 밑기지 않고 구글이나 마이크로소프트 등 사용자 정보를 갖고 있는 대기업에게 위임하는 것이다. 이를 사용하면 사이트의 허접한 보안 대신 구글 등의 훌륭한 보안을 그대로 이어 사용할 수 있기 때문에 위의 문제들로부터 자유롭다.

어떤 사람들은 구글이 혹시 민감한 정보들을 넘겨주는 것이 아닌가 의심하며 그냥 사이트에 회원가입을 하기도 하지만, 이 기업들은 계약한 내용에 따라 민감한 정보는 절대 제공하지 않고, 만약 민감한 정보가 필요할 경우 팝업을 띄워 사용자에게 직접 동의를 구하도록 되어 있다. 구글 등의 대기업들은 사용자의 개인정보가 기업의 존명과 밥줄이니만큼 이 보안 부분에서 약세를 보일 수가 없고, OAuth를 제공한다는 것은 적어도 웬만한 사이트보다는 보안이 훨씬 좋다는 자신이 있다는 뜻이므로 안심할 수 있다.

4.3. 비밀번호 설정에 제한 거는 사이트 주의하기

단, 비밀번호 최대 길이 제한은 예외다. 이것은 웬만해서는 걸어두는 경우가 많다. 이유는 간단한데, 비밀번호가 길어질수록 암호화에 걸리는 시간도 길어지기 때문에 최적화를 위해 제한을 거는 것이다. 만약 글자 수 제한을 완전히 없앨 경우 엄청나게 긴 암호로 (가령 10GB 짜리 문자열) 서버를 공격하는 데 사용할 수 있기 때문이다. 대표적으로 윈도우 계정 비밀번호는 최대 127자, 구글은 최대 100자의 제한이 걸려 있다.

!, @, #, $, % 등 숫자열에 있는 특수문자의 이용만을 허용하는 곳들도 있다. 특정 키보드 배열을 사용하는 사람들을 위한 정책이라고는 하는데… 실상으로는 SQL 예외 처리를 똑바로 안 했거나 극단적인 경우 아직도 구닥다리 웹문법을 써서 표준 유니코드 2.0 이상 환경에서만 사용 가능한 문자들을 지원하지 않다. 그나마 후자의 경우 윈도우가 유니코드 환경으로 바뀐 지 오래 지나 거의 없어졌지만 전자의 경우 아직도 구식 보안체제를 쓰는 사이트를 자주 만나볼 수 있다. 사이트마다 제한된 특수문자가 달라서 해당사이트에 적용된 비밀번호를 까먹게되는 경우도 발생한다.

오랫동안 운영되고 있는 레거시 시스템이나 무고장 운용을 지향하는 시스템에서 비밀번호 체계를 바꾸는 행위는 곧 시스템 자체를 새로 짜는 행위이며, 이는 곧 시스템 정지를 의미하기 때문에 이로 인한 비용은 중소기업은 물론이고 대형 포털에게도 부담이 될 수밖에 없다. 많은 사이트들이 여전히 16자를 고집하는 것은 이 때문으로, 이런 사이트들은 2단계 인증을 도입하는 등으로 소위 '땜빵'을 하고 있는 실정이다.

아래는 비밀번호가 20자 미만 또는 일부 특수문자만 사용 가능으로 제한되어 있는 사이트들의 목록이다. Ascii85 33-117번에 포함된 특수문자를 모두 사용 가능한 경우 제한 없음으로 간주한다.
서비스 제공자 길이 제한 문자·문자열 제한 기타 보안 장치 최신 확인 일자
1365 - 모든 특수문자 사용 불가 X 2022. 2. 17.
CJ ONE 12자 - X 2023. 7. 17.
LFmall 15 ~, !, @, #, $, %, ^, &, *, ? 이외 특수문자 불가 OAuth[K][N] 2024.01.16
EBS 12자 모든 특수문자 사용 불가 OAuth[F][K][N][A] 2023. 8. 1.
KT 8-16자 ( ) < > ' " ; 사용 불가
4자리 이상 연속 영문·숫자 불가
OAuth[P][K][N] 2020. 4. 14.
TEPS 12자 ! @ # $ % ^ & * ( ) ? _ ~ 이외 특수문자 불가 X 2023. 9. 7.
가비아 16자 일부 특수문자 제한
4자리 이상 연속 영문·숫자 불가
OAuth[G][K][N] 2023. 8. 12.
교보문고 - 3회 중복 문자 사용 불가 OAuth[G][K][N] 2023. 8. 12.
나라사랑포털 12자 - X 2023. 3. 15.
네이버 16자 - 2FA[21], OAuth[F][L] 2021. 11. 8.
넥슨 10-16자 - OAuth[G][F][A][N] 2023. 8. 12.
다락원 16자 - X 2020. 4. 30.
대한적십자사 혈액관리본부 15자 - X 2019. 4. 15.
독서교육종합지원시스템 18자 - X 2023. 8. 12.
메가박스 16자 - OAuth[Pa][K][N] 2023. 8. 12.
밀리의 서재 16자 ! @ $ ^ * - _ 이외 특수문자 불가 OAuth[G][F][A][K][N] 2023. 12. 15.
반디앤루니스(서울문고) 10-15자 모든 특수문자 사용 불가 X 2023. 9. 7.
뷰티포인트( 아모레퍼시픽) 16자 - X 2020. 4. 10.
사람인 16자 - X 2020. 4. 15.
아프리카TV 15자 - X 2020. 4. 10.
안드로이드 화면 잠금 16자[36] - 생체 인식, SIM 락, PUK -
알바몬 16자 < > = \ ` 사용 불가 OAuth[G][F][A][K][N] 2023. 9. 7.
알바천국 16자 - OAuth[F][A][K][N] 2023. 9. 7.
옥션 15자 - X 2023. 9. 7.
위메프 15자 ! @ # $ % ^ & * _ 이외 특수문자 불가 X 2023. 9. 7.
유니클로 15자 - OAuth[F][A][K][N] 2023. 9. 7.
이랜드리테일 16자 - OAuth[F][K][N] 2023. 9. 7.
인터넷우체국 15자 - 보안 프로그램(.EXE) 2023. 9. 7.
정부24 12자 - X 2019. 4. 14.
컬쳐랜드 12자 ~ @ $ ^ [53] 키보드 보안 프로그램(.EXE) 2023. 8. 12.
CU 편의점택배 10자 - X 2022. 3. 6.
하나투어 8-16자 영문·숫자·특수문자 중 2종류 이상 사용 X 2023. 9. 7.
한국장학재단 15자 - X 2020. 4. 14.
해피머니 12자 - 키보드 보안 프로그램(.EXE) 2020. 4. 4.
현재 제한 없음(길이 20자 이상, 모든 특수문자 사용 가능)
KBS - 2020. 4. 12.
삼성생명 - 2020. 4. 3.
쿠팡 - 2022. 10. 21.

길이 제한 외에도 연속된 알파벳, 숫자나 거꾸로 연속되는 알파벳과 숫자, 그리고 반복된 알파벳, 숫자 3자리 이상을 쓰지 못 하게 하는 곳도 있다. 심지어 규칙이 없는 숫자라도 숫자가 일정 개수 이상 연속하는 것을 허용하지 않는 경우도 있다. 예를 들어 "qp8941239jartckw!@"과 같은 복잡한 비밀번호임에도 단지 비밀번호 안에 "qp8941239jartckw!@"이라는 연속된 숫자 3자리가 들어갔다는 이유로 사용이 불가능해진다. 이런 경우 또 다른 새로운 암호를 설정해야 하므로 굉장히 난감해진다.

4.4. 잊어버린 비밀번호 찾아주는 사이트 피하기


'비밀번호 찾기'를 했을 때 자신의 비밀번호가 사이트에 뜬다면 해당 사이트에서는 되도록이면 즉시 회원탈퇴해야 한다. 비밀번호를 문자열 그대로 서버에 저장하는 것은 법에 저촉되는 사안이며 인터넷에서 회원가입을 할 때 가장 주의해야 하는 사이트 유형이다.

비밀번호를 잊어버렸을 때 하게 되는 '비밀번호 찾기'는 그 이름과는 달리 잊어버린 비밀번호를 찾아주는 게 아니라, 아예 비밀번호를 초기화시키고 다시 설정할 수 있게 하는 기능이다. 그래서 정확히는 '비밀번호 찾기'가 아니라 '비밀번호 복원' 혹은 '비밀번호 재설정' 정도가 맞는다. 영어권 사이트에서도 비밀번호를 그대로 저장하는 것은 엄격히 제한되며 'Find Password'(비밀번호 찾기) 대신 'Forgot Password'(비밀번호를 잊어버렸어요)나 'Reset Password(비밀번호 재설정)', 'Recover Password'(비밀번호 복원)' 등의 용어를 쓰는 추세로 가고 있다.

이를 이해하기 위해서는 Hash라는 개념에 대해 알고 있어야 한다. 해시는 복원 불가능한 단방향 암호화 알고리즘으로, 문자열을 다시 해독할 수 없도록 다른 문자열로 바꾸어버리는 함수이다. 예를 들어 코드북 암호의 경우 코드북만 가지고 있으면 복호화가 가능하기 때문에 해시 암호가 아니다. 해시 암호가 되려면 원래 문자열과 해시된 문자열이 일대일 대응이 아니어야 한다. 즉, 해시된 문자열만으로는 기존 문자열에 대한 정보를 전혀 알 수 없다.

이것이 사이트 운영에 있어 매우매우 중요한 이유는 바로 서비스 제공자는 사용자의 비밀번호를 보호해야 할 의무가 있기 때문이다. 임의의 제3자에게 사용자의 비밀번호가 탈취되어서도 안 되고, 관리자가 사용자의 계정을 사용해도 안 된다. 이 원칙이 지켜지기 위해 가장 핵심적으로 작동하는 것이 바로 해시이다. 해시를 사용하면 서비스 제공자의 계정이 만약의 사태로 인해 탈취된 경우 사용자들의 비밀번호만큼은 보호할 수 있고 관리자 자신이 사용자의 비밀번호를 알 수 없게 되어 범죄를 일으킬 가능성이 낮아지기 때문이다.

이에 따라 거의 모든 국가에서는 비밀번호를 요구하는 모든 서비스 및 사이트는 회원들의 비밀번호를 해시하여 그 값만을 서버에 저장할 것을 법으로 명시하고 있고, 그렇게 하지 않을 경우 불법이다. 비밀번호가 평문 또는 복호화가 가능한 방법으로 저장되면 랜덤한 문자열을 아무리 길게 붙여봤자 강력한 암호를 설정한 노력이 아무 의미 없어진다. 해커가 비밀번호 찾기를 사용하여 유저의 아이디와 이메일만으로 비밀번호를 알아낼 수 있다면 이는 비밀번호의 존재 이유 자체를 없애버리는 치명적인 보안 결함이며, 해당 사이트는 일체의 보안을 하지 않고 있는 것과 같다. 따라서 비밀번호 찾기를 해 봤을 때[54] 기존 비밀번호가 그대로 찾아지는 사이트가 있다면 즉시 신고하고 사이트에 저장된 개인정보를 최대한 빨리 제거해야 한다.

이 케이스가 특히 문제가 될 수 있는 이유는 일반 사람들이 잘 모르고 있는 취약점이어서 이에 대해 경계하는 경우가 적고, 해커에게 당해도 윈인을 잘 모를 확률이 높기 때문이다. 2000년대까지만 해도 보안 의식이 낮아 비밀번호 찾기를 하면 정말로 기존 비밀번호를 찾을 수 있었다. 여전히 '비밀번호 찾기'라는 용어를 쓰고 있는 건 정말로 기존 비밀번호를 찾을 수 있었던 그 시절의 잔재인 셈이다. '비밀번호 찾기'보다는 '비밀번호 재설정'이 더 적절하다. 물론 비밀번호 찾기가 아닌 재설정으로 표기하는 사이트가 늘어나고 있다.

일반적으로는 보안 수준이 낮거나 업데이트가 느린 소규모 사이트들이 이런 방식의 보안을 하고 있다는 것이 알려져 있지만, 사실 대기업도 이 부분에서 자유롭지 않다. 심지어 Facebook은 최근까지 일부 사용자들의 비밀번호를 평문으로 저장한 사실이 드러났다. #

4.5. 유출된 비밀번호는 폐기하기

유출된 비밀번호는 이미 그 생명이 끝난 것이나 마찬가지이다. 만약 예전에 한 번 로그인이 뚫렸던 비밀번호나 비밀번호를 그대로 저장하는 막장 사이트에 로그인을 한 이력이 있다면 그 비밀번호는 절대 사용하지 않는 것이 좋다. 해커는 특정 아이디·비밀번호 조합이 발견되면 일단 그것을 유명한 사이트부터 시도할 것이고, 만약 하나라도 성공한다면 그 순간부터 유저의 보안은 뚫린 것이나 마찬가지이다. 자신의 옛날 비밀번호가 유출되었음에도 사용하는 것은 이미 한 번 발각된 적이 있던 작전명을 다른 전쟁에서 다시 쓰고 있는 것과 다를 바가 없다.

4.6. 2단계 인증 이용하기

위의 모든 사태로부터 일단 한 차례의 방어선을 확보하고자 한다면 반드시 이용하는 것이 좋다. 비밀번호뿐만 아니라 사용자의 이메일이나 전화번호, OTP 등의 대한 실제적인 접근 권한이 있어야 인증 가능한 방식을 사용하고 있기 때문에 일차적으로는 안심할 수 있다. 다만 위에서 설명한 쓰레기 수준 보안 사이트에서는 2단계 인증을 아예 지원하지 않는 경우도 많으므로 모든 경우에 대한 방패막이라고 생각해서는 안 되고, 일단 혹시 발생할지 모를 위험성에 대한 일차적인 방어막 정도로 여기는 것이 좋다. 2단계 인증의 보안 수준이 상당하고, 대부분의 대기업은 지원하기 때문에 보안이 취약한 사이트에 가입해야 할 경우 OAuth + 2단계 인증 조합을 사용하면 꽤 믿을 수 있는 보안 레벨을 얻을 수 있다.

5. 오해

5.1. 비밀번호는 자주 바꿔야 한다

비밀번호를 일정 기간마다 바꾸라는 요구는 오히려 보안에 해가 된다. 일부 사용자는 비밀번호를 기억하기 어렵다고 안전하지 않은 곳에 적어놓기도 하며, 변경하더라도 기존 비밀번호에 숫자나 특수문자만 몇 개 추가하는 경우가 많다. 비밀번호 재사용을 피하고, Google, Apple, 비밀번호 관리자와 같은 안전한 사이트에 충분히 강력한 비밀번호를 설정했다면 자주 변경할 필요가 전혀 없다. 다만, 보안 침해의 증거가 발견되면 즉시 비밀번호를 변경해야 한다.[55]
Verifiers SHOULD NOT require memorized secrets to be changed arbitrarily(e.g., oeriodically). However, verifiers SHALL force a change if there is evidence of compromise of the authenticatior.
검증자는 암기된 비밀을 임의로 변경하도록 요구해서는 안 됩니다(예: 주기적으로). 그러나 검증자는 진위자가 손상된 증거가 있는 경우 강제로 변경해야 합니다.
NIST 800-63B

6. 관련 문서


[1] 'Personal Identification Number'의 약자. PIN하면 당연히 숫자만 포함되는 경우가 많아 해킹에 취약하다. 그래서 금융 IC카드나 휴대전화 같이 보안성이 높은 기기가 아닌 이상 잘 쓰지 않는다. [2] 미국에서 생산된 일부 소규모 영업용 ATM 기기의 관리자 모드를 활성화시키는 디폴트 번호였다. 매뉴얼에는 처음 가동 시 번호를 변경하라고 명시되어 있었으나 이를 지킨 점주는 거의 없었다. [3] 대표적인 사례가 그 유명한 1q2w3e4r!이다. [4] 이를테면 인수분해 공식. 베르누이 방정식도 추천한다. 다만 ρ 같은 그리스 문자는 일반 자판으로 치기 어려우므로 p 같은 비슷한 모양의 문자로 대체해 넣자. [5] 보통 학교, PC방 등 공공시설에서는 Chrome, edge에 계정 비밀번호를 저장하는 경우가 흔해서 개인의 비밀번호를 유출되지 않도록 주의할 필요가 있다. [K] 카카오 [N] 네이버 [F] 페이스북 [K] [N] [A] Apple [P] PASS [K] [N] [G] 구글 [K] [N] [G] [K] [N] [21] 자체 앱 인증 방식 [F] [L] 라인 [G] [F] [A] [N] [Pa] 페이코 [K] [N] [G] [F] [A] [K] [N] [36] 이는 구글이 권장하는 길이로 안드로이드는 누구나 임의로 수정이 가능하기 때문에 제조사마다 다를 수 있다. [G] [F] [A] [K] [N] [F] [A] [K] [N] [F] [A] [K] [N] [F] [K] [N] [53] ( ) _ + 이외 특수문자 불가 [54] 특히 휴대폰 인증 등의 절차 없이 아이디와 이메일 등만으로 바로 찾아진다면 더욱 그렇다. [55] 특히 페이스북 같은 경우는 해킹당하는 계정들이 생기는 경우가 있어 비밀번호 변경이 필수지만 문제는 페이스북 비밀번호 재설정 시 비밀번호 분실이 생기거나 비밀번호 재설정 완료 했어도 일치하지 않는 비밀번호라는 말이 뜨면서 또 재설정해야하는 불편함을 겪게된다. 페이스북 자체는 로그인을 전제로 하기 때문에 로그인이 안 되면 바로 문의를 넣을 수 있는 방법은 없고, 비로그인 상태로는 할 수 없는 문제점이 커서 페이스북 계정에 추가한 개인 이메일, 구글 계정을 통한 OTP, 왓츠앱을 연동한 보안 인증 코드를 받는 방법이 있어도 제시한 3가지 방법으로도 할 수 없는 사용자들의 경우는 SMS 문자 인증 코드를 받아 비밀번호 재설정하는 힘든 상황은 피할 수 없다. SMS 문자 인증 코드라는 간단한 방법이있다해도 짧으면 바로 도착하지만 늦으면 언제 도착할 지 모르는 단점이 있다. 또다른 문제는 이전까지는 보안 인증 코드를 통한 비밀번호 변경이 없었지만 2024년 중순을 시작으로 페이스북에선 로그인 후 비밀번호 변경하려는 과정에 최종적으로 Whatsapp에서 보낸 보안 인증 코드를 입력하라는게 나오면서 왓츠앱을 모르는 사용자들에게는 비밀번호 변경에 애를 먹고 있고, 페이스북 계정에 추가한 개인 이메일, 구글 계정을 통한 OTP가 있는 사용자들과 달리 PC로 비밀번호를 변경하려는 사용자들의 경우 3가지(페이스북 계정에 추가한 개인 이메일, 구글 계정을 통한 OTP, 왓츠앱에 익숙한 유저층)가 없는 경우 비밀번호 변경이 힘들다. [56] 흔한 문자열의 조합으로 인한 보안 취약성을 오히려 역으로 악용하는 사례.