---
url: 'https://www.corbado.com/es/glossary/attestation'
title: 'Atestación'
description: 'Aprenda más sobre la atestación en WebAuthn / passkeys y descubra su relevancia en la autenticación de usuarios, junto con su conexión con el servicio de metadatos FIDO.'
lang: 'es'
keywords: 'atestación'
---

# Atestación

## ¿Qué es la Atestación?

**Atestación** puede referirse a tres cosas (a menudo, en el lenguaje hablado, se usan
indistintamente aunque significan algo diferente si se toman con precisión):

1. En primer lugar y de manera más general, la atestación en el espacio criptográfico es
   un término donde una parte "atestigua" criptográficamente una declaración a otra parte.

2. En segundo lugar, durante la fase de registro en WebAuthn, el autenticador crea un
   **objeto de atestación** y lo devuelve a la Parte de Confianza (Relying Party). Es un
   objeto contenedor que contiene la siguiente información:
    - [formato de la declaración de atestación (`fmt`)](https://www.iana.org/assignments/webauthn/webauthn.xhtml)
    - declaración de atestación (`attStmt` - ver más abajo)
    - datos del autenticador (`authData`)

3. En tercer lugar, en WebAuthn, una **declaración de atestación** es un elemento opcional
   del objeto de atestación. Esta declaración, cuando se incluye, verifica ciertas
   características del autenticador (dispositivo) involucrado en el proceso de atestación.
   Sin embargo, algunos fabricantes de dispositivos (por ejemplo, Apple) no ofrecen una
   declaración de atestación porque este aspecto de la especificación no fue diseñado para
   la sincronización de passkeys y no logra verificar eficazmente los atributos de
   [seguridad](https://www.corbado.com/es/blog/contrasenas-complejas-descifradas-pronto) cuando las credenciales
   pueden sincronizarse entre diferentes dispositivos (por ejemplo, una passkey se crea en
   un iPhone pero también se usa en un MacBook ya que se sincroniza a través del mismo
   Llavero de iCloud). Características que se pueden proporcionar cuando se incluye la
   declaración de atestación:
    - Ofrecer prueba de que se utilizó un dispositivo genuino y de confianza durante la
      [autenticación](https://www.corbado.com/es/glossary/jwks).
    - Proporcionar detalles sobre el origen, modelo y otra información pertinente del
      dispositivo.
    - Mejorar las medidas de
      [seguridad](https://www.corbado.com/es/blog/contrasenas-complejas-descifradas-pronto), especialmente en
      escenarios donde la confiabilidad del dispositivo es crucial (por ejemplo, ciertas
      industrias reguladas como la [sanidad](https://www.corbado.com/passkeys-for-healthcare)).

El siguiente diagrama de flujo del proceso de Registro muestra el papel de la atestación
(objeto) en WebAuthn:

![El objeto de atestación es una parte central del Registro en WebAuthn](https://www.corbado.com/website-assets/cs_1_1_registration_flow_e44a658ca7.png)

### Ejemplo de un objeto de atestación

```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"
    }
}
```

En la captura de pantalla anterior, no se proporciona ningún [AAGUID](https://www.corbado.com/glossary/aaguid) ni
ninguna declaración de atestación.

Continúe leyendo para un desglose técnico de los atributos más importantes.

## Puntos Clave

> - La atestación se refiere al proceso en el que una parte atestigua criptográficamente una
>   declaración a otra parte.
> - El objeto de atestación en WebAuthn es creado por el autenticador y se pasa durante el
>   Registro. Contiene, entre otros, el [AAGUID](https://www.corbado.com/glossary/aaguid), el ID de credencial y la
>   clave pública.
> - La declaración de atestación en WebAuthn es un campo opcional en el objeto de atestación
>   que asegura que se utilizó un dispositivo genuino para la
>   [autenticación](https://www.corbado.com/es/glossary/jwks).

---

### Comprendiendo la Esencia de la Atestación

En [WebAuthn](https://www.corbado.com/webauthn), la atestación garantiza que la
[autenticación](https://www.corbado.com/es/glossary/jwks) del usuario sea segura y transparente. Con la
declaración de atestación, puede asegurarse de que una credencial fue creada en un
autenticador / dispositivo específico.

### Tipos de Atestación:

Estos tipos de atestación se refieren a la **declaración de atestación** (no al objeto de
atestación). Son considerados como una preferencia por la parte de confianza (relying
party) (por lo que el autenticador puede comportarse de manera diferente, ya que es solo
una preferencia).

- **Sin Atestación (`none`)**: Para casos donde la privacidad es de suma importancia o se
  utilizan dispositivos sincronizados, este tipo no proporciona información sobre el
  dispositivo, asegurando que la privacidad del usuario permanezca intacta. Otra razón
  para usar este valor podría ser para ahorrar un viaje de ida y vuelta a una autoridad de
  certificación (CA). `none` también es el valor predeterminado.
- **Atestación Indirecta (`indirect`)**: La parte de confianza (relying party) prefiere
  obtener una atestación pero permite que el cliente decida cómo obtener las declaraciones
  de atestación. El cliente puede reemplazar las declaraciones de atestación generadas por
  el autenticador con declaraciones de atestación anónimas para proteger la privacidad del
  usuario.
- **Atestación Directa (`direct`)**: Esta es la forma más transparente. Aquí, la parte de
  confianza (relying party) le dice al autenticador que quiere una declaración de
  atestación, para que la parte de confianza (relying party) obtenga información detallada
  sobre el dispositivo, incluyendo su marca, modelo y otros detalles específicos. Aunque
  ofrece la mayor transparencia, puede plantear preocupaciones de privacidad en ciertos
  escenarios o podría no ser realmente utilizable para credenciales sincronizadas.
- **Atestación Empresarial (`enterprise`)**: La parte de confianza (relying party) desea
  recibir una declaración de atestación que pueda incluir información de identificación
  única. Este tipo de atestación se utiliza típicamente en empresas u organizaciones que
  desean hacer un seguimiento de dispositivos / autenticadores específicos. Los
  navegadores [web](https://www.corbado.com/es/blog/proveedores-passkeys) (agentes de usuario) no deben
  proporcionar esta atestación detallada a menos que su configuración lo permita
  específicamente para la parte solicitante. Si la configuración lo permite, el navegador
  debe informar al dispositivo al inicio del proceso que se está solicitando este tipo
  específico de atestación. Luego, el navegador debe pasar el ID único del dispositivo y
  la prueba de atestación exactamente como los recibe a la parte de confianza.

### Atributos del objeto de atestación

El **objeto de atestación** contiene muchos atributos, aquí hay una explicación rápida de
algunos atributos seleccionados:

#### 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"
          }
        }
```

El **attestationObject** es un objeto codificado en [CBOR](https://www.corbado.com/glossary/cbor), que contiene
información sobre las credenciales recién creadas, la clave pública y otros datos
relevantes:

- **fmt** representa el formato de atestación, ya que los autenticadores pueden
  proporcionar datos de atestación de diferentes maneras. Le dice al servidor cómo debe
  validar los datos de atestación. Los valores permitidos son "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/es/glossary/cda)-u2f", "apple" o "none". Vea los detalles
  [aquí](https://www.iana.org/assignments/webauthn/webauthn.xhtml)
- **attStmt** es la declaración de atestación. Para las passkeys, por ejemplo, en
  dispositivos [iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios) o
  [Android](https://www.corbado.com/blog/how-to-enable-passkeys-android), se deja vacío ya que las passkeys en
  [iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios) o Android pueden sincronizarse, y se rellena
  para otros dispositivos como en Windows o
  [llaves de seguridad de hardware](https://www.corbado.com/es/blog/mejores-llaves-seguridad-hardware-fido2).
- **authData** es un búfer de valores que contiene los siguientes datos:
  ![authData contiene datos como el hash de rpId o indicadores importantes](https://www.corbado.com/website-assets/cs_2_3_auth_Data_32c5cbba19.png)
  Los
  [datos de credencial atestiguados](https://www.w3.org/TR/webauthn-2/#attested-credential-data)
  juegan un papel importante aquí. Contienen:
    - [AAGUID](https://www.corbado.com/glossary/aaguid),
    - Longitud del ID de Credencial,
    - ID de Credencial y
    - Clave pública de la credencial.

#### attStmt (declaración de atestación)

Al contrario que en el objeto de atestación anterior, donde `attStmt` se dejó vacío por
razones de legibilidad, así es como se vería una declaración de atestación completa.

```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`: La propiedad `alg` indica el identificador del algoritmo criptográfico utilizado
  por el autenticador para firmar la declaración de atestación.
- `sig`: La propiedad `sig` contiene la firma digital generada por el autenticador. Esta
  firma se utiliza para verificar la autenticidad de la declaración de atestación.
- `ver`: La propiedad `ver` especifica la versión del formato de la declaración de
  atestación.
- `x5c`: El array `x5c` contiene uno o más certificados X.509 que forman una ruta de
  certificación, lo que ayuda a validar la atestación.
- `pubArea`: La propiedad `pubArea` contiene información detallada sobre la clave pública
  y las características del autenticador.
- `certInfo`: La propiedad `certInfo` típicamente incluye información sobre la
  certificación del autenticador por una parte de confianza.

#### clientDataJSON

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

Lea más sobre `clientDataJSON` en el artículo del glosario respectivo.

#### transports

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

La propiedad **transports** indica los mecanismos a través de los cuales un autenticador
puede comunicarse con un cliente. Algunas combinaciones de valores de ejemplo comunes son:

- `"transports": ["internal","hybrid"]`: Las passkeys se pueden usar desde el autenticador
  de plataforma (por ejemplo, [Face ID](https://www.corbado.com/faq/is-face-id-passkey), Touch ID,
  [Windows Hello](https://www.corbado.com/glossary/windows-hello)) o mediante
  [autenticación entre dispositivos](https://www.corbado.com/es/blog/transportes-webauthn-interno-hibrido)
  (usando [código QR](https://www.corbado.com/es/blog/inicio-sesion-codigo-qr-autenticacion) y
  [Bluetooth](https://www.corbado.com/es/blog/parallels-passkeys-cda)).
- `"transports": ["internal"]`: Las passkeys se pueden usar desde el autenticador de
  plataforma (por ejemplo, [Face ID](https://www.corbado.com/faq/is-face-id-passkey), Touch ID,
  [Windows Hello](https://www.corbado.com/glossary/windows-hello))
- Sin propiedad `transports` establecida: comportamiento predeterminado que no da
  indicaciones.

---

## Preguntas Frecuentes sobre Atestación

### ¿Por qué es crucial la atestación en WebAuthn?

La atestación (la declaración de atestación) en WebAuthn es importante ya que ofrece
prueba de la autenticidad de un autenticador. Asegura que el proceso de autenticación se
lleva a cabo por un dispositivo de confianza, protegiendo así contra posibles amenazas de
[seguridad](https://www.corbado.com/es/blog/contrasenas-complejas-descifradas-pronto).

### ¿Ha cambiado la introducción de las passkeys el papel de la atestación?

Sí, ya que las passkeys pueden sincronizarse entre dispositivos (por ejemplo, de iPhone a
MacBook a través del Llavero de iCloud), las partes de confianza ya no pueden determinar
realmente qué dispositivo atestiguado está iniciando sesión en una aplicación o sitio
[web](https://www.corbado.com/es/blog/proveedores-passkeys). Por lo tanto, Apple y Google decidieron que para las
passkeys sincronizadas, ya no proporcionarán declaraciones de atestación. Sin embargo,
para mejorar la experiencia de usuario para las partes de confianza y darles la
oportunidad de reconocer y mostrar passkeys de los ecosistemas de Apple y Google (Llavero
de iCloud y
[Administrador de Contraseñas de Google](https://www.corbado.com/es/blog/como-usar-administrador-de-contraseñas-google)),
el AAGUID seguirá proporcionándose (siempre que la atestación esté configurada en `direct`
o `indirect` en la configuración del servidor WebAuthn para las
`PublicKeyCredentialCreationOptions`. Consulte este
[issue de GitHub](https://github.com/w3c/webauthn/issues/1962) para más detalles.

### ¿Cuál es la configuración de preferencia de atestación recomendada para las passkeys?

Si desea integrar la autenticación con passkeys en su sitio
[web](https://www.corbado.com/es/blog/proveedores-passkeys) y aplicación, y quiere ofrecer a sus usuarios una
gran experiencia de usuario con passkeys, debe considerar lo siguiente. Suponemos que
construye su solución principalmente para un escenario donde la mayoría de sus usuarios
utilizan un sistema operativo Windows, [iOS](https://www.corbado.com/blog/how-to-enable-passkeys-ios), macOS o
Android. Además, suponemos que la mayoría de las passkeys (aparte de las de Windows) son
passkeys sincronizadas. Como ni iOS, macOS ni Android envían ya una declaración de
atestación, la validación real de un autenticador ya no se utiliza (para Windows esto
todavía funciona, probablemente porque Windows aún no ofrece passkeys sincronizadas a
través de [Windows Hello](https://www.corbado.com/glossary/windows-hello)). Sin embargo, para obtener el AAGUID,
por ejemplo, para una mejor gestión de passkeys en la configuración de la cuenta,
recomendamos establecer la preferencia de atestación en `indirect`, ya que esto aún
permitiría obtener el AAGUID mientras que la declaración de atestación se envía (Windows)
o no se envía (iOS, macOS, Android).

### ¿Cuál es la conexión entre la atestación y el servicio de metadatos FIDO?

El servicio de metadatos [FIDO](https://www.corbado.com/es/glossary/cda) proporciona un repositorio de metadatos
para varios autenticadores. Durante la atestación, este servicio puede ser consultado para
obtener y validar detalles sobre el autenticador, asegurando la precisión y mejorando la
confiabilidad del proceso. El servicio de metadatos [FIDO](https://www.corbado.com/es/glossary/cda) verifica la
declaración de atestación (no el objeto de atestación).

### ¿Existen preocupaciones de privacidad con la atestación directa?

Sí, la atestación directa (en la declaración de atestación), aunque ofrece la mayor
transparencia al proporcionar información detallada sobre el dispositivo, puede plantear
preocupaciones de privacidad en ciertos escenarios. Es crucial evaluar la necesidad de
transparencia frente a la privacidad al elegir el tipo de atestación.

### ¿Cómo garantiza WebAuthn la privacidad del usuario durante la atestación?

[WebAuthn](https://www.corbado.com/webauthn) ofrece diferentes tipos de preferencias de
atestación: none, indirect, direct y enterprise. Para escenarios donde la privacidad del
usuario es importante, se puede emplear `attestation=none`, que no proporciona detalles
sobre el dispositivo, asegurando que la privacidad del usuario permanezca protegida.
