Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Recetas Médicas Seguras (Secure E-Prescriptions)

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.

Objetivo

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.

Características principales

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

Especificaciones Técnicas y Criptográficas

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.

Estructura del proyecto

Diagrama de Arquitectura General

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)

Requisitos previos

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

Instalación y ejecución

1. Clonar el repositorio

Abre tu terminal y ejecuta:

git clone https://github.com/AlejandroHZ-sys/secure-eprescriptions.git
cd [NOMBRE_DEL_CARPETA]

2. Configuración del Backend

Navega al directorio del backend e instala las dependencias necesarias:

cd backend
pip install -r requirements.txt

Crea 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_pem

Tambié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 --reload

Si prefieres ejecutar desde la raíz del proyecto:

uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reload

3. Configuración del Frontend

Abre una nueva terminal, navega al directorio del frontend e instala las dependencias de Node:

cd frontend
npm install

Para iniciar el servidor de desarrollo de Vite:

npm run dev

Despliegue sencillo

  • Backend: se puede desplegar fácilmente en Render con un servicio Python/FastAPI, usando el archivo main.py como entrypoint y configurando las variables de entorno.
  • Frontend: se puede desplegar en Vercel apuntando al directorio frontend, usando npm install y npm run build como build commands, y npm run preview o la configuración estándar de Vite para producción.

About

Secure web platform for managing e-prescriptions with End-to-End Encryption (E2EE), Role-Based Access Control (RBAC), and digital signatures.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages