GitHub

auth의 새로운 표준, webauthn 을 사용해야하는 이유

hojun lee · 01/21/2025
커버이미지

구글이 쓰니까요

그렇다. 공룡 IT 기업들이 webauthn을 사용하기 시작했다.

구글 (Google) - 구글은 다양한 서비스에서 WebAuthn을 지원하여 보안을 강화하고 있습니다.

마이크로소프트 (Microsoft) - 마이크로소프트 계정에서도 WebAuthn을 통한 인증 방식을 제공합니다.

페이스북 (Facebook) - 보안 설정에서 WebAuthn을 지원합니다.

아마존 (Amazon) - 아마존 웹 서비스(AWS)에서도 WebAuthn을 활용한 인증 방식을 적용하고 있습니다.

깃헙 (github) - 로그인에 붙기 시작함

그렇다. webauthn을 알아야겠다면 알아보자

webauthn는 무엇인가

WebAuthn(Web Authentication)은 웹 표준으로, 사용자가 안전하게 인증할 수 있도록 하는 기술

가장 놀라웠던 건 비밀번호 따위가 없다는 것이다. 90일에 한번 씩 비밀번호 변경 요청은 나를 괴롭게했다. 아 이번엔 뭘로 바꾸지. WebAuthn 적용 후 손가락만 있으면 된다.

비밀번호 없는 인증: WebAuthn은 비밀번호 대신 생체 인식(지문, 얼굴 인식) 또는 보안 키와 같은 인증 방법을 사용하여 로그인할 수 있게 한다.

공개 키 암호화: 사용자가 등록한 장치에서 생성된 공개 키와 개인 키 쌍을 사용하여 인증을 수행한다. 서버는 공개 키를 저장하고, 로그인 시 개인 키로 서명된 인증 요청을 통해 사용자를 확인한다.

보안성: WebAuthn은 피싱 공격이나 비밀번호 유출의 위험을 줄이며, 사용자의 인증 정보를 안전하게 보호한다.

다양한 디바이스 지원: 데스크탑, 모바일 기기 등 다양한 장치에서 사용 가능하며, 여러 브라우저와 플랫폼에서 호환된다.

작동방식

WebAuthn은 등록과 인증 절차를 거친다.

등록: 사용자가 처음 로그인할 때, 장치에서 공개 키와 개인 키 쌍을 생성하고 서버에 공개 키를 등록한다.

인증: 사용자가 다시 로그인할 때, 서버는 사용자의 공개 키를 사용해 인증 요청을 생성하고, 사용자는 개인 키로 서명하여 응답한다.

WebAuthn은 주로 클라이언트-서버 인증 프로세스를 다루므로, 데이터베이스와의 직접적인 통합보다는 애플리케이션 설계에서의 통합이 중요하다.

DB와의 연계

  • EdgeDB: EdgeDB는 현대적인 데이터베이스와 사용자 인증 시스템을 통합할 수 있는 기능을 제공하며, WebAuthn을 활용한 인증 방법을 지원할 수 있다.
  • PostgreSQL: EdgeDB는 PostgreSQL을 기반으로 하므로, PostgreSQL의 보안 확장을 통해 WebAuthn을 사용할 수 있다.
  • MongoDB: MongoDB는 다양한 인증 메커니즘을 지원하며, WebAuthn을 구현할 수 있는 애플리케이션 레이어와 함께 사용 가능하다.
  • MySQL: MySQL은 플러그인을 통해 다양한 인증 방식을 지원하며, WebAuthn을 적용할 수 있다.

WebAuthn 적용 장점

**더 이상 비밀번호가 필요 없습니다.**😂

개인/공개 키 기반 인증: 비밀번호 기반 인증에 비해 훨씬 더 안전한 사용자 인증 방법으로, 기본적으로 비대칭 암호화를 사용

피싱 저항: WebAuthn은 인증 장치에 도메인 이름이 저장되기 때문에 피싱 공격에 저항력이 있습니다. 이를 통해 해커가 웹사이트를 스푸핑하여 자격 증명에 접근하기가 더 어려움

DB에 공개 데이터 저장: 이 흐름에서는 공개 데이터만 데이터베이스에 저장됩니다. 비밀번호와 같은 민감한 데이터를 저장할 필요가 없음

세밀한 제어: 흐름의 일부로 원하는 사용자 상호작용을 제어할 수 있습니다. 예를 들어, 특정 하드웨어 장치를 요구할 수 있음( 특정 아이폰이나 맥, 구글 패스키 등등)

W3C 권장 사항: 이는 모든 주요 브라우저와 장치에서 지원되어야 함을 의미합니다. 표준입니다!

webauthn vs Oauth2 vs two-factor authentication(2FA)

WebAuthn은 비밀번호 없는 인증 기술로, 생체 인식이나 보안 키를 사용하여 안전한 로그인을 제공합니다. OAuth 2.0은 다양한 서비스에 안전하게 접근할 수 있도록 권한을 부여하는 프로토콜입니다. 2FA는 사용자 인증을 강화하기 위한 방법으로, 비밀번호 외에 추가적인 인증 요소를 요구합니다.

표준입니다.

지문인식 한 번으로 로그인이 되는 마법을 구현해보자. 일단 edgeDB 의 auth를 알아보고, webauthn을 restAPI 형태가 아닌 socket 통신으로 client-back 을 연결 해볼 것이다.

sveltekit <-> socketIO <-> back