며칠 전 쓴 시스템 보안 글에서 언급했지만 금융권 해킹, 개인정보 유출 등으로 보안에 대해 다시 한번 경각심을 가질 시기인 것 같다. 이번 글에서는 개인 사용자로서 보안의 기본이 되는 비밀번호 안전에 대해 알아보려고 한다.
웹사이트에서 로그인 비밀번호를 저장할 때는 원래의 비밀번호를 알 수 없는 해시값으로 저장한다. 이를 공격자가 탈취하면 해싱된 문자열에서 무차별 대입 방식(브루트 포스)으로 원래 비밀번호를 알아내야 하는데 GPU 등 컴퓨터 성능이 좋아지면서 맞추는 시간이 크게 단축되고 있다.
“How Secure Is My Password” 같은 웹사이트에서 비밀번호를 테스트해보자. 단순 추정이지만 비밀번호를 깨는 데 걸리는 시간이 아래와 같다.
| 비밀번호 예시 | 깨는 데 걸리는 시간 |
|---|---|
영단어 - advanced |
5초 |
한국어 단어 - dyrnfmxm (“요구르트”) |
5초 |
한국어 단어 + 숫자 + 기호 - dyrnfmxm1* |
1개월 |
대소문자 + 숫자 + 기호 12자리 - vfBGr4T%hyJU |
3만4천년 |
의도적으로 틀린 소문자 문구 14자리 - random sambles |
10만년 |
비밀번호에 기호를 넣고 길이를 늘리면 깨는 시간이 급격히 늘어난다. 그러면 비밀번호만 길고 복잡하게 만들면 안전할까?
비밀번호 유출은 문제의 시작일 뿐이다
비밀번호를 깨는 작업이 생각보다 쉽지 않으니 공격자는 지난 글에서도 언급한 다른 방법들을 사용하여 계정을 탈취한다.
- 유출된 비밀번호 재사용(크리덴셜 스터핑): 다른 사이트에서 유출된 아이디와 비밀번호를 그대로 넣어본다.
- 피싱: 가짜 사이트에 피해자가 직접 입력하게 만든다.
- 키로깅: 악성코드가 키보드 입력을 기록한다.
즉, 사용자가 입력하는 비밀번호 자체를 알아낸다. 따라서 비밀번호가 8자리든 30자리든 차이가 없다. 특히 대부분의 사람들이 비밀번호 하나로 여러 웹사이트에 로그인하니 한 곳이 뚫리면 다른 곳도 쉽게 털리게 된다.
결국 비밀번호는 아무리 길고 복잡하게 만들어봤자 일단 털리면 끝이다. 구조적인 문제인 것이다. 나만 알아야 하는 비밀을 로그인할 때마다 상대방에게 넘겨주는 과정을 거치니 악의적인 해커가 끼어드는 여지가 생긴다.
OTP는 어떨까?
요즘엔 2단계 인증도 많이 쓰인다. 비밀번호뿐 아니라 문자 메시지나 OTP 앱에 뜨는 여섯 자리 숫자를 추가로 입력한다. 크리덴셜 스터핑은 이 방식으로 거의 막을 수 있다.
하지만 OTP 번호도 결국 내가 입력해서 넘겨야 한다. 일정 시간(30초)마다 갱신될 뿐 넘겨준다는 구조는 같다.
- 해커가 가짜 사이트를 만들어 놓고 사용자가 잘못 들어와 비밀번호와 OTP를 입력하게 만든다.
- 악성 앱, 원격 제어 등 다양한 방법으로 가로챌 수 있다.
- 문자 인증의 경우는 유심 칩 복제 등으로 가로챌 수 있다.
OTP는 비밀번호보다 훨씬 안전하지만 약점을 보완할 뿐 없애지는 않는다.
소셜 로그인은 위험 지점을 옮겼다
“구글로 로그인”, “카카오로 로그인” 같은 소셜 로그인은 방식이 다르다. 대개 OAuth 로그인이라고 부르는 방식으로 웹사이트에 비밀번호를 만들지 않고 구글 같은 알려진 업체가 사용자를 대신 확인해준다.
로그인하려는 사이트가 내 비밀번호를 갖고 있지 않으니 그곳의 데이터가 털려도 유출될 비밀번호가 없다. (물론 개인정보가 털리는 건 다른 문제다.) 사이트마다 다르게 비밀번호를 만들 필요도 없다. 큰 회사의 보안 수준을 믿으면 되니 대체로 안심하게 된다.
하지만 위험을 없앤 게 아니라 위험 지점을 좀더 안전한 곳으로 옮긴 것이다.
- 구글 계정 하나가 뚫리면 그 계정으로 가입한 모든 사이트가 위험하다.
- 구글 로그인 방식이 여전히 비밀번호라면 가짜 구글 로그인 화면이나 다른 공격에 털릴 수 있다.
- 계정이 정지되거나 서비스에 장애가 나면 연동한 사이트 전부 못 들어간다.
소셜 로그인은 인증 방식을 바꾸긴 했지만 비밀번호나 다른 인증 정보를 넘기는 방식은 여전히 남아 있다.
그럼 패스키는 뭐가 다를까?
나는 패스키를 컴퓨터 로그인할 때 처음 봤는데 웹에서도 사용되는 걸 보고 'PC에서 사용하던 걸 어떻게 웹에서 쓰지?'라고 신기해했다. 알고 보니 플랫폼에 상관없는 표준이 정립돼 있고 웹에서도 WebAuthn으로 이미 수년 전에 API가 나와 있다.
윈도 로그인 방식 중 PIN이라는 여섯 자리 숫자를 입력하는 방식이 있는데 그게 패스키와 같은 방식이다. PIN은 기기 안의 보안 칩에 들어 있는 패스키를 사용하도록 여는 수단이며 웹사이트로 보내는 비밀번호가 아니다. 직접 기기를 가지고 있어야 하며 기기 밖으로 나가지 않기 때문에 안전하다. 또한 시도 횟수 제한이 있어서 몇 번 실패하면 기기가 잠기니 무작정 재시도할 수가 없다.
패스키를 등록하면 내 기기에는 개인키가, 웹사이트에는 짝이 되는 공개키만 저장된다. 로그인할 때는 웹사이트가 보낸 값을 내 기기가 개인키로 서명해 돌려준다.
그래서 앞서의 방법에서 발생하던 구조적인 문제가 풀린다.
- 서버로 보내는 비밀번호가 없으며 서명을 가로채더라도 다음 로그인에 재사용할 수 없다.
- 사이트마다 키가 다르니 한 곳에서 유출돼도 다른 곳에 쓸 수 없다.
- 사이트에는 공개키만 있으니 DB가 털려도 유출된 공개키만으로는 로그인할 수 없다.
- 패스키는 등록한 사이트의 주소와 묶여 있어 가짜 사이트에서는 동작하지 않는다.
마지막이 가장 큰 차이다. 비밀번호나 OTP는 사람이 속으면 같이 뚫리지만 패스키는 기기가 주소를 확인하기 때문에 사람이 속더라도 같은 패스키로 열리지 않는다.
기기를 갖고 있어야 하고 지문이나 PIN도 통과해야 하니 그 자체로 다중 인증이기도 하다.
현재는 패스키가 가장 추천된다
| 방법 | 무차별 대입 | 유출된 비밀번호 재사용 | 피싱 | 사이트 DB 유출 | 약점 |
|---|---|---|---|---|---|
| 짧은 비밀번호 | ✕ | ✕ | ✕ | ✕ | 기본적으로 보안에 취약 |
| 30자리 비밀번호 | ○ | △ | ✕ | △ | 무차별 대입 외에는 취약 |
| 비밀번호 + OTP | ○ | ○ | △ | △ | 실시간 피싱, 문자 가로채기 |
| 소셜 로그인 | ○ | △ | △ | ○ | 계정 하나 털리면 다른 곳도 위험 |
| 패스키 | ○ | ○ | ○ | ○ | 기기 분실, 복구 경로 |
현재 많이 권장되는 방법은 소셜 로그인 + 패스키 방식이다. 구글, 카카오 같은 인증 수단 자체에 패스키를 걸어놓으면 해당 인증을 사용하는 웹사이트들도 같이 안전해지는 효과가 있다. 소셜 로그인을 사용하지 않는 사이트라면 패스키를 우선 설정하되 그것도 안 되면 OTP 등의 2단계 인증, 그것도 안 되면 길이가 긴 비밀번호를 사용하도록 한다.
당장 내 휴대폰, 컴퓨터에서 패스키를 설정하자. 구글이나 삼성, 카카오 등에서 패스키 설정을 찾아 기기와 연동하면 된다. 인증 제공자마다 방식이 다르지만 이미 기기에 인증하고 있을 것이므로 설정은 간단하게 끝난다. 구글의 경우 도움말을 참고하면 되며 패스키 설정 페이지에서 등록할 수 있다.
FIDO 얼라이언스에 따르면 이미 2024년에 전 세계적으로 150억 개 이상의 계정이 패스키를 사용할 수 있다고 한다. 국내에서도 빠르게 확산하고 있다.
패스키의 약점
패스키는 비밀번호 같은 직접적인 인증 정보를 서버에서 내 기기로 옮긴 것이니 위험을 내 기기가 지게 된다. 핸드폰에만 패스키가 있는데 그걸 잃어버리면 로그인할 방법도 사라진다.
대부분의 사이트는 비밀번호 로그인과 문자 등을 사용한 계정/비밀번호 찾기가 있는데 이게 양날의 검이다. 핸드폰을 잃어버렸을 땐 이걸 사용해야 하지만 비밀번호가 서버에 저장되는 문제가 있다. 따라서 공격자가 패스키 대신 비밀번호의 취약점을 악용할 뒷문을 열어놓는 셈이 된다.
그래서 비밀번호는 없애고 패스키만 사용한다면 다음과 같이 대비해두는 게 좋다.
- 패스키를 한 기기에만 두지 않는다. 구글 비밀번호 관리자나 아이클라우드 키체인으로 동기화하거나 폰과 PC에 각각 등록한다.
- 복구 코드가 있으면 별도 보관한다. 서비스에서 복구 코드를 제공한다면 안전하게 보관해둔다.
복구 정보를 받을 복구용 메일과 전화번호는 당연히 현재 잘 사용 중인 것이어야 한다.
그래도 문제가 있다면 안드로이드나 아이폰에 따라 기기 자체의 보안, 복구 수단이 있으니 활용해야 한다.
정리
패스키가 확산되면서 그동안 다양하게 발전해온 인증 수단에 또 하나의 안전한 장치를 추가했다고 볼 수 있다. 다른 인증 수단과 달리 비밀 정보를 내 기기와 계정에만 넣어두기 때문인데 내 기기는 그만큼 더 중요한 물건이 된다.
오늘부터 패스키를 사용해보자. 그리고 패스키를 사용하는 핸드폰이나 노트북은 더욱 소중히 가지고 다니자.
댓글
댓글을 불러오는 중입니다.