FIDO 2.0 Web API for accessing FIDO 2.0 credentials
FIDO의 3가지 스펙 문서 중 두 번째인 Signature Format에 대해서 정리한다.
FIDO Credential API - FIDOCredentialsInfo
FIDOCredentialsInfo Interface
이번 포스팅에선 FIDOCredentialsInfo의 인터페이스에 대해 알아보자.
FIDOCredentialsInfo Interface는 말 그대로 FIDO의 자격 증명을 나타낸다.
이미 생성을 한 뒤에 추후 사용하기 위해 찾을 수 있는 Credential에 대한 정보를 포함하며, 등록 중 Credential의 강도를 평가하기 위해 FIDO Relying Party가 사용할 수 있는 metadata도 포함된다.
이 인터페이스의 속성은 아래와 같다.
credential
객체가 나타내는 Credential의 고유 식별자algorithm
Credential과 관련된 암호화 알고리즘 형식참고 WebCrypto
publicKey
Credential과 관련된 공개 키로 JsonWebKey 형식으로 표현참고 WebCrypto
attestation
authenticator 의해 반환된 key attestation statement를 포함하여 authenticator에 대한 정보를 제공한다.참고 제공한 보안 보증 레벨과 같은 정보
User Account Information (dictionary Account)
말 그대로 사용자 계정에 대한 정보다.
이는 Account 및 Credential과 연관되는 Relying Party에 대한 정보를 지정하는 데 사용된다.
이를 이용하면 authenticator가 사용자에게 Credential을 선택하도록 하는 인터페이스를 보다 친숙하게 제공할 수 있다.
rpDisplayName
Google, Microsoft, PayPal과 같은 Relying Party의 이름을 포함한다.displayName
“John P. Smith”와 같은 Relying Party와 관련된 사용자의 이름을 포함한다.name
“john.p.smith@example.com“과 같은 Relying Party와 관련된 사용자의 상세한 계정명을 포함한다.id
Relying Party의 사용을 위해 저장된 사용자 계정의 식별자로 사용자에게 표시되지 않는다.imageUri
사용자의 계정 이미지를 확인하는 URI를 포함한다. 이를 통해 사용자의 아바타나 이미지 데이터가 포함된 데이터 URI를 검색하는 데 사용할 수 있다.
Parameters for Credential Generation(dictionary FIDOCredentialParamters)
FIDOCredentialParamters 는 새로운 Credential을 생성할 때 추가적인 매개변수를 제공하는 데 사용된다.
type
새로 생성할 Credential의 유형을 지정한다.algorithm
새로 생성할 Credential에 사용될 암호화 알고리즘을 지정한다.
Supporting Data Structures
FIDO Credential의 유형은 아래 나열된 특정 데이터 구조를 사용한다.
Credential Type enumeration(enum CredentialType)
CredentialType 열거형은 유효한 Credential의 유형을 정의한다.
추후 더 많은 유형이 지정되면 더욱 늘어날 수도 있다.
CredentialType 의 값은 authenticator의 유형에 따라 FIDO assertion 및 Attestation statement의 버전을 지정하는 데 사용된다.
현재는 단 하나의 유형인 FIDO 가 정의된다.
Unique Identifier for Credential(Interface Credential)
Credential 의 인터페이스는 새로운 Credential이 생성되었을때 호출되어 추후 사용자가 사용할 Credential을 고를 때 사용할 수 있다.
type
Credential이 준수하는 스펙 및 버전을 나타낸다.id
Authenticator의 도움으로 플랫폼이 선택한 Credential의 식별자를 포함한다. 이 식별자를 Credential을 조회하는 데 사용되므로 동일한 유형의 Credential마다 모두 달라야 한다. 즉 하나의 식별자는 하나의 Credential만을 식별할 수 있어야 한다.
이 API는 플랫폼마다 고유하게 key를 선택할 수만 있다면 특별히 형식이나 길이를 제한하지 않는다.
Cryptographic Algorithm Identifier(type AlgorithmIdentifier)
암호 알고리즘과 해당 알고리즘의 매개변수 집합을 식별하는 문자열이나 dictionary 형태다.
이 유형은 WebCrypto에 정의되어 있다.
FIDO Assertion(Interface FIDOAssertion)
FIDO 2.0의 Credential은 특정 트랜잭션에 대한 사용자의 동의를 받았다는 증거일 뿐만 아니라 private key 를 소유하고 있다는 증명을 위한 암호화 Signature를 생성한다.
이 Signature는 FIDO Signature Format에 정의되어 있다.
FIDO Assertion Extensions(dictionary FIDOExtensions)
FIDO Assertion Extensions 는 FIDO Signature Format에 정의된 extension 이 0개 이상인 dictionary를 말한다.
extension 은 getAssertion 메소드에 전달할 수 있는 추가적인 매개변수로 클라이언트 플랫폼 이나 authenticator에 의해 추가된다.
호출자가 플랫폼에 extension 을 전달하려고 하는 경우, extension identifier 를 식별자를 key로 extension 의 값을 value로 하여 FIDOExtensions dictionary에 extension 당 하나의 항목을 추가해야 한다.
Key Attestation Statement(type AlgorithmIdentifier)
FIDO 2.0의 authenticator는 key attestation의 유형을 제공해준다.
기본적인 요구사항은 authenticator가 각 Credential public key 에 대해 Relying Party가 확인할 수 있는 Attestation 정보를 생성할 수 있다는 것이다.
일반적으로 이 Attestation 정보에는 증명된 public key 와 challenge 에 대한 attesting key를 이용한 Signature 를 포함하고 있다.
또한 attesting key에 대한 출처 정보를 제공하는 Attestation statement나 유사한 정보가 포함되어 있어 사용자는 이를 신뢰하기 위한 결정을 내릴 수 있도록 해준다.
이 Attestation statement의 구조는 Key Attestation Format에 정의되어 있다.