> ## Documentation Index
> Fetch the complete documentation index at: https://developers.argosidentity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Protección de datos

> Aprenda a reforzar la seguridad de los datos mediante configuración de cifrado de liveform y configuración de transmisión segura.

Las funciones de protección de datos proporcionan opciones de cifrado y transmisión segura para reforzar los niveles de seguridad del proyecto. <br />Se soporta la transmisión y almacenamiento seguro de datos mediante configuración de cifrado de liveform y configuración de transmisión segura.

## Configuración de cifrado de Liveform

Puede mantener niveles de seguridad más altos para los submissions de usuarios mediante la configuración de cifrado de liveform.

<Frame caption="Pantalla de configuración de cifrado de Liveform">
  <img src="https://mintcdn.com/argosidentity/352WpTnZFyEfW7I6/images/dashboard/new/data_protection/livefom_encryption.png?fit=max&auto=format&n=352WpTnZFyEfW7I6&q=85&s=4352a467e76d34ef2856b183a7db7b37" alt="Configuración de cifrado de liveform" width="2230" height="634" data-path="images/dashboard/new/data_protection/livefom_encryption.png" />
</Frame>

### Selección de algoritmo de cifrado

Cuando se necesita cifrado en el Query String de la URL de liveform, los datos deben cifrarse usando el algoritmo de cifrado seleccionado y la clave de cifrado.

| Algoritmo                     | Descripción                                                                    |
| ----------------------------- | ------------------------------------------------------------------------------ |
| **ECB (Electronic Codebook)** | Método de cifrado de bloques rápido y sencillo                                 |
| **GCM (Galois/Counter Mode)** | Método de cifrado mejorado que incluye funciones de autenticación e integridad |

<Info>
  **Cómo usar después de seleccionar el algoritmo**

  Después de seleccionar el algoritmo de cifrado, los parámetros que requieren cifrado en el Query String de la URL de liveform deben cifrarse usando el algoritmo seleccionado y la clave de cifrado, y luego usarse en la forma `encrypted={encrypted_data}`.
</Info>

### Encryption-only Mode

Active encryption-only mode cuando desee cifrar y usar todos los parámetros de Query String.

<Frame caption="Configuración de Encryption-only Mode">
  <img src="https://mintcdn.com/argosidentity/352WpTnZFyEfW7I6/images/dashboard/new/data_protection/encryption_only.png?fit=max&auto=format&n=352WpTnZFyEfW7I6&q=85&s=fa0b6c08e7061ddfb30948aef7bab335" alt="Encryption-only mode" width="2230" height="71" data-path="images/dashboard/new/data_protection/encryption_only.png" />
</Frame>

Cuando encryption-only mode está activado, solo se permiten los parámetros `pid`, `encrypted`, `lang` en la URL de liveform, y todos los demás parámetros deben cifrarse e incluirse en el parámetro `encrypted`.

**Formato de URL permitido:**

```
https://form.argosidentity.com?pid={project_Id}&encrypted={encrypted_data}&lang=ko
```

**Formato de URL no permitido:**

```
https://form.argosidentity.com?pid={project_Id}&encrypted={encrypted_data}&email=user@example.com
```

<Warning>
  **Precauciones de Encryption-only Mode**

  Cuando encryption-only mode está activado, todos los parámetros de Query String no cifrados se ignoran. Todos los datos deben cifrarse e incluirse en el parámetro `encrypted`.
</Warning>

### Gestión de claves de cifrado

Gestiona las claves a usar para cifrado. Puede usar la API KEY o emitir y usar una clave dedicada (secretKey).

<Frame caption="Pantalla de gestión de claves de cifrado">
  <img src="https://mintcdn.com/argosidentity/352WpTnZFyEfW7I6/images/dashboard/new/data_protection/encryption_management.png?fit=max&auto=format&n=352WpTnZFyEfW7I6&q=85&s=6840abccd81e754c4aa8101c2f8e44f3" alt="Gestión de claves de cifrado" width="2230" height="185" data-path="images/dashboard/new/data_protection/encryption_management.png" />
</Frame>

<Frame caption="Popup de emisión de clave de cifrado">
  <img src="https://mintcdn.com/argosidentity/352WpTnZFyEfW7I6/images/dashboard/new/data_protection/encryption_management_pop.png?fit=max&auto=format&n=352WpTnZFyEfW7I6&q=85&s=dc3efeb981c07fe0621789f0ae4d2062" alt="Emisión de clave de cifrado" width="450" height="372" data-path="images/dashboard/new/data_protection/encryption_management_pop.png" />
</Frame>

| Tipo de clave                 | Descripción                                                               |
| ----------------------------- | ------------------------------------------------------------------------- |
| **API KEY**                   | Usar la API key predeterminada asignada al proyecto como clave de cifrado |
| **Dedicated Key (secretKey)** | Clave de cifrado dedicada recién emitida y usada en liveform              |

<Warning>
  **Aviso importante sobre Dedicated Key (secretKey)**

  La clave dedicada (secretKey) recién emitida **solo se muestra en el momento de emisión**, así que asegúrese de almacenarla de forma segura. Si se pierde, debe re-emitir y usar una nueva, y las claves existentes ya no pueden usarse.
</Warning>

<Tip>
  **Guía de selección de clave**

  * **Usar API KEY**: Puede comenzar rápidamente con configuración sencilla.
  * **Usar Dedicated Key (secretKey)**: Puede reforzar la seguridad usando claves diferentes en liveform y API.
</Tip>

***

## Cómo usar el cifrado de URL de Liveform

Aprenda a cifrar y usar parámetros de Query String en URLs de liveform.

### Paso 1: Preparar datos a cifrar

Prepare los parámetros de Query String a cifrar en formato JSON.

<CodeGroup>
  ```json Ejemplo ID document theme={null}
  {
    "email": "user@example.com",
    "userid": "user123",
    "cf1": "custom_field_1",
    "cf2": "custom_field_2",
    "cf3": "custom_field_3",
    "token": "token_id"
  }
  ```

  ```json Ejemplo Knowledge-based theme={null}
  {
    "email": "user@example.com",
    "userid": "user123",
    "knowledgeField": "birthDate,gender,nationality",
    "knowledgePrefill": "gender=male,nationality=USA,birthDate=1980-01-01"
  }
  ```
</CodeGroup>

<Note>
  **Parámetros no cifrables**

  Los query strings `pid`, `lang` y los query strings `sid`, `action` usados en la página 'Additional Process (Injection)' no soportan cifrado. Sin embargo, al usar Injection, `sid` y `action` deben cifrarse incluyéndolos dentro del parámetro `encrypted`.
</Note>

### Paso 2: Realizar cifrado

Cifre los datos usando el algoritmo de cifrado seleccionado (ECB o GCM) y la clave de cifrado (API KEY o secretKey).

<Card title="Guía de cifrado" icon="lock" href="/es/idcheck/getting-started/encrypt-and-decrypt-data/overview">
  Consulte métodos detallados de cifrado/descifrado y ejemplos de código.
</Card>

**Ejemplo de cifrado (método ECB):**

```javascript theme={null}
// Node.js example
const crypto = require('crypto');

function encryptECB(data, apiKey) {
  const hashedKey = crypto.createHash('sha256').update(apiKey).digest();
  const cipher = crypto.createCipheriv('aes-256-ecb', hashedKey, null);
  return cipher.update(JSON.stringify(data), 'utf8', 'base64') + cipher.final('base64');
}

// Usage example
const data = {
  email: "user@example.com",
  userid: "user123",
  token: "token_id"
};
const encrypted = encryptECB(data, 'YOUR_API_KEY_OR_SECRET_KEY');
```

### Paso 3: Agregar datos cifrados a la URL

Agregue los datos cifrados al parámetro de consulta `encrypted`.

```
https://form.argosidentity.com?pid={project_Id}&encrypted={encrypted_data}
```

<Info>
  **Codificación de URL**

  Los datos cifrados deben codificarse para URL antes de usarse en URLs.
</Info>

***

## Configuración de transmisión segura

Configuración para reforzar la seguridad en la transmisión de datos mediante métodos API.

<Frame caption="Pantalla de configuración de transmisión segura">
  <img src="https://mintcdn.com/argosidentity/352WpTnZFyEfW7I6/images/dashboard/new/data_protection/secure_data_transfer.png?fit=max&auto=format&n=352WpTnZFyEfW7I6&q=85&s=cedeafc03cbd672531f76091fc3e6786" alt="Configuración de transmisión segura" width="2246" height="227" data-path="images/dashboard/new/data_protection/secure_data_transfer.png" />
</Frame>

### Secure Data Transmission

Cuando la opción secure data transmission está activada, toda la transmisión de datos entre ARGOS y los clientes se cifra.

| Configuración                | Descripción                                                                 |
| ---------------------------- | --------------------------------------------------------------------------- |
| **Secure Data Transmission** | Cifra y transmite datos en métodos API (GET, POST, PATCH, etc.) y webhooks. |

<Warning>
  **Importante: Se requiere cifrado/descifrado**

  Cuando la opción secure data transmission está activada, todos los datos de solicitud (Request) y respuesta (Response) de API deben cifrarse/descifrarse. Ocurren errores si se realizan solicitudes con datos no cifrados.
</Warning>

### Cifrado de datos de solicitud API

Cuando secure data transmission está activado, el Request Body debe cifrarse al realizar solicitudes API.

**Métodos de cifrado:**

* **Solicitudes API (GET, POST, PATCH)**: Método AES-256-ECB
* **Datos de Webhook**: Método AES-256-CBC

**Ejemplo de solicitud:**

```javascript theme={null}
// POST /submission request example
const requestData = {
  email: "user@example.com",
  fullName: "John Doe",
  issuingCountry: "USA",
  birthDate: "1990-01-01"
};

// Encrypt data
const encryptedBody = encryptECB(requestData, apiKey);

// Send encrypted data as body
fetch('https://rest-api.argosidentity.com/v3/submission', {
  method: 'POST',
  headers: {
    'x-api-key': apiKey,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    body: encryptedBody
  })
});
```

### Descifrado de datos de respuesta API

Cuando secure data transmission está activado, las respuestas API también se cifran, por lo que se requiere descifrado.

**Formato de respuesta:**

```json theme={null}
{
  "data": "encrypted-string",
  "isEncrypted": true
}
```

**Ejemplo de descifrado:**

```javascript theme={null}
// Response processing
const response = await fetch('https://rest-api.argosidentity.com/v3/submission/{submissionId}', {
  headers: {
    'x-api-key': apiKey
  }
});

const responseData = await response.json();

if (responseData.isEncrypted) {
  // Decrypt encrypted data
  const decryptedData = decryptECB(responseData.data, apiKey);
  const submission = JSON.parse(decryptedData);
  console.log(submission);
} else {
  // Unencrypted case (generally does not occur)
  console.log(responseData);
}
```

### Cifrado/descifrado de datos de Webhook

Los datos de webhook se cifran usando el método AES-256-CBC.

<Card title="Guía de cifrado" icon="lock" href="/es/idcheck/getting-started/encrypt-and-decrypt-data/overview#4-secure-data-transmission-option">
  Aprenda los métodos de cifrado/descifrado de datos de webhook en detalle.
</Card>

***

## Guía de configuración por escenario

<AccordionGroup>
  <Accordion title="Escenario 1: Uso selectivo de cifrado" icon="key">
    Cuando selecciona un algoritmo de cifrado y cifra solo algunos Query Strings.

    **Configuración:**

    * Algoritmo de cifrado: Seleccionar ECB o GCM
    * Clave de cifrado: Seleccionar API KEY o clave dedicada
    * Encryption-only Mode: Desactivado

    **Ejemplo de uso:**

    ```
    https://form.argosidentity.com?pid={project_Id}&email=user@example.com&encrypted={encrypted_token_data}
    ```

    En este caso, `email` es un parámetro normal, e información sensible como `token` se cifra e incluye en el parámetro `encrypted`.
  </Accordion>

  <Accordion title="Escenario 2: Uso de cifrado completo (Encryption-only Mode)" icon="lock">
    Cuando cifra y usa todos los parámetros de Query String.

    **Configuración:**

    * Algoritmo de cifrado: Seleccionar ECB o GCM
    * Clave de cifrado: Seleccionar API KEY o clave dedicada
    * Encryption-only Mode: Activado

    **Ejemplo de uso:**

    ```
    https://form.argosidentity.com?pid={project_Id}&encrypted={all_parameters_encrypted_data}&lang=ko
    ```

    En este caso, todos los parámetros excepto `pid`, `lang` deben cifrarse e incluirse en el parámetro `encrypted`.
  </Accordion>

  <Accordion title="Escenario 3: Refuerzo de seguridad en transmisión de datos API" icon="shield-check">
    Cuando refuerza la seguridad para la transmisión de datos vía API.

    **Configuración:**

    * Secure Data Transmission: Activado

    **Tareas requeridas:**

    * Cifrar todas las solicitudes API (Request Body)
    * Descifrar todas las respuestas API (Response Body)
    * Descifrar datos recibidos de webhook

    <Warning>
      Cuando secure data transmission está activado, toda la comunicación API se cifra, por lo que debe implementarse lógica de cifrado/descifrado en el lado del cliente.
    </Warning>
  </Accordion>
</AccordionGroup>

***

## Documentación relacionada

<CardGroup cols={2}>
  <Card title="Control de acceso" icon="user-shield" href="/dashboard/es/project-management/security-settings/access-control">
    Consulte la configuración de private mode y gestión de Token ID.
  </Card>

  <Card title="Guía de cifrado" icon="lock" href="/es/idcheck/getting-started/encrypt-and-decrypt-data/overview">
    Consulte métodos detallados de cifrado/descifrado y ejemplos de código.
  </Card>

  <Card title="Guía de Query String" icon="link" href="/es/idcheck/getting-started/liveform-url/querystring-and-token-guide">
    Aprenda a usar parámetros de Query String.
  </Card>

  <Card title="Referencia de API" icon="code" href="/es/idcheck/api-reference/api-reference-guide/overview">
    Aprenda a usar las APIs.
  </Card>
</CardGroup>
