FIDO 2.0 Signature Format
FIDO의 3가지 스펙 문서 중 두 번째인 Signature Format에 대해서 정리한다.
Client Data
The client data represents the contextual bindings of both the RP and the client platform. It is a key-value mapping with string-valued keys. Values may be any type that has a valid encoding in JSON. It must contain at least the following key-value pairs.
Client Data 는 Relying Party와 Client Platform의 contextual binding을 나타내는 값이다.
Client Data는 문자열을 key값으로 가면 key-value 형태로 매핑되며 JSON에서 유효한 인코딩을 가진 모든 유형을 value로 가질 수 있다.
아래 나오는 것은 Client Data가 꼭 포함해야하는 key-value값들이다.
1 | dictionary ClientData { |
DOMString challenge
Relying Party가 제공하는 base64url기반의 인코딩 값DOMString facet
Relying Party를 식별하기 위한 문자열
클라이언트의 애플리케이션이 Native 애플리케이션일 경우 플랫폼을 식별하기위한 값이며, Web 애플리케이션일 경우 완전한 web 출처를 뜻한다.참고 web 출처를 정의하는 구문은 RFC 6454를 사용한다.
JsonWebKey tokenBinding
Relying Party와 통신할 때 클라이언트가 Token Binding Protocol 을 위해 사용하는 public key 를 설명하는 객체다.
Token Binding이 클라이언트와 Relying Party 간의 협의되지 않았다면 생략할 수 있다.optional object extensions
extensions은 확장된 Authenticator Data 객체다. Signature에 대한 extension은 추후 포스팅에서 다루겠다.DOMString hashAlg
clientDataHash 를 계산하는 데 사용되는 hash 알고리즘을 말한다. 이것도 추후 포스팅에서 다루도록 하겠다.참고
SHA-256 는 S256
SHA384 는 S384
SHA512 는 S512
SM3 는 SM3의 값을 사용한다.
위에 나온 최소한으로 필요한 속성 이외에도 또 다른 속성이 추가될 수 있다.
Client Platform 계층은 Authenticator에게 요청하기 전에 아래의 단계를 수행한다.
- clientDataJSON 은 clientData를 UTF-8로 인코딩한 직렬화된 JSON이라고 가정한다.
- clientDataHash 는 hashAlg에 정의된 hash 알고리즘을 사용하여 clientDataJSON 값을 hash한 배열값이다.
clientDataHash 값은 FIDO Authenticator에 의해 Signature와 통합된다. clientDataHash 는 플랫폼 특유의 방식으로 통합 Authenticator에게 전달되며 FIDOEAP에 의해 지정된 Signature Request의 일부로 외부의 Authenticator에게 전달된다.
Client Platform 은 Relying Party 에게 다시 보내는 Signature 객체에 포함되는 정확한 encodedClientData 문자열 값도 보존해야 한다. 이는 동일한 Client Data 에서 다중 JSON 인코딩이 가능하기때문에 필요한 일이다.
hash algorithm 을 뜻하는 hashAlg는 clientData 객체에 포함되어 clientDataHash를 계산하는 데 사용된다. 이렇게 hash algorithm을 알려주면 Relying Party에서도 사용할 수 있으며, Signature 자체에 포함된다.