010. FIDO 2.0 Signature Format - 개요

FIDO 2.0 Signature Format

FIDO의 3가지 스펙 문서 중 두 번째인 Signature Format에 대해서 정리한다.

참고 FIDO alliance : FIDO 2.0 Signature Format 문서

Overview

FIDO 2.0 Signature는 다양한 contextual data에 바인딩된다.

이 데이터들은 서버에서 Authenticator로 전달되는 Signature 요청에 따라 다른 스택 계층에서 관찰되고 추가된다.

서버는 바인딩을 예상하여 예상된 값과 대조한 뒤 Signature를 검증하게 된다.

FIDO 2.0을 사용하는 시스템의 구성 요소는 아래와 같이 3개의 계층 구조로 나눌 수 있다.

  1. Relying Party
    Relying Party는 브라우저에서 동작하는 웹 애플리케이션이나 운영체제에서 직접 실행되는 애플리케이션이다.
  2. Client Platform
    Relying Party의 클라이언트 애플리케이션을 실행하고 유지하는 데 사용되는 운영체제와 장치를 말한다.
    만약 Relying Party가 웹 애플리케이션일 경우 브라우저도 Client Platform에 속한다.
  3. Authenticator
    Key를 관리하고 암호화된 Signature를 사용하는 Authenticator(인증자) 그 자체를 말한다.

In cases where the authenticator is not tightly integrated with the platform, the interface between 2 and 3 is the FIDO External Authenticator Protocol [FIDOEAP].

This document defines the common signature format shared by all layers.

This includes how the different contextual bindings are encoded, signed over, and delivered to the RP.

Relying Party 클라이언트 측의 애플리케이션이 웹 애플리케이션인 경우 엔, Relying PartyClient Platform 사이의 인터페이스는 FIDO 2.0 Web API 를 사용하지만 FIDO 2.0 Web API 는 Native 애플리케이션 전용 플랫폼이다.

참고 FIDO 2.0 Web API

Authenticator와 플랫폼과 상세하게 통합되지 않은 경우Client PlatformAuthenticator 사이의 인터페이스는 FIDOEAP 이다.

참고 FIDOEAP : FIDO External Authenticator Protocol

이 문서는 모든 계층에서 공유하는 Common Signature Format 을 정의하며 서로 다른 contextual biding이 인코딩되거나 서명되서 Relying Party에 전달되는 방법을 포함한다.

위와 같은 설계의 목표는 아래의 4가지로 요약할 수 있다.

  • Signature를 생성하는 방식은 Client PlatformAuthenticator 사이의 연결된 대역폭이나 제한 시간이 매우 제한적인 경우도 생각해야 한다.

    참고 예를 들면 저전력 근거리 무선 통신이 해당된다.

  • Authenticator 가 처리하는 데이터는 작고 저수준 코드에서도 쉽게 해석할 수 있어야 한다. 특히 Authenticator는 JSON과 같은 상위 수준의 인코딩을 분석할 필요가 없다.

  • Client PlatformAuthenticator 모두 필요에 따라 유연하게 Contextual Binding을 추가할 수 있어야 한다.

  • 기존의 인코딩 형식을 최대한 재사용하도록 설계하여 채택과 구현이 쉽도록 해야 한다.

Contextual biding은 크게 두 가지로 나뉜다.

Relying Party나 Client Platform이 추가한 것으로 이를 Client Data 라고 하며 Authenticator가 추가한 것을 Authenticator Data 라고 한다.

Client Data 는 반드시 서명되어야 하지만 서명 여부에 관하여 Authenticator는 알 필요가 없다.

Client Platform은 Authenticator에 대한 대역폭과 처리할 요구사항을 저장하기 위해 Client Data를 hash하고 결과만 Authenticator에게 알려준다.

Authenticator는 Client Platform으로부터 넘겨받은 hash값과 Authenticator Data의 조합에만 서명한다.