Security(B) es una suite completa de herramientas de seguridad digital implementada con React y Material UI en el frontend y Node.js con Express en el backend. La plataforma ofrece múltiples servicios de seguridad integrados:
- Generador avanzado de contraseñas seguras: Crea contraseñas complejas y personalizadas con entropía medible
- Sistema de notas seguras encriptadas: Comparte información confidencial con cifrado de extremo a extremo
- Generador interactivo con GIFs: Función especial que utiliza la interacción con GIFs para crear contraseñas únicas
- Medición de entropía y seguridad: Análisis en tiempo real de la fortaleza de contraseñas
Todas las operaciones de encriptación utilizan algoritmos de nivel militar (AES-256-GCM, AES-512) y están diseñadas siguiendo las mejores prácticas de seguridad.
La entropía es una medida matemática de la aleatoriedad o imprevisibilidad de una contraseña. En criptografía, se expresa en bits y es crucial para evaluar la resistencia de una contraseña contra ataques de fuerza bruta.
La entropía de una contraseña se calcula mediante la siguiente fórmula:
Entropía = L × log₂(R)
Donde:
- L = Longitud de la contraseña (número de caracteres)
- R = Rango de caracteres posibles (tamaño del conjunto)
- log₂ = Logaritmo en base 2
Por ejemplo, para una contraseña de 14 caracteres usando letras minúsculas (26), mayúsculas (26), números (10) y símbolos especiales (32):
Entropía = 14 × log₂(94) ≈ 14 × 6.55 ≈ 91.7 bits
Nivel | Rango de entropía | Tiempo de crackeo* | Recomendación |
---|---|---|---|
Muy débil | < 28 bits | Segundos a minutos | Nunca usar para cuentas importantes |
Débil | 28-35 bits | Minutos a horas | Insuficiente para la mayoría de propósitos |
Razonable | 36-59 bits | Días a meses | Aceptable para cuentas de bajo riesgo |
Fuerte | 60-127 bits | Años a décadas | Recomendado para cuentas importantes |
Muy fuerte | ≥ 128 bits | Siglos o más | Ideal para información crítica o sensible |
*Estimado con hardware moderno (≈1 billón de intentos/segundo)
-
Contraseña simple (8 caracteres, solo minúsculas):
- 8 × log₂(26) ≈ 37.6 bits → Razonable
-
Contraseña de 14 caracteres (minúsculas, mayúsculas, números):
- 14 × log₂(62) ≈ 83.4 bits → Fuerte
-
Contraseña de 4 palabras aleatorias separadas:
- Usando diccionario de 8000 palabras: log₂(8000⁴) ≈ 52 bits → Razonable
El generador de contraseñas tradicional permite crear contraseñas altamente seguras y personalizables con múltiples opciones.
- Generación de contraseñas basadas en movimientos del ratón para mayor aleatoriedad
- Longitud personalizable (14-100 caracteres)
- Inclusión configurable de minúsculas, mayúsculas, números, símbolos, brackets y caracteres high ANSI
- Opción para generar contraseñas basadas en palabras aleatorias
- Evaluación en tiempo real de la fortaleza de la contraseña
- Cálculo de entropía y tiempo estimado de crackeo
Nuestro innovador método "Entropía Amazing" amplía el concepto tradicional de entropía incorporando fuentes únicas de aleatoriedad a través de la interacción con GIFs.
Esta técnica proporciona una capa adicional de seguridad y es especialmente resistente a ataques basados en diccionarios o patrones, ya que incorpora elementos biométricos indirectos (patrones de movimiento del ratón) y preferencias personales.
La entropía total cuando se usa el generador basado en GIFs se calcula mediante:
Entropía Amazing = E_gif + E_interact + E_mouse + E_time
Donde:
- E_gif: Entropía derivada de los GIFs seleccionados (≈ 10 bits por GIF)
- E_interact: Entropía de las interacciones del usuario (me gusta/no me gusta)
- E_mouse: Entropía de los movimientos del ratón
- E_time: Entropía basada en timestamps
- Introduce un término de búsqueda para encontrar GIFs
- Interactúa con los GIFs (me gusta/no me gusta)
- El sistema captura estos datos más los movimientos del ratón
- Se genera una contraseña única con entropía significativamente mayor que los métodos tradicionales
El sistema de notas seguras permite compartir información confidencial con cifrado de extremo a extremo.
- Cifrado de extremo a extremo mediante algoritmos avanzados
- Múltiples algoritmos disponibles (AES-256-GCM, AES-256-CBC, AES-512-GCM, AES-512-CBC, ChaCha20-Poly1305)
- Protección opcional con contraseña adicional
- Opción de auto-destrucción tras lectura
- Expiración configurable por tiempo
- Interfaz de usuario intuitiva con botones y chips para seleccionar opciones
- Notificaciones visuales para confirmación de acciones
- Diseño responsivo utilizando Material UI
- Tema claro/oscuro para mejorar la experiencia de usuario
- Soporte para múltiples idiomas (inglés, español)
El proyecto está organizado en una arquitectura moderna con React en el frontend y Node.js/Express en el backend:
Security(B)/
├── public/ # Archivos públicos
│ └── img/ # Imágenes para el README
├── src/ # Código fuente
│ ├── components/ # Componentes React
│ │ ├── PasswordGenerator.js # Generador principal
│ │ ├── GiphyPasswordGenerator.js # Generador basado en GIFs
│ │ ├── SecureNoteSharing.js # Creador de notas seguras
│ │ ├── AccessSecureNote.js # Visualizador de notas seguras
│ │ └── ... # Otros componentes
│ ├── contexts/ # Contextos de React
│ ├── hooks/ # Hooks personalizados
│ ├── utils/ # Utilidades y funciones
│ ├── App.js # Componente principal
│ └── index.js # Punto de entrada
├── backend/ # Backend en Node.js
│ ├── server.js # Servidor Express
│ └── package.json # Dependencias backend
├── package.json # Dependencias frontend
└── manage.sh # Script para gestionar la aplicación
El frontend está desarrollado con React y Material UI, proporcionando una interfaz moderna e intuitiva:
-
components/
: Contiene todos los componentes React:PasswordGenerator.js
: Generador tradicional de contraseñas.GiphyPasswordGenerator.js
: Innovador generador que usa la API de Giphy.SecureNoteSharing.js
: Componente para crear y enviar notas seguras encriptadas.AccessSecureNote.js
: Componente para acceder y descifrar notas seguras.EntropyExplanation.js
: Explica el concepto de entropía.BruteForceExplanation.js
: Explica los ataques de fuerza bruta.
-
contexts/
: Contextos de React para gestionar estados globales como temas. -
hooks/
: Hooks personalizados:usePasswordGenerator
: Lógica para generar contraseñas.
-
utils/
: Funciones utilitarias:passwordGenerator.js
: Algoritmos de generación de contraseñas.
El backend proporciona servicios y APIs necesarios para la aplicación:
server.js
: Servidor Express con endpoints para:- Evaluar la fortaleza de contraseñas
- Compartir contraseñas temporalmente
- Obtener palabras aleatorias para contraseñas basadas en palabras
- Gestionar notas seguras encriptadas
- Enviar notificaciones por correo electrónico
Un script bash para facilitar la gestión de la aplicación:
- Inicia/detiene el frontend y backend
- Monitorea el estado de los servicios
- Instala dependencias
- Compila la aplicación para producción
-
Clona el repositorio:
git clone https://github.com/the00b/password-generador.git cd password-generador
-
Configuración inicial:
- Crea un archivo
.env
en el directorio raíz con tu API key de Giphy y Resend:REACT_APP_GIPHY_API_KEY=tu_api_key_de_giphy RESEND_API_KEY=tu_api_key_de_resend [email protected]
- Para obtener una API key de Giphy, regístrate en developers.giphy.com
- Para obtener una API key de Resend, regístrate en resend.com
- Crea un archivo
-
Instala las dependencias:
./manage.sh install
-
Inicia la aplicación:
./manage.sh start
Esto iniciará tanto el servidor backend como la aplicación frontend.
-
Usa el generador de contraseñas:
- Navega a
http://localhost:3000
en tu navegador. - Selecciona el tipo de generador (tradicional o basado en GIFs).
- Configura las opciones de tu contraseña.
- Copia la contraseña o compártela de forma segura.
- Navega a
-
Usa el compartidor de notas seguras:
- Navega a
http://localhost:3000/secure-notes
en tu navegador. - Escribe el contenido de la nota que deseas compartir.
- Configura las opciones de seguridad y envía la nota.
- Comparte el enlace generado con el destinatario.
- Navega a
-
Gestionar la aplicación:
- Para ver el estado:
./manage.sh status
- Para reiniciar:
./manage.sh restart
- Para detener:
./manage.sh stop
- Para ver el estado:
- React: Biblioteca para construir interfaces de usuario.
- Material UI: Librería de componentes para React.
- Node.js: Entorno de ejecución para JavaScript del lado del servidor.
- Express: Framework web para Node.js.
- Giphy API: API para buscar y mostrar GIFs.
- Axios: Cliente HTTP para realizar peticiones.
- Crypto: Para la encriptación de notas seguras.
- Resend: Para el envío de correos electrónicos.
- UUID: Para generar identificadores únicos.
- Node.js (v14 o superior)
- npm (v6 o superior)
- Navegador moderno (Chrome, Firefox, Edge, Safari)
- Conexión a Internet (para las APIs de Giphy y Resend)
Las contribuciones son bienvenidas. Por favor, sigue estos pasos:
- Haz un fork del repositorio
- Crea una nueva rama (
git checkout -b feature/mejora-increible
) - Haz commit de tus cambios (
git commit -am 'Agrega una mejora increíble'
) - Sube la rama (
git push origin feature/mejora-increible
) - Abre un Pull Request
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE
para más detalles.
Si tienes preguntas o comentarios, no dudes en abrir un issue en GitHub o contactar al autor.
El sistema de notas seguras utiliza Supabase como base de datos persistente para almacenar las notas encriptadas. Esto permite un almacenamiento más confiable y escalable que las soluciones en memoria utilizadas anteriormente.
La tabla principal secure_notes
tiene la siguiente estructura:
CREATE TABLE IF NOT EXISTS public.secure_notes (
id UUID PRIMARY KEY, -- Identificador único de la nota
encrypted_data JSONB NOT NULL, -- Datos encriptados y metadatos del algoritmo
requires_password BOOLEAN DEFAULT false, -- Indica si requiere contraseña adicional
password_hash TEXT, -- Hash SHA-256 de la contraseña (si aplica)
expires_at TIMESTAMP WITH TIME ZONE NOT NULL, -- Fecha/hora de expiración
remaining_views INTEGER DEFAULT 1, -- Número de visualizaciones restantes
expire_on_view BOOLEAN DEFAULT false, -- Si debe eliminarse al visualizarse
created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT now()
);
Esta estructura permite:
- Almacenar datos encriptados en formato JSON con metadatos del algoritmo usado
- Configurar protecciones adicionales con contraseña
- Establecer diferentes políticas de caducidad (por tiempo o visualizaciones)
- Mantener información para auditoría (creación/actualización)
El sistema ofrece múltiples algoritmos de encriptación, cada uno con diferentes características:
- Descripción: Algoritmo estándar de cifrado avanzado con modo Galois/Counter que proporciona tanto confidencialidad como autenticación.
- Ventajas: Rápido, seguro y resistente a manipulaciones. Detecta si los datos han sido alterados.
- Uso ideal: Protección general de datos sensibles con rendimiento eficiente.
- Descripción: Algoritmo simétrico tradicional en modo Cipher Block Chaining.
- Ventajas: Ampliamente probado y compatible con la mayoría de sistemas.
- Uso ideal: Cuando se requiere compatibilidad con sistemas antiguos.
- Descripción: Implementación de doble capa que utiliza dos claves AES-256 separadas para crear un cifrado de fuerza equivalente a 512 bits.
- Ventajas: Seguridad extremadamente alta, prácticamente imposible de romper incluso con computación cuántica.
- Uso ideal: Datos altamente confidenciales que requieren el máximo nivel de protección.
- Descripción: Versión de doble capa del cifrado AES-256-CBC.
- Ventajas: Mayor fortaleza criptográfica manteniendo la compatibilidad del formato CBC.
- Uso ideal: Datos muy sensibles que requieren compatibilidad con sistemas que no soportan GCM.
- Descripción: Algoritmo moderno diseñado como alternativa a AES, especialmente eficiente en plataformas sin aceleración de hardware AES.
- Ventajas: Rendimiento superior en software, excelente para dispositivos móviles y de bajo consumo.
- Uso ideal: Aplicaciones donde el rendimiento es crucial o en sistemas con recursos limitados.