---
url: 'https://www.corbado.com/ja/glossary/attestation'
title: 'アテステーション'
description: 'WebAuthn/パスキーにおけるアテステーションについて詳しく学び、ユーザー認証におけるその関連性やFIDOメタデータサービスとの関係性を探ります。'
lang: 'ja'
keywords: 'アテステーション'
---

# アテステーション

## アテステーションとは？

**アテステーション**は3つのことを指すことがあります（口語ではしばしば同じ意味で使われますが、厳密にはそれぞれ異なる意味を持ちます）：

1. 第一に、より一般的には、暗号学の分野におけるアテステーションとは、ある当事者が別の当事者に対して、あるステートメントを暗号学的に「証明（attest）」する用語です。

2. 第二に、WebAuthnの登録フェーズ中に、**アテステーションオブジェクト**が認証器によって作成され、リライングパーティに返されます。これは以下の情報を含むコンテナオブジェクトです：
    - [アテステーションステートメントフォーマット (`fmt`)](https://www.iana.org/assignments/webauthn/webauthn.xhtml)
    - アテステーションステートメント (`attStmt` - 下記参照)
    - 認証器データ (`authData`)

3. 第三に、WebAuthnにおいて、**アテステーションステートメント**はアテステーションオブジェクトのオプション要素です。このステートメントが含まれる場合、アテステーションプロセスに関与する認証器（デバイス）の特定の特性を検証します。しかし、一部のデバイス製造元（例：[Apple](https://www.corbado.com/ja/blog/how-to-enable-passkeys-macos)）はアテステーションステートメントを提供しません。これは、仕様のこの側面がパスキーの同期を意図しておらず、クレデンシャルが異なるデバイス間で同期される場合（例：パスキーがiPhoneで作成され、同じiCloudキーチェーンを介して同期されたMacBookでも使用される場合）にセキュリティ属性を効果的に検証できないためです。アテステーションステートメントが提供される場合に与えられる可能性のある特性：
    - 認証中に本物で信頼できるデバイスが使用されたことの証明を提供する。
    - デバイスの出自、モデル、その他の関連情報に関する詳細を提供する。
    - 特にデバイスの信頼性が重要となるシナリオ（例：[ヘルスケア](https://www.corbado.com/passkeys-for-healthcare)のような特定の規制産業）において、セキュリティ対策を強化する。

以下の登録プロセスのフローは、WebAuthnにおけるアテステーション（オブジェクト）の役割を示しています：

![アテステーションオブジェクトはWebAuthnにおける登録の中心的な部分です](https://www.corbado.com/website-assets/cs_1_1_registration_flow_e44a658ca7.png)

### アテステーションオブジェクトの例

```json
{
    "root": {
        "id": "QFPlQVypLmmx71e0tmS3IfCFky0",
        "rawId": "QFPlQVypLmmx71e0tmS3IfCFky0",
        "response": {
            "attestationObject": {
                "fmt": "none",
                "attStmt": {},
                "authData": {
                    "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc",
                    "flags": {
                        "userPresent": true,
                        "userVerified": true,
                        "backupEligible": true,
                        "backupStatus": true,
                        "attestedData": true,
                        "extensionData": false
                    },
                    "counter": 0,
                    "aaguid": "00000000-0000-0000-0000-000000000000",
                    "credentialID": "QFPlQVypLmmx71eOtmS3IfCFky0",
                    "credentialPublicKey": "pQECAyYgASFYIEa-lpSiQ4P...",
                    "parsedCredentialPublicKey": {
                        "keyType": "EC2 (2)",
                        "algorithm": "ES256 (-7)",
                        "curve": 1,
                        "x": "Rr6WlKJDg8MlbIq9mmHQzk2p2c_s7QoNKr7yMa7I8pM",
                        "y": "tAELYp7h3sYNjZZIZgHPYiaSzF×QVT18cgZ_7wm13Vw"
                    }
                }
            },
            "clientDataJSON": {
                "type": "webauthn.create",
                "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp",
                "origin": "https://passkeys.eu",
                "crossOrigin": false
            },
            "transports": ["hybrid", "internal"],
            "publicKeyAlgorithm": -7
        },
        "authenticatorAttachment": "cross-platform"
    }
}
```

上記のスクリーンショットでは、[AAGUID](https://www.corbado.com/glossary/aaguid)とアテステーションステートメントは提供されていません。

最も重要な属性の技術的な詳細については、このまま読み進めてください。

## 要点

> - アテステーションとは、ある当事者が別の当事者に対してステートメントを暗号学的に証明するプロセスを指します。
> - WebAuthnのアテステーションオブジェクトは、認証器によって作成され、登録時に渡されます。これには、[AAGUID](https://www.corbado.com/glossary/aaguid)、クレデンシャルID、公開鍵などが含まれます。
> - WebAuthnのアテステーションステートメントは、アテステーションオブジェクト内のオプションのフィールドであり、認証に本物のデバイスが使用されたことを保証します。

---

### アテステーションの本質を理解する

[WebAuthn](https://www.corbado.com/webauthn)において、アテステーションはユーザー認証が安全で透明であることを保証します。アテステーションステートメントを使用すると、特定の認証器/デバイスでクレデンシャルが作成されたことを確認できます。

### アテステーションの種類：

これらのアテステーションの種類は、**アテステーションステートメント**（アテステーションオブジェクトではない）を指します。これらはリライングパーティによる優先設定と見なされます（したがって、認証器は単なる優先設定であるため、異なる動作をする可能性があります）。

- **アテステーションなし (`none`)**：プライバシーが最優先される場合や、同期されたデバイスが使用される場合に、このタイプはデバイスに関する情報を提供せず、ユーザーのプライバシーを保護します。この値を使用するもう一つの理由は、証明書局（CA）へのラウンドトリップを節約するためかもしれません。`none`はデフォルト値でもあります。
- **間接的アテステーション (`indirect`)**：リライングパーティはアテステーションの取得を希望しますが、クライアントがアテステーションステートメントをどのように取得するかを決定することを許可します。クライアントは、ユーザーのプライバシーを保護するために、認証器が生成したアテステーションステートメントを匿名のものに置き換えることがあります。
- **直接的アテステーション (`direct`)**：これは最も透明性の高い形式です。ここでは、リライングパーティは認証器に対してアテステーションステートメントを要求し、それによってリライングパーティはデバイスのブランド、モデル、その他の詳細情報を含む詳細な情報を取得します。最高の透明性を提供しますが、特定のシナリオではプライバシーに関する懸念を引き起こす可能性があり、また同期されたクレデンシャルには実質的に使用できない場合があります。
- **エンタープライズアテステーション (`enterprise`)**：リライングパーティは、一意の識別情報を含むことができるアテステーションステートメントの受信を希望します。このタイプのアテステーションは、通常、特定のデバイス/認証器を追跡したい企業や組織で使用されます。Webブラウザ（ユーザーエージェント）は、要求元のパーティに対して設定で特別に許可されていない限り、この詳細なアテステーションを提供すべきではありません。設定で許可されている場合、ブラウザはプロセスの開始時にこの特定のタイプのアテステーションが要求されていることをデバイスに伝え、デバイスの一意のIDとアテステーションの証明をリライングパーティにそのまま渡すべきです。

### アテステーションオブジェクトの属性

**アテステーションオブジェクト**には多くの属性が含まれています。ここでは、いくつかの選択された属性について簡単に説明します：

#### attestationObject

```json
"attestationObject": {
        "fmt": "none",
        "attStmt": {},
        "authData": {
          "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc",
          "flags": {
            "userPresent": true,
            "userVerified": true,
            "backupEligible": true,
            "backupStatus": true,
            "attestedData": true,
            "extensionData": false
          },
          "counter": 0,
          "aaguid": "00000000-0000-0000-0000-000000000000",
          "credentialID": "QFPlQVypLmmx71eOtmS3IfCFky0",
          "credentialPublicKey": "pQECAyYgASFYIEa-lpSiQ4P...",
          "parsedCredentialPublicKey": {
            "keyType": "EC2 (2)",
            "algorithm": "ES256 (-7)",
            "curve": 1,
            "x": "Rr6WlKJDg8MlbIq9mmHQzk2p2c_s7QoNKr7yMa7I8pM",
            "y": "tAELYp7h3sYNjZZIZgHPYiaSzF×QVT18cgZ_7wm13Vw"
          }
        }
```

**attestationObject**は[CBOR](https://www.corbado.com/glossary/cbor)でエンコードされたオブジェクトで、新しく作成されたクレデンシャル、公開鍵、その他の関連データに関する情報を含んでいます：

- **fmt**はアテステーションフォーマットを表します。認証器はさまざまな方法でアテステーションデータを提供できるためです。これはサーバーに対して、アテステーションデータをどのように検証すべきかを伝えます。許可される値は「packed」、「tpm」、「[android](https://www.corbado.com/blog/how-to-enable-passkeys-android)-key」、「[android](https://www.corbado.com/blog/how-to-enable-passkeys-android)-safetynet」、「[fido](https://www.corbado.com/ja/blog/visa-passkey)-u2f」、「[apple](https://www.corbado.com/ja/blog/how-to-enable-passkeys-macos)」、または「none」です。詳細は[こちら](https://www.iana.org/assignments/webauthn/webauthn.xhtml)を参照してください。
- **attStmt**はアテステーションステートメントです。[iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios)や[Android](https://www.corbado.com/blog/how-to-enable-passkeys-android)デバイス上のパスキーなどでは、パスキーが同期可能であるため空のままにされ、Windowsやハードウェアセキュリティキーなどの他のデバイスでは入力されます。
- **authData**は、以下のデータを含む値のバッファです：
  ![authDataには、rpIdハッシュや重要なフラグなどのデータが含まれています](https://www.corbado.com/website-assets/cs_2_3_auth_Data_32c5cbba19.png)
  ここで[証明済みクレデンシャルデータ](https://www.w3.org/TR/webauthn-2/#attested-credential-data)が重要な役割を果たします。これには以下が含まれます：
    - [AAGUID](https://www.corbado.com/glossary/aaguid)、
    - クレデンシャルIDの長さ、
    - クレデンシャルIDおよび
    - クレデンシャル公開鍵。

#### attStmt (アテステーションステートメント)

上記の`attStmt`が読みやすさのために空にされていたアテステーションオブジェクトとは対照的に、入力されたアテステーションステートメントは次のようになります。

```json
{
    "alg": -65535,
    "sig": "MBHX7qov53SWqqPYCrxE5fcoAeDI83a0DzVJ2-N1KI6IAaCGGvINAIFzTEn44F6giANKte-8yEMDZbvbgDG1weaRj7SqsVaTty-TEQ",
    "ver": "2.0",
    "x5c": [
        "MIIFwDCCA6oIaK6tZ7M",
        "MIIG6zCCBNpG18-MCJrHyrpMT-ul7RgxE4dFxqcG59ftTXqJ1f-X_Lpo7K-d7OgKoQrUgzxgATz8YXtFAk3rE1cHXvW9W52V637eAihKn9-UKC0ijzVXrBGX4Iq1o1M0ZfR-tFoOn498xasMCTnharKiM562GBLVJtlvV3DMSLEBl5SfuGM-qYjQgTQknXccks9guCmNaN_b2fo1DisbufXfjM3DVaMqx7IJpSc3wAnxooMrAYGpPM"
    ],
    "pubArea": "AAEACwAw_c3Ousz865mUPx8O3w",
    "certInfo": "_1RDR4AXAniCekfsiDI"
}
```

- `alg`:
  `alg`プロパティは、アテステーションステートメントの署名に認証器が使用した暗号アルゴリズム識別子を示します。
- `sig`:
  `sig`プロパティには、認証器によって生成されたデジタル署名が含まれます。この署名は、アテステーションステートメントの真正性を検証するために使用されます。
- `ver`:
  `ver`プロパティは、アテステーションステートメントのフォーマットのバージョンを指定します。
- `x5c`:
  `x5c`配列には、アテステーションの検証を支援する証明書パスを形成する1つ以上のX.509証明書が含まれます。
- `pubArea`: `pubArea`プロパティには、公開鍵と認証器の特性に関する詳細情報が含まれます。
- `certInfo`:
  `certInfo`プロパティには、通常、信頼できる第三者による認証器の証明に関する情報が含まれます。

#### clientDataJSON

```json
"clientDataJSON": {
        "type": "webauthn.create",
        "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp",
        "origin": "https://www.passkeys-debugger.io",
        "crossOrigin": false
      }
```

`clientDataJSON`についての詳細は、関連する用語集の記事をお読みください。

#### transports

```json
"transports": [
        "hybrid",
        "internal"
      ]
```

**transports**プロパティは、認証器がクライアントと通信するためのメカニズムを示します。一般的な値の組み合わせの例は次のとおりです：

- `"transports": ["internal","hybrid"]`: パスキーはプラットフォーム認証器（例：Face
  ID、Touch ID、Windows
  Hello）から、またはクロスデバイス認証（QRコードとBluetoothを使用）を介して使用できます。
- `"transports": ["internal"]`: パスキーはプラットフォーム認証器（例：[Face ID](https://www.corbado.com/faq/is-face-id-passkey)、Touch
  ID、[Windows Hello](https://www.corbado.com/glossary/windows-hello)）から使用できます。
- `transports`プロパティが設定されていない：何も示さないデフォルトの動作。

---

## アテステーションに関するFAQ

### WebAuthnにおいてアテステーションが重要な理由は何ですか？

WebAuthnにおけるアテステーション（アテステーションステートメント）は、認証器の真正性の証明を提供するため重要です。これにより、認証プロセスが信頼できるデバイスによって実行されることが保証され、潜在的なセキュリティ脅威から保護されます。

### パスキーの導入により、アテステーションの役割は変わりましたか？

はい。パスキーはデバイス間で同期できるため（例：iPhoneからMacBookへキーチェーン経由）、リライングパーティはどの証明済みデバイスが実際にアプリやウェブサイトにログインしているかを正確に判断できなくなりました。そのため、[Apple](https://www.corbado.com/ja/blog/how-to-enable-passkeys-macos)とGoogleは同期パスキーに対してアテステーションステートメントを提供しないことを決定しました。しかし、リライングパーティのUXを向上させ、AppleとGoogleのエコシステム（iCloudキーチェーンおよびGoogleパスワードマネージャー）からのパスキーを認識・表示する機会を提供するために、AAGUIDは引き続き提供されます（`PublicKeyCredentialCreationOptions`のWebAuthnサーバー設定でアテステーションが`direct`または`indirect`に設定されている限り）。詳細はこの[GitHub issue](https://github.com/w3c/webauthn/issues/1962)を参照してください。

### パスキーに推奨されるアテステーションの優先設定は何ですか？

ウェブサイトやアプリにパスキー認証を統合し、ユーザーに優れたパスキーUXを提供したい場合は、以下を考慮する必要があります。ここでは、ユーザーのほとんどがWindows、[iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios)、[macOS](https://www.corbado.com/ja/blog/how-to-enable-passkeys-macos)、またはAndroidオペレーティングシステムを使用するシナリオを主に想定してソリューションを構築すると仮定します。さらに、ほとんどのパスキー（Windowsを除く）が同期パスキーであると仮定します。[iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios)、[macOS](https://www.corbado.com/ja/blog/how-to-enable-passkeys-macos)、Androidのいずれもアテステーションステートメントを送信しなくなったため、認証器の実際の検証はもはや使用されません（Windowsではまだ機能します。これはおそらく、WindowsがまだWindows
Helloを介した同期パスキーを提供していないためです）。しかし、アカウント設定でのパスキー管理を改善するためなどにAAGUIDを取得するには、アテステーションの優先設定を`indirect`に設定することをお勧めします。これにより、アテステーションステートメントが送信される（Windows）か送信されない（iOS、[macOS](https://www.corbado.com/ja/blog/how-to-enable-passkeys-macos)、Android）かにかかわらず、AAGUIDを取得できます。

### アテステーションとFIDOメタデータサービスの関係は何ですか？

[FIDO](https://www.corbado.com/ja/blog/visa-passkey)メタデータサービスは、さまざまな認証器のメタデータのリポジトリを提供します。アテステーション中にこのサービスに問い合わせることで、認証器に関する詳細を取得・検証し、プロセスの正確性を保証し、信頼性を高めることができます。[FIDO](https://www.corbado.com/ja/blog/visa-passkey)メタデータサービスは、アテステーションステートメント（アテステーションオブジェクトではない）をチェックします。

### 直接的アテステーションにはプライバシーに関する懸念がありますか？

はい、直接的アテステーション（アテステーションステートメント内）は、デバイスに関する詳細な情報を提供することで最高の透明性を提供しますが、特定のシナリオではプライバシーに関する懸念を引き起こす可能性があります。アテステーションの種類を選択する際には、透明性の必要性とプライバシーの必要性を比較検討することが重要です。

### WebAuthnはアテステーション中にどのようにユーザーのプライバシーを確保しますか？

[WebAuthn](https://www.corbado.com/webauthn)は、none、indirect、direct、enterpriseという異なる種類のアテステーション優先設定を提供します。ユーザーのプライバシーが重要なシナリオでは、`attestation=none`を使用できます。これはデバイスに関する詳細を提供しないため、ユーザーのプライバシーが保護されたままになります。
