LINE Corporation이 2023년 10월 1일부로 LY Corporation이 되었습니다. LY Corporation의 새로운 기술 블로그를 소개합니다. LY Corporation Tech Blog

Blog


FIDO at LINE: FIDO2 서버를 오픈 소스로 공개했습니다

안녕하세요 Security R&D팀에서 FIDO(Fast Identity Online) 개발 담당 엔지니어로 일하고 있는 박경준입니다. 지난번에 발행한 FIDO at LINE: 패스워드 없는 세상으로의 첫 발걸음에 이어서, 이번 글에서는 FIDO2에 대해서 간략히 소개하고 올해 3월 초에 FIDO Alliance에서 주최한 상호 운용성 테스트 이벤트에 참여한 후기를 공유한 뒤, 이번에 오픈 소스로 공개하는 LINE FIDO2 서버에 대해 소개하려고 합니다. 

FIDO2 소개

현재 FIDO에는 UAF(Universal Authentication Framework)와 U2F(Universal 2nd Factor), FIDO2라는 세 가지 표준이 공존하고 있는데요. 최근에 FIDO2라는 새로운 표준이 성공적으로 안착하는 분위기입니다. FIDO2가 다른 표준들과 다른 점은 무엇일까요? 어떤 이유로 등장했을까요? 세 가지 표준에 대해 간단히 살펴보겠습니다. 

UAF

FIDO UAF는 모바일 앱(Android, iOS)에서 패스워드 없이 생체나 PIN 같은 인증 수단으로 사용자가 인증할 수 있도록 만든 표준입니다. 유스 케이스가 모바일 앱에 한정되어 있으며, 현재 Android나 Apple iOS와 같은 주요 플랫폼에서 네이티브 앱을 위한 UAF API를 지원하고 있지 않습니다.

U2F

FIDO U2F는 통상 아이디와 패스워드로 한 번 인증한 뒤 보안을 강화하기 위해 인증 키가 포함된 하드웨어를 이용해 추가로 인증(2FA, Two-factor authentication)할 수 있도록 만든 표준입니다. Google과 Facebook, GitHub 등에서 도입해 사용하고 있는데요. 주로 높은 보안 수준이 필요한 특정 사용자나 내부 직원 한정으로 사용하고 있습니다.

FIDO2

FIDO2는 이 두 가지 표준을 통합하고 기존 모바일 환경뿐 아니라 웹 등 어디에서나 사용할 수 있도록 개선한 표준입니다. 웹 브라우저를 위한 WebAuthn1과 인증자(Authenticator)를 위한 CTAP(Client to Authenticator Protocol)이라는 두 가지 표준으로 구성되어 있습니다. 현재 다양한 웹 브라우저에서 WebAuthn API를 지원하고 있습니다. 웹 브라우저가 클라이언트 역할을 제공하기 때문에, 인증을 제공하려는 서비스에서는 웹 브라우저에서 제공하는 API를 이용해 보다 쉽게 여러 환경에서 인증 서비스를 제공할 수 있고, 사용자는 보다 편리하고 안전하게 인증할 수 있습니다. 또한 U2F의 경우에는 CTAP2 표준이 하위 호환성을 지원하기 때문에 인증 키가 포함된 하드웨어를 이용한 기존 인증 방식을 그대로 사용할 수 있습니다. 현재 WebAuthn 표준을 지원하는 브라우저 현황은 아래와 같습니다. 

FIDO 상호 운용성 테스트

FIDO Alliance에서는 1년에 4번씩 정기적으로 상호 운용성 테스트를 진행합니다. 상호 운용성 테스트를 통과하면 FIDO 표준을 준수해 구현했다는 공식 인증을 받을 수 있습니다. 

FIDO2 상호 운용성 테스트의 경우, FIDO2 서버와 인증자 벤더들이 각자 구현한 제품들이 잘 연동되는지, 또한 표준에 맞게 잘 구현됐는지 확인하기 위해 Chrome과 Edge, FireFox 등의 브라우저 WebAuthn API를 이용해 테스트를 진행합니다. 올해 3월에는 코로나의 영향으로 버추얼 방식(원격 리모트 환경)으로 진행했는데요. 테스트에 참여한 인증자 벤더들은 정해진 시간에 웹캠을 켜고 테스트에 참여한 다른 서버 벤더들의 FIDO2 서버와 연동해 등록과 인증이 문제없이 잘 동작하는지 검증받았습니다. LINE FIDO2 서버는 오픈 소스로 공개하기 전에 표준에 맞게 잘 구현됐는지 확인하기 위해 FIDO2 서버 테스트에 참여했습니다.

2021년 상호 운용성 테스트 일정

2021년 상호 운용성 테스트는 21년 8월 현재까지 다음과 같은 일정으로 진행됐습니다. 

  • 2021년 3월 8~12일
  • 2021년 6월 21~25일

상호 운용성 테스트 진행 과정

상호 운용성 테스트는 '등록 → NDA 교환 → 자가 적합성 테스트 수행 후 결과 제출 → 테스트 준비 → 테스트 진행 → 결과 공유 및 테스트 통과 인증서 발급'의 순서로 진행됩니다. 각 과정에 대해 간략하게 살펴보겠습니다.

테스트 등록 후 NDA 교환

테스트를 등록하는 방법과 등록한 뒤 NDA를 교환하는 것과 관련된 내용은 아래 페이지에서 상세히 확인할 수 있습니다.

자가 적합성(conformance) 테스트

테스트를 등록한 뒤 상호 운용성 테스트 일정 2주 전까지 자가 적합성 툴의 테스트 케이스(1.6.14 버전의 경우 162개의 테스트 케이스)를 통과한 결과를 제출해야 본 테스트에 참가할 수 있습니다. 자가 적합성 툴은 아래 링크에서 요청할 수 있습니다.

서버의 경우, 아래 기준에 맞춰서 API를 제공해야 합니다.

자가 적합성 툴을 통한 서버 구현 테스트는 테스트 전용으로 구현된 인증자와 연동해 수행합니다. 테스트와 관련된 설명은 아래 링크를 참고하시기 바랍니다.

테스트 준비

테스트하기 위해서는 아래 링크를 참고해 fido2-interop-webapp 페이지를 만들어야 합니다. 다른 벤더들의 인증자는 이 페이지와 연동해 테스트를 진행합니다.

이후 외부 망에 배포할 FIDO2 RP(Relying Party) 서버의 URL을 FIDO Alliance에 공유하고, FIDO Alliance에서 이메일로 전달해 준 다른 벤더들의 인증자 메타데이터를 데이터베이스에 추가합니다.

테스트 진행

서버는 배포 후 테스트 기간 동안 이슈가 발생하지 않는다면 직접 수행해야 하는 것은 없습니다. 저희는 하루에 한두 번씩 인증자 벤더들과 연동했던 로그를 확인하며 이슈가 없었는지 정도만 확인했습니다.

결과 공유 및 테스트 통과 인증서 발급

결과는 테스트를 진행한 다음 주 월요일에 FIDO Alliance에서 이메일로 전달해 줍니다. 인증서 발급 비용은 아래 링크를 참고하시기 바랍니다.

LINE FIDO2 서버 상호 운용성 테스트 통과

LINE FIDO2 서버는 큰 이슈 없이 이번에도 상호 운용성 테스트를 통과했습니다. 공식 인증은 이전에 이미 받았으므로 이번에는 인증서를 신청하지 않았습니다(참고).

오픈 소스로 공개하는 LINE FIDO2 서버 소개

LINE Security R&D 팀은 FIDO2를 보다 널리 보급하고 더 나은 소프트웨어로 성장시키기 위해 LINE FIDO2 서버를 오픈 소스로 공개하기로 결정했습니다. 이런 활동이 궁극적으로 FIDO 생태계의 발전에 기여할 것이라고 기대합니다.

저희가 공개한 오픈 소스의 GitHub 주소는 다음과 같습니다.

라이선스는 Apache-2.0이며 공개하는 모든 모듈은 현재 기준으로 아래와 같은 환경에서 동작합니다.

  • Spring Boot 2.4.3
  • Gradle 6.8.3
  • Java 1.8

공개하는 모듈은 크게 세 가지로 나눌 수 있습니다.

  • LINE FIDO2 서버: FIDO2 표준을 준수한 서버 애플리케이션입니다.
  • FIDO2-spring-boot-starter, FIDO2-spring-boot-starter 데모: LINE FIDO2 서버 애플리케이션을 Spring Boot 환경에서 쉽게 통합할 수 있도록 spring-boot-starter 형식으로도 제공합니다. 
  • RP 서버 샘플: FIDO2 RP를 구현한 예시 애플리케이션입니다.

LINE FIDO2 서버는 기본적으로 WebAuthn Level 1 표준을 준수하며, 최근에 개선된 Level 2 표준도 일부 준수하고 있습니다. 지원하는 증명서(Attestation) 유형과 형식은 아래와 같습니다.

  • 지원하는 증명서 유형
    • Basic
    • Self
    • Attestation CA(a.k.a Privacy CA)
    • Anonymization CA
    • None
  • 지원하는 증명서 형식
    • Packed
    • TPM
    • Android Key Attestation
    • Android Safetynet
    • Apple Anonymous
    • FIDO U2F
    • None

마치며

저희 팀에서는 이번 공개로만 끝내지 않고 앞으로도 지속적으로 기능을 추가하고 버그를 수정하며 오픈 소스 활동에 기여할 계획입니다. 이 글을 읽고 계신 많은 개발자와 엔지니어 분들께서도 LINE FIDO2 서버를 필요한 곳에 이용하시고, 이용하다가 버그나 수정해야 할 부분을 발견한다면 오픈 소스 활동에 참여하셔서 활발히 논의해 주시길 바라겠습니다. 이런 활동을 통해 LINE FIDO2 서버가 지속적으로 개선되길 바라고 있습니다. 제가 공유할 내용은 여기까지입니다. 긴 글 읽어주셔서 감사합니다.



  1. FIDO Alliance가 제안하고 W3C에서 웹 표준으로 채택했으며, 최신 버전의 웹 브라우저에서는 WebAuthn API를 제공하도록 권고하고 있습니다(참고).