Crear una aplicación de firma digital basada en Infraestructura de Clave Pública (PKI) utilizando JavaScript y Node.js implica varios pasos importantes. 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
Crea un nuevo directorio para tu proyecto y navega a él:
mkdir digital-signature-app
cd digital-signature-app
Inicializa un nuevo proyecto de Node.js:
npm init -y
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
Generación de Claves
Vamos a generar un par de claves (privada y pública) utilizando el módulo crypto.
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');
Ejecuta el script para generar las claves:
node generate-keys.js
Paso 3: Firma Digital
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);
Ejecuta el script para firmar los datos:
node sign.js
Paso 4: Verificación de la Firma
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);
Reemplaza 'LA_FIRMA_GENERADA' con la firma generada en el paso anterior.
Ejecuta el script para verificar la firma:
node verify.js
Explicación de los Componentes
generateKeyPairSync: Genera un par de claves (pública y privada) utilizando el algoritmo RSA.createSign: Crea un objeto de firma que utiliza SHA256 para el hash.sign.sign: Firma los datos con la clave privada y devuelve la firma en formato hexadecimal.createVerify: Crea un objeto de verificación para verificar la firma.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
Publicar un comentario