Protección de datos sensibles

Protocolo de exposición de datos sensibles en los endpoints de la API

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. 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

Last updated