# Protección de datos sensibles

En GBC hemos realizado un protocolo seguro para poder tener datos sensibles en nuestros Módulos de API.

### ¿Qué **consideramos como un dato sensible?**

Hemos definido un dato sensible como una información importante que necesite una capa más de seguridad con el objetivo de cumplir leyes, normas, reglamentos y/o certificaciones. Unos casos de ejemplo pueden ser datos personales de un cliente final o también podemos ver un dato sensible como los números de una tarjeta de débito y/o crédito.

### **Proceso de consulta de endpoint con datos sensibles**

1. Se deben solicitar las llaves que permitirá desencriptar los datos sensibles en el endpoint (/api-hub/v1/dynamic-keys). Este endpoint devuelve la información de la llave secreta generada como uso único y el campo (key\_id).
2. &#x20;Se debe invocar el endpoint que contiene data sensible enviando los datos necesarios y agregando el campo (key\_id).

### Proceso de desencriptar datos sensibles

En esta sección se detallan cómo desencriptar o ver los datos sensibles, cada dato está en formato base64.

**Paso a paso para desencriptar**

1. Obtener a la disponibilidad el PrivateKey (Llave privada), el passphrase (Frase de contraseña), y el dato encriptado de **base64,** es necesario convertir el dato a **Buffer.**
2. Ejecutar la función para desencriptar y enviar como parámetros el passpharse, privateKey, dataEncrypted de tipo **Buffer.**
3. La función retorna el dato original, para visualizar es necesario convertir a **utf8.**

**Ejemplo en NodeJS**

```
const { publicEncrypt, constants, privateDecrypt } = require('crypto');

function decrypt(passphrase: string, privateKey: string, dataEncrypted: Buffer) {
    return privateDecrypt(
      {
        key: privateKey,
        padding: constants.RSA_PKCS1_OAEP_PADDING,
        oaepHash: "sha512",
        passphrase
      },
      dataEncrypted
    ); 
}
// Convert base64 to Buffer
const encryptedBuff = Buffer.from(dataBase64, 'base64')

// Decrypt Data
const decrypt = decrypt(keys.passphrase, keys.privateKey, encryptedBuff);
console.log('decrypt::', decrypt)

// Decrypt plain
console.log('decrypt:: REAL DATA', decrypt.toString('utf8'))
```

### **Endpoints relacionados** con datos sensibles

{% content-ref url="../reference/api-reference/cards" %}
[cards](https://docs.globalbridgeconnections.com/reference/api-reference/cards)
{% endcontent-ref %}
