Sistema web desarrollado para la gestión de recetas médicas implementando cifrado de extremo a extremo (E2EE) y control de acceso criptográfico estricto.
Proporcionar una plataforma donde la emisión, almacenamiento, consulta y verificación de recetas médicas esté protegida criptográficamente. El sistema garantiza la confidencialidad, integridad y no repudio de la información médica mediante una arquitectura basada en roles (Paciente, Médico, Farmacia y Administrador) y el uso de protocolos de seguridad en el cliente y servidor.
- Cifrado Híbrido E2EE: Protección de los datos médicos empleando una combinación de cifrado simétrico y asimétrico directamente en el navegador (Client-Side Encryption) antes de su transmisión.
- Autenticación Criptográfica: Inicio de sesión estándar protegido por JWT y acceso administrativo basado en un sistema de desafío-respuesta firmado digitalmente.
- Control de Acceso por Roles (RBAC): Flujos independientes y segregación de datos garantizada criptográficamente para Pacientes, Médicos, Farmacias y Administradores.
- Auditoría e Integridad: Verificación estricta de las recetas surtidas mediante códigos de autenticación de mensajes para prevenir alteraciones en la base de datos.
- Sistema de Autorización Segura: Generación de tokens OTP respaldados por firmas digitales para el registro validado de personal médico y farmacéutico.
El proyecto implementa estándares de la industria para asegurar todas las fases del ciclo de vida de la información:
- Cifrado Simétrico: AES-GCM (128 bits) para cifrar el contenido de la receta médica, garantizando tanto la confidencialidad como la autenticidad del documento.
- Cifrado Asimétrico (Key Wrapping): RSA-OAEP con SHA-256 para envolver, proteger y distribuir de forma segura la llave simétrica AES a los destinatarios autorizados (médico, paciente, farmacia).
- Firmas Digitales: ECDSA utilizando la curva elíptica P-256 (NIST) y SHA-256 para asegurar el no repudio de la emisión de la receta y para la validación de identidad del administrador.
- Integridad de Datos: HMAC-SHA256 implementado en el backend para auditar y confirmar la integridad de los registros de recetas surtidas.
- Protección de Contraseñas: Hashing en dos fases utilizando SHA-256 en el lado del cliente (CryptoJS) y Bcrypt en el servidor.
- Autenticación de Sesión: JSON Web Tokens (JWT) utilizando el algoritmo HS256.
El código fuente está organizado en una arquitectura cliente-servidor, separando claramente la lógica de enrutamiento, la seguridad del backend y el motor criptográfico del frontend:
/
├── backend/ # API REST construida con Python y FastAPI
│ ├── main.py # Punto de entrada y configuración de CORS
│ ├── config.py # Carga de variables de entorno y llaves maestras
│ ├── database.py # Inicialización y conexión con Firebase Admin SDK (Firestore)
│ ├── security.py # Validación de JWT y recuperación de llaves públicas
│ ├── schemas.py # Definición de esquemas de datos entrantes con Pydantic
│ └── routers/ # Módulos de rutas segregados por rol
│ ├── auth.py # Registro, login y resolución de desafío ECDSA
│ ├── admin.py # Auditoría HMAC, gestión de usuarios y generación de tokens
│ ├── medico.py # Emisión de recetas y consulta de historial
│ ├── paciente.py # Recuperación segura de folios y recetas
│ └── farmacia.py # Lógica de verificación y marcado de surtido
└── frontend/ # Aplicación SPA construida con React 19 y Vite
├── src/
│ ├── App.jsx # Enrutador principal y persistencia de sesión local
│ ├── api.js # Instancia de cliente Axios para peticiones HTTP
│ ├── cryptoEngine.js # Implementación de Web Crypto API (Generación de llaves, AES, RSA, ECC)
│ └── pages/ # Vistas y paneles por rol (Registro, Medico, Paciente, etc.)
└── package.json # Dependencias del proyecto (crypto-js, axios, react-router-dom)
- Python 3.8 o superior.
- Node.js y npm.
- Proyecto de Firebase configurado con Firestore habilitado.
- Archivo de credenciales de cuenta de servicio de Firebase (
firebase_credenciales.json).
Abre tu terminal y ejecuta:
git clone https://github.com/AlejandroHZ-sys/secure-eprescriptions.git
cd [NOMBRE_DEL_CARPETA]Navega al directorio del backend e instala las dependencias necesarias:
cd backend
pip install -r requirements.txtCrea un archivo .env en la raíz de la carpeta backend e incluye las variables de configuración críticas:
CLAVE_SECRETA_JWT=tu_clave_secreta_jwt
ALGORITMO=HS256
LLAVE_MAC_FARMACIA=tu_clave_hmac_aqui
LLAVE_PUBLICA_ADMIN=tu_llave_publica_formato_pemTambién puedes usar un .env.example como plantilla, copiándolo a .env y reemplazando los valores por tus secretos reales.
Nota de seguridad: Asegúrate de colocar el archivo firebase_credenciales.json dentro del directorio backend. Ambos archivos (.env y el JSON de Firebase) deben estar listados en el .gitignore para prevenir la filtración de secretos.
Para iniciar el servidor de desarrollo ASGI desde el directorio backend:
uvicorn main:app --host 127.0.0.1 --port 8000 --reloadSi prefieres ejecutar desde la raíz del proyecto:
uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reloadAbre una nueva terminal, navega al directorio del frontend e instala las dependencias de Node:
cd frontend
npm installPara iniciar el servidor de desarrollo de Vite:
npm run dev- Backend: se puede desplegar fácilmente en Render con un servicio Python/FastAPI, usando el archivo
main.pycomo entrypoint y configurando las variables de entorno. - Frontend: se puede desplegar en Vercel apuntando al directorio
frontend, usandonpm installynpm run buildcomo build commands, ynpm run previewo la configuración estándar de Vite para producción.
