
서론
최근 아르카디아 프로젝트의 Oauth 인증 서비스를 구현해야 할 일이 생겼어요.
해당 인증 서비스에 Passkey를 적용시키기로 했고, 이를 위해 Passkey에 대해 공부를 한 내용을 정리했습니다.
패스키란?
패스키는 비밀번호를 대체하기 위해 등장한 인증 방식이에요. FIDO(Fast IDentity Online) Alliance에서 개발했고, 패스키를 사용한다면 웹과 어플리케이션 등에 비밀번호 없이 로그인할 수 있어요.
FIDO Alliance는 2012년에 설립된 산업 협회로, 온라인 인증의 문제를 해결하기 위해 다양한 기업들이 모여 만든 단체에요. 이들은 패스워드 없는 인증 기술을 개발하고 표준화하는 것을 목표로 하고 있죠.
최근엔 구글, 애플, 마이크로소프트 등 해외 기업부터 네이버, 카카오, 토스 등의 국내 기업들도 패스키를 통한 로그인 옵션을 지원하고 있어요. 특히 애플의 경우 iOS 16부터 패스키를 기본적으로 지원하기 시작했어요. 구글은 2023년 10월부터 모든 구글 계정에서 패스키 사용을 기본으로 설정했고, 이는 전 세계적으로 패스키 도입을 가속화하는 계기가 되었어요.
사용하는 이유
개발자의 입장에서, 사용자가 누구인지 확인하는 것은 매우 중요해요. 특히 사용자의 개인정보를 많이 다루는 은행 등의 플랫폼일수록 더더욱 중요해질 거에요.
그동안 대부분의 개발자들은 사용자가 누구인지 확인하기 위해 "비밀번호"라는 수단을 사용해 왔어요. 사용자 본인만이 아는 문자열을 이용해 사용자가 누구인지 확인하는 방식이에요.
하지만 비밀번호를 통한 로그인은 절대 완벽하지 않아요. 누구나 언제든 비밀번호를 잊을 수 있고, 다른 사람이 도용하기 매우 쉬운 인증 수단이니까요. 실제로 한 연구에 따르면, 사용자의 51%가 동일한 비밀번호를 여러 서비스에서 재사용하고 있다고 해요. 이는 한 서비스에서 비밀번호가 유출되면 다른 모든 서비스도 위험해질 수 있다는 것을 의미해요.
이론적으로 사용자의 비밀번호를 훔치는 방법은 정말 많이 있어요:
- 키로거를 통한 키보드 입력 탈취
- 피싱 사이트를 통한 비밀번호 수집
- 무차별 대입 공격(Brute Force Attack)
- 레인보우 테이블을 이용한 해시값 역추적
- 사회공학적 공격을 통한 비밀번호 획득
- 데이터베이스 유출 시 해시된 비밀번호 복구
특히 사회공학적 공격의 경우, 최근에는 AI 기술의 발전으로 더욱 정교해지고 있어요. 딥페이크 기술을 이용한 화상 통화나, AI가 생성한 피싱 이메일은 일반 사용자가 진위를 구분하기 매우 어려워요.
패스키는 이러한 문제들을 해결하기 위해 개발되었어요.
패스키는 사용자의 기억에 의존하는 대신 사용자의 생체 정보와 기기 정보에 의존해요. 지문인식, Face ID, Windows Hello 등 다양한 생체 인증 방식을 지원하죠. 이러한 생체 정보는 각 기기에 안전하게 저장되며, 네트워크를 통해 전송되지 않아 해킹의 위험이 매우 낮아요.
패스키의 사용자는 휴대폰, 노트북 등 생체 인증이 가능한 기기들을 가지고 있기만 하면 간단한 생체 인증 만으로도 인증을 진행할 수 있어요. 이는 특히 모바일 환경에서 매우 편리한데, 복잡한 비밀번호를 작은 화면에 입력할 필요가 없기 때문이에요.
또한, 기기의 정보와 사용자의 생체 정보가 필요하기에 제 3자가 인증 정보를 탈취하는 것이 훨씬 어려워질 거에요. 실제로 패스키는 피싱이나 중간자 공격(Man-in-the-Middle Attack)에도 안전하도록 설계되어 있어요. 각 인증 시도마다 새로운 암호화 키가 생성되므로, 이전 인증 정보를 재사용하는 것도 불가능해요.
패스키의 동작 방식
사용자가 패스키를 통한 인증 방식을 활성화하기 위해선, 먼저 두 가지의 키를 생성해야 해요.
이는 공개 키(Public Key)와 프라이빗 키(Private Key) 두 가지로 구분되며 공개 키는 서버가, 프라이빗 키는 사용자의 디바이스가 보관할 거에요. 이때 프라이빗 키는 디바이스의 안전한 저장소(iOS의 Keychain, Android의 Keystore 등)에 암호화되어 저장돼요. 이러한 저장소들은 하드웨어 수준의 보안을 제공하며, 루팅되거나 탈옥된 기기에서도 접근이 제한돼요.
인증 과정은 다음과 같이 진행돼요:
- 사용자가 로그인을 시도하면 서버는 랜덤한 문자열(Challenge)을 생성해요
- 이 Challenge를 클라이언트로 전송해요
- 클라이언트는 사용자의 생체 인증을 통해 프라이빗 키에 접근해요
- 프라이빗 키로 Challenge를 암호화(서명)해요
- 암호화된 Challenge를 서버로 전송해요
- 서버는 저장된 공개 키로 서명을 검증해요
- 검증이 성공하면 로그인이 완료돼요
이 과정에서 사용되는 암호화 알고리즘은 ECDSA나 RSA와 같은 강력한 비대칭 암호화 방식이에요. 이러한 알고리즘들은 수학적으로 안전성이 증명되어 있으며, 현재의 컴퓨팅 파워로는 해독이 사실상 불가능해요.
이것이 패스키의 기본적인 동작 방식이에요. 공개키 암호화 방식을 사용하기 때문에 중간에 데이터가 탈취되더라도 프라이빗 키 없이는 인증을 복제할 수 없어요.
단점
그런데 위와 같은 방식이라면, 패스키를 사용했을 때의 단점도 쉽게 드러나게 돼요.
- 기기를 잃어버린다면 패스키를 다시 발급해야 한다.
패스키를 유지하기 위한 프라이빗 키를 보관하는 기기를 잃어버렸다면, 이후의 인증은 완전히 불가능할 거에요.
키를 잃어버렸을 때 새로운 기기에서 해당 패스키로 로그인하는 것이 불가능하기 때문이에요. 이를 해결하기 위해 대부분의 서비스들은 백업 인증 수단(이메일, SMS 등)을 함께 제공하고 있어요. 애플과 구글 같은 기업들은 클라우드 서비스를 통해 패스키를 백업하는 기능도 제공하고 있죠.
- 생체 인증이 가능한 기기가 반드시 필요하다.
패스키를 사용하기 위해선 생체 인증이 반드시 가능해야 해요.
윈도우 데스크탑 환경과 같이 일반적으로 생체 인증 장비가 없는 디바이스에선 생체 인증을 하기 위해 별도의 인증 기기(USB 보안키, 지문인식기 등)를 구입해야 해요. 이는 추가적인 비용이 발생할 수 있으며, 기기를 항상 휴대해야 하는 불편함이 있어요.
- 호환성 문제
모든 웹사이트와 애플리케이션이 패스키를 지원하는 것은 아니에요. 특히 레거시 시스템의 경우 패스키 도입을 위해선 상당한 수정이 필요할 수 있어요. 또한 오래된 브라우저나 운영체제에서는 패스키 기능을 사용할 수 없을 수도 있어요.
- 사용자 교육의 필요성
패스키는 기존의 비밀번호 방식과는 완전히 다른 개념이에요. 많은 사용자들이 새로운 인증 방식에 적응하는 데 시간이 필요할 수 있으며, 이는 서비스 제공자 입장에서 추가적인 교육과 지원이 필요함을 의미해요.
정리
Passkey는 기존의 비밀번호라는 인증 시스템을 대체하기 위해 만들어진 인증 수단이에요. 생체 인증과 공개키 암호화를 결합해 더 안전하고 편리한 인증 방식을 제공하며, 점차 더 많은 서비스들이 이를 도입하고 있어요.
비록 몇 가지 단점이 있지만, 보안성과 사용자 경험 측면에서의 장점이 더 크기 때문에 앞으로도 패스키의 사용은 계속해서 증가할 것으로 예상돼요. 특히 대형 기술 기업들의 적극적인 도입과 지원으로, 패스키는 머지않아 우리의 일상적인 인증 수단이 될 것으로 기대됩니다.