Skip to content

Instantly share code, notes, and snippets.

@miliya612
Created November 9, 2018 00:34
Show Gist options
  • Save miliya612/ec8741b597b08e17e7b4437a27f234e0 to your computer and use it in GitHub Desktop.
Save miliya612/ec8741b597b08e17e7b4437a27f234e0 to your computer and use it in GitHub Desktop.
WebAuthn: Attestation Format & Attestation Type

webauthn attestation typeとformat

目的

WebAuthn RPがattestationStatementを正しく解釈すること

attestation statement format

概要

The attestation statement format is the manner in which the signature is represented and the various contextual bindings are incorporated into the attestation statement by the authenticator. In other words, this defines the syntax of the statement. Various existing components and OS platforms (such as TPMs and the Android OS) have previously defined attestation statement formats. This specification supports a variety of such formats in an extensible way, as defined in §6.4.2 Attestation Statement Formats.

  • attestation statementの文法を定義している
  • OSや認証デバイスごとに予めattestation statementのフォーマットは決められている
  • Registries for Web Authentication (WebAuthn)に定義される
  • もし登録せずに独自のformatを用意したいのであれば、ドメイン名を逆にしたものを用いてuniquenessを確保する

フォーマット

  • ID(attestation statement format identifier)
  • 対応するattestation type
  • syntax
  • signing procedure(省略)
  • verification procedure(省略)

種類(全6種)

Packed Attestation Statement Format

Web Authentication: An API for accessing Public Key Credentials Level 1

  • WebAuthn向けに最適化されたフォーマット
    • 必要なデータ容量が小さい
    • 拡張性がある
    • デバイスのsecure elementなど、限られたストレージに保存するのに向いている
  • パラメータ
    • Attestation statement format identifier
      • packed
    • Attestation types supported
      • All
    • Syntax
{
	"fmt": "packed",
	"attStmt": {
		"alg": "COSEAlgorithmIdentifier: attestation署名に使ったアルゴリズム",
		"sig": "bytes: attestation signature",
		"x5c": "(OPTIONAL)X.509を使用した場合",
		"ecdaaKeyId": "(OPTIONAL)ECDAAを使用した場合"
	}
}

TPM Attestation Statement Format

https://www.w3.org/TR/webauthn/#tpm-attestation

  • 暗号化エンジンにTPM(Trusted Platform Module)を使用しているauthenticatorで使用される
  • パラメータ
    • Attestation statement format identifier
      • tpm
    • Attestation types supported
      • AttCA, ECDAA
    • Syntax
{
	"fmt": "tpm",
	"attStmt": {
		"alg": "COSEAlgorithmIdentifier: attestation署名に使ったアルゴリズム",
		"sig": "bytes: attestation signature",
		"x5c": "(OPTIONAL)X.509を使用した場合",
		"ecdaaKeyId": "(OPTIONAL)ECDAAを使用した場合",
		"sig": "bytes: attestation signature",
		"certInfo": "bytes: TPMS_ATTEST structure ",
		"pubArea": "bytes: represent the credential public key"
	}
}

Android Key Attestation Statement Format

https://www.w3.org/TR/webauthn/#android-key-attestation

  • AndroidOSでAPI level24以上の場合使用される
  • パラメータ
    • Attestation statement format identifier
      • android-key
    • Attestation types supported
      • Basic
    • Syntax
      • Android attestation statementをシンプルにしたもの
{
	"fmt": "android-key",
	"attStmt": {
		"alg": "COSEAlgorithmIdentifier: attestation署名に使ったアルゴリズム",
		"sig": "bytes: attestation signature",
		"x5c": "(OPTIONAL)X.509を使用した場合"
	}
}

Android SafetyNet Attestation Statement Format

https://www.w3.org/TR/webauthn/#android-safetynet-attestation

  • AndroidOSで使用される
  • SafetyNet APIに基づいて実装される
  • attestation statementにAndroidPFの状態と、SafetyNetAPIを呼んだアプリの情報しか入らず、authenticatorやそれに関連するデータは提供しない
  • Android Key Attestationの使用を推奨
  • パラメータ
    • Attestation statement format identifier
      • android-safetynet
    • Attestation types supported
      • Basic
    • Syntax
      • Android attestation statementをシンプルにしたもの
{
	"fmt": "android-key",
	"attStmt": {
		"ver": "text: Google Play Serviceのバージョン",
		"response": "bytes: getJwsResult()の返り値"
	}
}

FIDO U2F Attestation Statement Format

https://www.w3.org/TR/webauthn/#fido-u2f-attestation

  • FIDO U2F authenticatorsで使用される
  • パラメータ
    • Attestation statement format identifier
      • fido-u2f
    • Attestation types supported
      • Basic``AttCA
    • Syntax
      • Android attestation statementをシンプルにしたもの
{
	"fmt": "fido-u2f",
	"attStmt": {
		"x5c": "(OPTIONAL)X.509を使用した場合",
		"sig": "bytes: attestation signature"
	}
}

None Attestation Statement Format

https://www.w3.org/TR/webauthn/#none-attestation

  • WebAuthn RPがattestation情報を求めていない際、authenticatorから返って来てしまったattestation statementを置き換えるのに使用される
  • create時のPublicKeyCredentialCreationOptions.AttestationConveyancePreferenceで指定
  • パラメータ
    • Attestation statement format identifier
      • none
    • Attestation types supported
      • None
    • Syntax
{
	"fmt": "none",
	"attStmt": {}
}

attestation type

Web Authentication: An API for accessing Public Key Credentials Level 1

The attestation type defines the semantics of attestation statements and their underlying trust models. Specifically, it defines how a Relying Party establishes trust in a particular attestation statement, after verifying that it is cryptographically valid. This specification supports a number of attestation types, as described in §6.4.3 Attestation Types.

  • 下記を定義
    • attestation statementのセマンティクス(意図?)
    • trust model(何を根拠にauthenticatorを信頼しうるのか)
  • RPは暗号学的な正しさを検証した後、attestation statementの信頼性を確立する

Basic Attestation (Basic)

  • 大抵の場合、authenticatorの型番ごとに決められたattestation key pairを用いて署名を行う
  • UAF protocolの中で、少なくとも100k台の同一モデルのデバイスに同一のkey pairを共有させるように求められている
    • 個々のデバイスに個々の鍵を持たせないことで、ユーザーの匿名化に貢献している
    • 鍵を無効化できない問題がある
  • 動的にオリジンごとに異なるattestation key pairを生成する方法もある
    • 認証器の中にあるmaster-attestation-keyと、cloud管理のAnonymization CAを組み合わせて鍵を生成する

Attestation CA (AttCA)

  • 認証器がTPMの基準を満たしており、endorsement key(EK)を保持しているパターン
    • EK: AttestationCAとセキュアなコミュニケーションを行うための鍵

The authenticator can generate multiple attestation identity key pairs (AIK) and requests an Attestation CA to issue an AIK certificate for each. Using this approach, such an authenticator can limit the exposure of the EK (which is a global correlation handle) to Attestation CA(s). AIKs can be requested for each authenticator-generated public key credential individually, and conveyed to Relying Parties as attestation certificates.

Elliptic Curve based Direct Anonymous Attestation (ECDAA)

None

  • attestation statementが存在しない、無効である

  • RPはauthenticatorの特性を理解し、信頼するかどうかを判断しなければならない

    • MDS(Metadata Service)を活用
    • 認証器ベンダーが、認証器の信頼性に関わる様々な情報(メタデータ)をアップロードしている
      • attestation CAのルート証明書
      • 認証機の性能
      • セキュリティ情報
  • Trusted Platform Module - Wikipedia

Components of a Trusted Platform Module complying with the TPM version 1.2 standard Trusted Platform Module (TPM, also known as ISO/IEC 11889) is an international standard for a secure cryptoprocessor, a dedicated microcontroller designed to secure hardware through integrated cryptographic keys.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment