firma digital basada en Infraestructura de Clave Pública (PKI)-javascript

 A continuación, te proporcionaré una guía básica para implementar una solución simple de firma digital utilizando Node.js. Esta aplicación incluirá la generación de claves, la creación de una firma digital y la verificación de dicha firma.

Requisitos Previos

  • Node.js instalado en tu máquina.
  • Familiaridad básica con JavaScript y Node.js.
  • Paquete crypto de Node.js para operaciones criptográficas.

Paso 1: Configuración del Proyecto

  1. Crea un nuevo directorio para tu proyecto y navega a él:

mkdir digital-signature-app
cd digital-signature-app

    2.-Inicializa un nuevo proyecto de Node.js:

npm init -y


       3-Instala las dependencias necesarias: Aunque el paquete crypto es parte de Node.js, necesitaremos         algunas utilidades adicionales para manejar archivos y otros componentes.

npm install crypto fs

Paso 2: Generación de Claves

Vamos a generar un par de claves (privada y pública) utilizando el módulo crypto.

  1. Crea un archivo generate-keys.js:

const { generateKeyPairSync } = require('crypto');
const fs = require('fs');

const { publicKey, privateKey } = generateKeyPairSync('rsa', {
    modulusLength: 2048,
    publicKeyEncoding: {
        type: 'spki',
        format: 'pem'
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'pem'
    }
});

fs.writeFileSync('private_key.pem', privateKey);
fs.writeFileSync('public_key.pem', publicKey);

console.log('Keys generated and saved to files');

2-Ejecuta el script para generar las claves:

node generate-keys.js

Paso 3: Firma Digital

1-Crea un archivo sign.js:

const { createSign } = require('crypto');
const fs = require('fs');

const privateKey = fs.readFileSync('private_key.pem', 'utf8');
const data = 'This is the data to sign';

const sign = createSign('SHA256');
sign.update(data);
sign.end();

const signature = sign.sign(privateKey, 'hex');

console.log('Data:', data);
console.log('Signature:', signature);

2-Ejecuta el script para firmar los datos:

node sign.js

Paso 4: Verificación de la Firma

1-Crea un archivo verify.js:


const { createVerify } = require('crypto');
const fs = require('fs');

const publicKey = fs.readFileSync('public_key.pem', 'utf8');
const data = 'This is the data to sign';
const signature = 'LA_FIRMA_GENERADA';

const verify = createVerify('SHA256');
verify.update(data);
verify.end();

const isValid = verify.verify(publicKey, signature, 'hex');

console.log('Is signature valid?', isValid);

2-Reemplaza 'LA_FIRMA_GENERADA' con la firma generada en el paso anterior.

3-Ejecuta el script para verificar la firma:

node verify.js

Explicación de los Componentes

  1. generateKeyPairSync: Genera un par de claves (pública y privada) utilizando el algoritmo RSA.
  2. createSign: Crea un objeto de firma que utiliza SHA256 para el hash.
  3. sign.sign: Firma los datos con la clave privada y devuelve la firma en formato hexadecimal.
  4. createVerify: Crea un objeto de verificación para verificar la firma.
  5. verify.verify: Verifica la firma utilizando la clave pública y los datos originales.

Conclusión

Hemos creado una aplicación básica de firma digital utilizando Node.js. Esta implementación incluye la generación de claves, la firma de datos y la verificación de la firma. En un entorno de producción, necesitarás manejar las claves y las firmas de manera más segura y posiblemente utilizar bibliotecas adicionales para la gestión de certificados y claves más avanzadas.

Comentarios