020. Web API for accessing FIDO 2.0 credentials - FIDO Authenticator model

FIDO 2.0 Web API for accessing FIDO 2.0 credentials

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

참고 FIDO alliance : FIDO 2.0 Web API 문서

FIDO Authenticator model

이 스펙 문서에 지정된 API는 FIDO Authenticator를 위한 특정 기능을 가진 추상 모델에 대해서 설명한다.

이 포스팅에서는 FIDO Authenticator Model에 대해서 설명하여 Client platform 에서 원하는 방식으로 이 추상 모델을 구현하고 또 공개할 수 있다.

하지만 클라이언트에서 구현한 FIDO Credential API의 동작은 해당 플랫폼에서 제공하는 내장 및 외부 인증 장치에서 동작할때의 FIDO Credential API와 구분할 수가 없다.

참고 내장 인증 장치는 embedded authenticator 를 외부 인증 장치는 external authenticator 를 말한다.

이 추상모델에가 각각의 FIDO Authenticator는 몇 가지FIDO Credential을 저장한다.

각 FIDO Credential에는 모든 FIDO Credential 중에서 유일하거나 중복 가능성이 거의 없는 식별자가 존재하며, 해당 Credential의 ID는 RP ID 로 표시되는 FIDO Relying Party와도 연관되어진다.

참고 RP ID : Relying Party Identifier

클라이언트는 반드시 FIDO Authenticator에 연결해야 하는데 이 연결 작업을 통해 Authenticator의 작업을 호출할 수 있기 때문이다.

위의 연결 작업은 authenticator의 session을 정의하며, FIDO Authenticator는 session들이 분리되어 있는 상태를 유지해야 한다.

특정 시간대에 하나의 session만 존재하게 하거나 더 복잡한 세션 관리를 구현하여 제공함으로써 분리되어 있는 상태를 유지할 수 있으며, 아래와 같은 작업들이 Authenticator Session을 통해 클라이언트가 호출할 수 있는 작업들이다.

The authenticatorMakeCredential operation

이 작업은 별도로 진행중인 작업이 없는 Authenticator Session에서 호출해야 한다.

매개변수로는 아래의 세 가지 매개변수가 필요하다.

  • Web origin of the script
    사용자 에이전트와 클라이언트가 결정한대로 작업을 시작한 스크립트의 원본
  • RP ID
    위의 Web origin of the script 에 해당하는 Relying Party Identifier
  • All input parameters accepted by the getAssertion
    getAssertion 메소드에 의해 허용되는 모든 입력 매개변수

authenticatorMakeCredential 이 호출되면 Authenticator는 새로운 권한 정보를 작성하기 위해 사용자의 동의를 얻어야 한다.

이 동의를 받기 위한 프롬프트 메시지는 Authenticator 자체적으로 가진 출력 기능을 가지고 있거나 사용자 에이전트가 가진 다른 출력 기능을 활용하여 표시된다.

사용자의 동의를 확보하고 나면 authenticator는 적절한 암호화된 key를 생성하고 새로운 Credential을 생성한다.

그 다음 생성한 Credential과 해당하는 Credential을 나중에 탐지할 수 있도록 부여한 Relying Party Identifier를 연관시킨다.

이 작업이 성공적으로 완료되고 나면 authenticator는 사용자 에이전트에게 Credential의 유형과 RP ID를 반환하게 된다.

만약 사용자의 동의를 얻지 못하거나 사용자가 동의를 거부하면 적절한 오류를 반환한다.

The authenticatorGetAssertion operation

이 작업은 별도로 진행중인 작업이 없는 Authenticator Session에서 호출해야 한다.

매개변수로는 아래의 세 가지 매개변수가 필요하다.

  • Web origin of the script
    사용자 에이전트와 클라이언트가 결정한대로 작업을 시작한 스크립트의 원본
  • RP ID
    위의 Web origin of the script 에 해당하는 Relying Party Identifier
  • All input parameters accepted by the makeCredential
    makeCredential 메소드에 의해 허용되는 모든 입력 매개변수

authenticatorGetAssertion 이 호출되면 Authenticator은 사용자가 해당 Relying Party와의 연관된 Credential 중에서 지정된 기준과 일치하는 Credential을 선택한 다음 해당 Credential을 사용하기 위해서 사용자의 동의를 얻는다.

이 동의를 받기 위한 프롬프트 메시지는 Authenticator 자체적으로 가진 출력 기능을 가지고 있거나 사용자 에이전트가 가진 다른 출력 기능을 활용하여 표시된다.

Credential을 선택하고 사용자의 동의를 얻고나면 Authenticator는 Credential의 private key를 사용하여 암호화된 signature를 계산하고 FIDO Signature Format에 지정된 assertion을 구성한다.

그 다음 구성한 assertion을 사용자에게 반환한다.

만약 Authenticator가 지정된 기준과 일치하는 Credential을 찾을 수 없으면 작업을 종료하고 적절한 오류를 반환하고, 사용자가 동의를 거부하는 경우에도 마찬가지로 적절한 오류를 반환한다.

The authenticatorCancel operation

이 작업은 따로 입력할 매개변수도 없고 반환하는 값도 없다.

authenticatorCancel 이 호출되면 Authenticator Session에서 현재 진행중인 authenticatorMakeCredential 또는 authenticatorGetAssertion 의 작업을 종료시킨다.

Authenticator는 취소된 작업의 권한 부여와 관련된 사용자의 입력을 요구하지도 받아들이지도 않으며, 클라이언트는 취소된 작업에 대한 Authenticator의 추가 응답또한 무시한다.

현재 진행중인 authenticatorMakeCredential 또는 authenticatorGetAssertion 의 작업이 없는 경우에 authenticatorCancel 를 호출하면 이 작업은 무시된다.