Fast Identity Online (FIDO) & WebAuthn
The Core Philosophy of FIDO (Fast Identity Online)
Traditional authentication methods relied on the ‘Shared Secret’ model. In this model, both the user and the server must know the exact same password, and the server compares the value input by the user with the value it holds. This method has a fatal flaw: if the server is compromised, the user’s secret is stolen as well.
FIDO is a standard alliance formed to transition this model to a ‘Public Key Cryptography’ model.
- Server (Relying Party): Stores only the Public Key. It is safe even if this key is revealed publicly.
- User Device (Authenticator): Stores the Private Key in a secure hardware space (Secure Enclave, Trusted Platform Module) and never exposes it externally.
During authentication, instead of transmitting “My password is password123”, the user proves “I possess this key” by solving (signing) a Challenge sent by the server using their Private Key.
The Relationship between FIDO2, WebAuthn, and CTAP
FIDO2 is the latest set of standards designed to extend passwordless authentication to the web and mobile. FIDO2 consists of two core protocols.
1. WebAuthn (Web Authentication API)
- Definition: A standard web API defined by the W3C.
- Role: An interface that allows a web browser (or OS) to communicate with a web server (Relying Party) to handle authentication.
- Developer Perspective: It is implemented in the frontend by calling JavaScript functions like
navigator.credentials.create()(for registration) andnavigator.credentials.get()(for authentication).
2. CTAP (Client to Authenticator Protocol)
- Definition: A protocol defined by the FIDO Alliance.
- Role: A communication protocol between the user’s PC/Smartphone (Client) and an external security key/biometric device (Authenticator).
- How it works: When the browser receives an authentication request via WebAuthn, the PC sends a command to the YubiKey or fingerprint sensor via CTAP saying, “Please sign this data.”
- CTAP1 (formerly U2F): For second-factor authentication devices like USB dongles.
- CTAP2: Supports FIDO2 and provides features where the device itself can replace passwords (Passwordless).
Key Terminology
Here is a summary of terms that are often confusing for engineers when reading documentation.
- Relying Party (RP): The entity requesting FIDO authentication, i.e., the Web Server (Service Application). (e.g., Google, GitHub, corporate portals).
- User Agent / Client: The web browser (Chrome, Edge) or OS. It acts as an intermediary between the RP and the Authenticator.
- Authenticator:
- Platform Authenticator: Built-in authenticators like TouchID on laptops or Windows Hello. (The method mainly used by Passkeys).
- Roaming Authenticator (Cross-Platform): Portable external authenticators like YubiKeys or hardware wallets.
- User Verification (UV) vs User Presence (UP):
- UP (Presence): “Is a human present?” (e.g., simply touching the gold button on a YubiKey).
- UV (Verification): “Is it the correct person?” (e.g., Fingerprint scan, PIN entry). Passkeys generally require UV for security.
In summary, Passkey is an ‘implementation’ or ‘branding’ that maximizes convenience by syncing private keys to the cloud using FIDO2/WebAuthn technology, while Public Key Cryptography and the WebAuthn API operate underneath.
FIDO (Fast Identity Online)의 핵심 철학
기존의 인증 방식은 ‘공유 비밀(Shared Secret)’ 모델이었습니다. 사용자와 서버가 똑같은 비밀번호를 알고 있어야 하고, 사용자가 입력한 값을 서버가 가진 값과 비교하는 방식입니다. 이 방식은 서버가 해킹당하면 사용자의 비밀도 함께 털린다는 치명적인 약점이 있습니다.
FIDO는 이 모델을 ‘공개 키 암호화(Public Key Cryptography)’ 모델로 전환하기 위해 만들어진 표준 연합입니다.
- 서버(Relying Party): 오직 공개 키(Public Key)만 보관합니다. 이 키는 공개되어도 안전합니다.
- 사용자 기기(Authenticator): 개인 키(Private Key)를 안전한 하드웨어 공간(Secure Enclave, Trusted Platform Module)에 보관하고 절대 밖으로 내보내지 않습니다.
인증 시에는 “내 비밀번호는 password123이야”라고 전송하는 것이 아니라, 서버가 보낸 문제(Challenge)를 내 개인 키로 풀어서(서명하여) “나 이 키 가지고 있어”라고 증명하는 방식입니다.
FIDO2와 WebAuthn, CTAP의 관계
FIDO2는 비밀번호 없는 인증을 웹과 모바일로 확장하기 위한 최신 표준 세트입니다. FIDO2는 크게 두 가지 핵심 프로토콜로 구성됩니다.
1. WebAuthn (Web Authentication API)
- 정의: W3C가 제정한 표준 웹 API입니다.
- 역할: 웹 브라우저(또는 OS)가 웹 서버(Relying Party)와 통신하여 인증을 처리할 수 있게 해주는 인터페이스입니다.
- 개발자 관점: 프론트엔드에서 자바스크립트의
navigator.credentials.create()(등록),navigator.credentials.get()(인증) 함수를 호출하여 FIDO 인증을 수행합니다.
2. CTAP (Client to Authenticator Protocol)
- 정의: FIDO Alliance가 제정한 프로토콜입니다.
- 역할: 사용자의 PC/스마트폰(Client)과 외부 보안 키/생체인식 장치(Authenticator) 간의 통신 규약입니다.
- 작동 예시: 브라우저가 WebAuthn을 통해 인증 요청을 받으면, PC는 CTAP 프로토콜을 통해 YubiKey나 지문 인식 센서에 “이 데이터에 서명해줘”라고 명령을 내립니다.
- CTAP1 (구 U2F): USB 동글 같은 2차 인증 장치용.
- CTAP2: FIDO2를 지원하며, 장치 자체가 비밀번호를 대체(Passwordless)할 수 있는 기능을 제공합니다.
핵심 용어 정리 (Terminology)
엔지니어로서 문서를 읽을 때 혼동하기 쉬운 용어들을 정리합니다.
- Relying Party (RP): FIDO 인증을 요청하는 주체, 즉 웹 서버(서비스 애플리케이션)입니다. (예: Google, GitHub, 사내 포털)
- User Agent / Client: 웹 브라우저(Chrome, Edge) 또는 OS입니다. RP와 Authenticator 사이를 중개합니다.
- Authenticator (인증 장치):
- Platform Authenticator: 노트북의 TouchID, Windows Hello 처럼 기기에 내장된 인증기입니다. (Passkey가 주로 사용하는 방식)
- Roaming Authenticator (Cross-Platform): YubiKey, 하드웨어 지갑 등 기기를 옮겨 다닐 수 있는 외장 인증기입니다.
- User Verification (UV) vs User Presence (UP):
- UP (Presence): “사람이 있긴 한가?” (단순히 YubiKey의 금색 버튼을 터치함).
- UV (Verification): “그 사람이 맞는가?” (지문 인식, PIN 입력 등 신원 확인). Passkey는 보안을 위해 UV를 요구하는 것이 일반적입니다.
요약하자면, Passkey는 FIDO2/WebAuthn 기술을 사용하여 개인 키를 클라우드로 동기화해 편의성을 극대화한 ‘구현체’ 또는 ‘브랜딩’이며, 그 밑바닥에는 공개 키 암호화와 WebAuthn API가 작동하고 있습니다.