패스키가 무엇인지, 어떻게 작동하는지, 그리고 왜 비밀번호보다 더 안전한 인증 방식인지 소개합니다.
비밀번호는 수십 년 동안 온라인 인증의 약점이었습니다. 비밀번호는 재사용될 수 있고, 추측될 수 있으며, 도난당할 수 있고, 피싱될 수 있고, 유출될 수 있으며, 스프레이 공격과 스터핑 공격에 악용될 수 있고, 악성코드에 의해 탈취될 수도 있습니다. 패스키는 이러한 문제 중 많은 부분을 완전히 제거하는 최초의 대중적 인증 기술 중 하나이며, 여전히 비밀번호에 의존하는 모든 웹사이트는 이를 진지하게 지원해야 합니다.
이 블로그 글을 읽는 사람이라면 누구나 왜 비밀번호가 문제인지 이해하고 있을 것이라고 생각하지만, 패스키가 왜 그렇게 큰 개선인지 배경을 설명하기 위해 여기서 개요를 짚고 넘어가겠습니다. 사실 비밀번호는 번거로울 수 있고, 우리는 그 불편함과 수십 년 동안 싸워 왔습니다. 우리는 비밀번호 강도 요구사항, 비밀번호 재사용, credential stuffing, password spraying, 데이터베이스 유출, 너무나 쉬운 피싱, 그리고 최근 급증한 정보 탈취형 악성코드에 맞서야 했습니다. 또한 비밀번호를 그나마 버틸 만하게 만들기 위해 salting, hashing, 유출된 비밀번호 검사, 더 강한 비밀번호 정책 같은 방어 계층을 쌓아야 했습니다. الحقيقة는, 우리가 비밀번호를 오랫동안 사용해 온 이유는 그것이 훌륭해서가 아니라 당시 우리가 가진 것 중 가장 나은 선택이었기 때문입니다.
저는 2013년에 이미 비밀번호 보안에 대해 처음 글을 썼고(link), 훨씬 최근에는 Report URI에서 비밀번호를 다루는 방식에 더욱 날카로운 초점을 맞춰야 했습니다. 저는 지난 몇 달 사이 Boosting password security! Pwned Passwords, zxcvbn, and more!와 Under Attack: Responding to the Rise of Info-Stealer Threats에서 이 내용을 다뤘습니다. 비밀번호는 계속해서 문제입니다! 2FA는 도움이 되었고, 수년 동안 비밀번호에 꼭 필요한 버팀목 역할을 해왔지만, 피싱 문제를 해결해 주지는 못합니다. 이는 아마도 비밀번호와 현 세대 2FA가 가진 가장 큰 위험 중 하나이며, 제 좋은 친구 Troy Hunt가 지난해 자신의 password and TOTP phished 사건을 통해 직접 겪었습니다. 우리에게는 더 나은 것, 훨씬 더 나은 것이 필요합니다.
아주 단순하게 말하면, 패스키는 사용자를 인증하는 또 다른 방법입니다. 웹사이트가 저를 인증하고 로그인시키기 위해 사용자 이름과 비밀번호를 요구할 수 있는 것처럼, 대신 패스키를 사용할 수도 있으며, 여기에는 상당한 장점이 있습니다. 핵심적으로 패스키는 공개 키와 개인 키로 이루어진 암호학적 키 쌍입니다. 이름이 의미하듯 공개 키는 공개되어 웹사이트와 공유될 수 있지만, 개인 키는 비공개로 유지되며 사용자의 기기 안에 안전하게 저장되고 누구와도 공유되지 않습니다. 많은 경우 이 개인 키는 여러분이 이미 기기나 비밀번호 관리자를 잠금 해제할 때 사용하는 방식, 예를 들어 생체 인증, PIN, 또는 로컬 기기 잠금 해제 방식으로 보호됩니다.
패스키가 어떻게 작동하는지, 즉 패스키를 생성하는 과정과 그 패스키를 사용해 계정에 접근하는 과정 모두를 개괄적으로 설명하는 것은 놀랄 만큼 쉽습니다. 아래는 전체 과정을 보여주는 다이어그램입니다.
첫 번째 단계는 등록(Registration)이라고 합니다. 이 단계에서 키 쌍을 생성하고, 개인 키를 기기에 안전하게 저장하며, 해당 웹사이트와 공개 키를 공유합니다. 그러면 웹사이트는 이 공개 키를 여러분의 계정에 연결해 저장하여 그것이 여러분의 것임을 알 수 있게 됩니다. 이제 패스키 등록이 완료되었고 사용할 준비가 끝났습니다!
두 번째 단계는 인증(Authentication)입니다. 이 단계에서는 이전에 등록한 패스키를 사용해 자신이 누구인지 증명합니다. 웹사이트는 여러분에게 challenge를 발행하고, 여러분은 그 challenge를 개인 키로 서명해야 합니다. 그런 다음 이 서명된 challenge를 웹사이트에 반환하면, 웹사이트는 공개 키로 그 서명을 검증할 수 있습니다. 이것은 웹사이트가 통신하고 있는 상대가 해당 계정과 연결된 개인 키를 사용할 수 있음을 증명합니다. 개인 키는 여러분의 기기 또는 패스키 제공자에 의해 보호되므로, 웹사이트는 자신이 실제로 여러분과 통신하고 있다는 강력한 근거를 얻게 됩니다.
패스키는 비밀번호와 비교했을 때 여러 측면에서 뛰어나며, 각각이 충분히 설득력이 있기 때문에 여기서 주요 장점들을 모두 이야기해 보겠습니다.
의심의 여지 없이 이것이 패스키 사용의 가장 큰 장점일 것입니다. 패스키는 피싱에 매우 강합니다. 여러분은 실수로 비밀번호를 넘겨줄 수 있고, 실수로 6자리 TOTP 코드를 넘겨줄 수도 있지만, 실수로 패스키를 넘겨주도록 속을 수는 없습니다. 패스키를 등록하여 기기에 저장하면, 기기는 그 패스키를 사용할 수 있는 origin에 묶어 둡니다. 즉, 여러분이 report-uri.com에서 패스키를 만들었는데, 이후 우리를 사칭하며 여러분의 자격 증명을 노리는 피싱 사이트 rep0rt-ur1.com에 들어가게 되더라도, 여러분의 기기는 올바른 위치가 아니기 때문에 단순히 패스키 사용을 허용하지 않습니다. 이제 기기는 패스키를 어디에서 사용할 수 있는지 알고 있으며, 다른 어떤 곳에서도 사용할 수 없게 합니다. 이는 비밀번호에는 제공할 수 없는 보호입니다.
누구나 원하면 약한 비밀번호를 만들 수 있다는 사실을 알고 있지만, 약한 패스키는 만들 수 없습니다. 패스키 생성은 기기가 처리하기 때문에, 항상 강력한 패스키가 생성된다는 점을 신뢰할 수 있으며, 약한 비밀번호 사용이 초래하는 것과 같은 위험을 피할 수 있습니다. 여러분은 결코 약한 패스키를 갖지 않기 때문에, 누군가가 약한 비밀번호를 추측하듯 여러분의 패스키를 추측해 내는 일은 없습니다.
서로 다른 서비스에서 같은 비밀번호를 재사용하는 것을 막는 장치는 없지만, 여러분의 기기는 등록하는 각 웹사이트마다 새롭고 고유한 패스키를 생성해야 합니다. 이는 서로 다른 서비스 간에 공유되는 패스키가 없다는 뜻이며, 또 하나의 위험 범주가 제거됩니다.
주로 앞의 두 가지 이유의 결과로, 공격자는 자신이 접근해서는 안 되는 계정에 접근하려고 시도할 때 이 두 가지 흔하고 효과적인 전략을 사용할 수 없게 됩니다. 더 이상 약하고/또는 재사용된 자격 증명이 없으므로, 꽤 심각한 문제들과 작별할 수 있습니다.
계정에 패스키를 추가할 때 웹사이트는 데이터베이스에 공개 키를 저장해야 합니다. 우리가 앞서 언급했고 이름에서도 드러나듯, 공개 키는 비밀이 아닙니다! 즉 데이터베이스 침해가 발생하더라도 추가로 손상될 민감한 정보가 들어 있지 않으며, 공격자가 얻게 되는 것은 사용자의 공개 키뿐입니다. 개인 키는 그것을 생성한 사용자의 기기 안에 안전하게 남아 있습니다.
패스키는 큰 진전이지만, 마법은 아닙니다. 패스키는 많은 비밀번호 시대의 위험, 특히 피싱과 자격 증명 재사용을 제거하지만, 동시에 새로운 구현상의 문제와 위협 모델 관련 질문도 가져옵니다. 저는 다음 글에서 그중 하나를 훨씬 더 자세히 다룰 예정입니다.
우리는 최근 Report URI에서 패스키 지원을 출시했으며, 이에 대해서는 여기에서 읽어볼 수 있습니다: Launching Passkeys support on Report URI! 또한 우리의 패스키 구현에 대해 침투 테스트도 진행했습니다. Bringing in the experts; Having our Passkeys implementation Security Tested. 보시다시피, 우리는 패스키를 꽤 진지하게 다루고 있습니다!
그와 함께, 패스키 사용이 가져오는 새로운 고려사항과 위험도 있으며, 저는 방금 Security considerations when using Passkeys on your website에서 그 내용을 다루기 시작했습니다. 그 블로그 글은 이 문제에 대한 우리의 백서로도 연결되지만, 저는 앞으로 며칠 내에 새로운 정보를 포함한 더 자세한 블로그 글도 작성할 예정이니, 게시될 때 알림을 받을 수 있도록 꼭 구독해 주세요!
이 글이 즐거우셨거나 도움이 되었나요?
☕️ 감사의 뜻으로 커피 한 잔 사주기를 고려해 주세요!
🔔 글을 게시할 때 무료 알림을 구독하세요!