From sgcWebSockets 2025.4.0 Enterprise, the WebAuthn Protocol is supported (currently in BETA).
WebAuthn(웹 인증)은 웹에서 안전한 비밀번호 없는 인증을 활성화하기 위해 W3C(World Wide Web Consortium)와 FIDO Alliance가 개발한 웹 표준이에요. 더 넓은 FIDO2 프레임워크의 일부이며 피싱, 자격 증명 스터핑 등의 공격에 자주 취약한 전통적인 비밀번호 의존도를 줄이는 것을 목표로 해요.
핵심적으로 WebAuthn은 공개 키 암호화를 사용해 사용자를 인증해요. 사용자 이름과 비밀번호 대신 사용자가 웹 애플리케이션(신뢰 당사자)에 고유한 공개-개인 키 쌍을 등록해요. 개인 키는 하드웨어 보안 키, 스마트폰, 내장 생체 인식 디바이스 같은 인증자에 안전하게 저장되고, 공개 키는 서버에 저장돼요.
인증 시 서버가 사용자의 개인 키로 서명해야 하는 챌린지를 발급해요. 서명된 챌린지가 반환되고 저장된 공개 키로 검증되어 응답의 무결성과 출처를 모두 보장해요. 이 접근 방식은 자격 증명이 가로채이거나 재사용되는 것을 방지해요.
WebAuthn은 다양한 인증자와 디바이스를 지원해 개발자와 사용자 모두에게 유연해요. PIN이나 생체 인식 같은 다른 요소와 결합하면 다단계 인증(MFA)도 활성화해 사용성을 희생하지 않고 보안을 크게 향상시켜요.
지원 증명 형식
다양한 증명 형식이 이 데이터를 구조화하고 검증하는 방법을 정의해요. 일반적으로 사용되는 형식으로는 android-key, packed, fido-u2f, apple, none 등이 있어요. 기본적으로 모든 증명 형식이 활성화되어 있어요. 아래에서 지원되는 증명 형식 목록을 확인할 수 있어요:
- NoneAttestation: 이 경우 증명 데이터가 반환되지 않아요. 디바이스 식별자 노출을 방지해 사용자 개인 정보를 우선시해요. 디바이스 출처에 관심 없는 애플리케이션에서 일반적이에요.
- PackedAttestation: 많은 인증자가 사용하는 유연하고 간결한 형식이에요. 인증자가 증명 인증서와 서명을 반환해요. 전체 증명: 벤더 제공 키와 인증서로 서명 또는 자체 증명: 자격 증명 개인 키로 서명할 수 있어요. 다양한 플랫폼(예: YubiKey, Windows Hello)에서 가장 널리 사용돼요.
- TPMAttestation: TPM(Trusted Platform Module)이 있는 디바이스에서 사용해요. 증명은 TPM의 키로 서명되며 인증서 체인을 포함해요. TPM 칩이 있는 엔터프라이즈 데스크톱/노트북(예: Windows 시스템)에서 사용해요.
- AndroidKeyAttestation: Android Keystore를 사용하는 Android 디바이스에서 사용해요. 키는 하드웨어에서 생성되고 증명에는 디바이스 제조업체가 발급한 인증서 체인으로 서명된 정보가 포함돼요. 하드웨어 기반 키 저장소(TEE 또는 StrongBox)가 있는 Android 폰에서 사용해요.
- AppleAttestation: Touch ID 및 Face ID 같은 Apple 플랫폼 인증자에서 사용해요. 증명은 Apple의 내부 API에서 생성되며 특수 인증서 형식을 포함해요. Apple 생체 인식을 사용하는 Safari에서 사용해요.
- FidoU2FAttestation: FIDO U2F 인증자가 사용하는 레거시 증명 형식이에요. U2F 호환 인증서와 서명을 반환해요. FIDO U2F를 지원하는 구형 보안 키(예: 초기 YubiKey)에서 사용해요.
WebAuthn 흐름
- WebAuthn 등록: 서버가 챌린지를 생성하고 클라이언트에 보내면 클라이언트는 인증자(예: 보안 키 또는 생체 인식 디바이스)를 사용해 키 쌍을 생성해요. 공개 키가 다시 보내지고 서버가 향후 인증을 위해 저장해요.
- WebAuthn 인증: 서버가 클라이언트에 챌린지를 보내면 클라이언트는 인증자에 저장된 이전에 등록된 개인 키로 서명해요. 서명된 응답이 저장된 공개 키로 검증되어 사용자 신원을 확인해요.

WebAuthn 서버 컴포넌트
TsgcWSAPIServer_WebAuthn 컴포넌트는 WebAuthn 신뢰 당사자 서버를 구현해 웹 애플리케이션에서 비밀번호 없는 인증을 활성화하는 간단하지만 강력한 솔루션을 제공해요. WebAuthn 애플리케이션은 서버 측 등록과 인증을 처리하는 WebAuthn 서버와 일반적으로 JavaScript 애플리케이션인 클라이언트 측 애플리케이션으로 구성돼요.아래에서 WebAuthn 서버의 간단한 설정을 확인할 수 있어요:
// ... create the servers
HTTPServer := TsgcWebSocketHTTPServer.Create(nil);
WebAuthnServer := TsgcWSAPIServer_WebAuthn.Create(nil);
WebAuthnServer.Server := HTTPServer;
// ... enable for testing
WebAuthnServer.EndpointsOptions.Test.Enabled := True;
// ... WebAuthn options
WebAuthnServer.WebAuthnOptions.RelyingParty := 'localhost';
// ... bindings
Server.Port := 443;
HTTPServer.SSLOptions.Port := 443;
HTTPServer.Bindings.Clear;
With HTTPServer.Bindings.Add do
begin
Port := 443;
IP := '127.0.0.1';
end;
HTTPServer.SSLOptions.Certificate := 'sgc.pem';
HTTPServer.SSLOptions.KeyFile := 'sgc.pem';
HTTPServer.SSL := True;
// ... active
HTTPServer.Active := True;
Delphi WebAuthn 서버 데모
The following Delphi WebAuthn Demo shows how to register a new credential and use after to authenticate the user.
