Servicio web de Flask que levanata un nodo y expone una API REST y una interfaz gráfica con el objetivo de probar diferentes criptosistemas y protocolos para calcular PSI (Private Set Intersection) o conjuntos de intersecciones privados.
- Python 3.11
- git
- pip
El sistema ha demostrado funcionar en sistemas ARM y x86. Se ha probado su funcionamiento en Windows y en macOS.
Para arrancar el servicio se pueden seguir estos pasos:
- Clonar el repositorio:
git clone https://github.com/4rius/WS_PSI.git
. También se puede clonar utilizando el soporte gráfico de GitHub Desktop. - Navegar a la carpeta del proyecto:
cd WS_PSI
. - Instalar las dependencias, por conveniencia se puede utilizar un entorno virtual de Python:
- Crear un entorno virtual:
python -m venv WS-PSI-ENV
en Windows opython3 -m venv WS-PSI-ENV
en Linux. En sistemas UNIX se recomienda comprobar quepython3
es una versión 3.11, esto se puede hacer conpython3 --version
. Si no fuera así, se puede instalar y evitar actualizar variables haciendopython3.11 -m venv WS-PSI-ENV
. - Activar el entorno virtual:
source WS-PSI-ENV/bin/activate
en Linux oWS-PSI-ENV\Scripts\activate
en Windows. - Instalar las dependencias:
pip install -r requirements.txt
. Y las dependencias para BFVpy-fhe
:cd Crypto/py-fhe && pip install .
Por conveniencia, existe un archivosetup.sh
que realiza todos estos pasos (para macOS y Linux). Para ejecutarlo, se debe dar permisos de ejecución:chmod +x setup.sh
y ejecutarlo:./setup.sh
. Esto solo funciona con Python 3.11
- Crear un entorno virtual:
- Si no estamos en el entorno virtual (al terminar el script), se debe activar:
source WS-PSI-ENV/bin/activate
en Linux oWS-PSI-ENV\Scripts\activate
en Windows. DondeWS-PSI-ENV
es el nombre del entorno virtual. - Arrancar el servidor:
Servidor por defecto
La API REST quedará expuesta en la dirección http://127.0.0.1:5000/api
y la interfaz gráfica en http://127.0.0.1:5000/
.
Se puede modificar el puerto y la dirección de la API en el arranque del servidor. Ejemplo: flask --app flaskr:create_app run --port=8000
. La dirección cambiaría con --host=OTRA_DIRECCION
aunque puede que no se pueda asignar.
Servidor waitress
La API REST quedará expuesta en la dirección http://127.0.0.1:8080/api
y la interfaz gráfica en http://127.0.0.1:8080/
.
Se puede modificar el puerto y la dirección de la API en el arranque del servidor. Ejemplo: waitress-serve --host 127.0.0.1 --port 8000 --call flaskr:create_app
\
El nodo por defecto empezará a escuchar en el puerto 5001, pero se puede cambiar mediante la API. Siempre correrá en la IP local para que otros usuarios de la red local puedan conectarse a él. Este comportamiento es modificable por si se quisiera exponer a internet, pero no está parametrizado.
Para poder mandar registros a la Realtime Database es necesario un archivo de credenciales.
Para obtenerlo, se debe seguir los siguientes pasos:
- Acceder a la consola de Firebase: Firebase Console.
- Crear un nuevo proyecto o seleccionar uno existente.
- Ir a la sección de configuración del proyecto.
- Descargar el archivo de credenciales en formato JSON desde la sección de Cuentas de servicio.
\ - Guardar el archivo en la carpeta raíz con el nombre
firebase-credentials.json
. Este archivo proporciona acceso de administrador al proyecto. No se debe subir a ningún repositorio público. Se debe añadir al.gitignore
para evitar subirlo por error.
- Actualizar el valor del parámetro
FB_URL
en el archivoNetwork/collections/DbConstants.py
con la URL de la Realtime Database.
- Volver a arrancar el servidor. En vez de indicar que no se ha encontrado el archivo de credenciales, se mostrará un mensaje de que se ha conectado a la base de datos correctamente y se enviará el primer log con la configuración del dispositivo.
- Si la Realtime Database está configurada correctamente, se enviarán registros sin problema. Solo es necesario activarla para que funcione.
Se incluye en este repositorio una colección de Postman con las peticiones a la API REST.
Para importarla, se debe seguir los siguientes pasos:
- Descargar el archivo
PSI Suite.postman_collection.json
desde la carpetadocs
. - Abrir Postman.
- Ir a la sección de colecciones.
- Importar la colección descargada.
- Seleccionar el archivo descargado.
- La colección se importará correctamente.
En el apartado de Variables
se pueden modificar las variables de entorno para que se ajusten a la configuración del servidor. Por defecto traen la URL y el puerto del servidor de desarrollo de Flask, así como un dispositivo para probar las peticiones.
Cada petición tiene una descripción detallada de lo que hace y qué espera recibir para funcionar correctamente.
El código proporcionado contiene todo lo necesario para crear una imagen de Docker y levantar servicios independientes en la misma máquina utilizando Waitress. Para crear la imagen es necesario contar con el demonio de Docker que haya disponible para la máquina en que se esté trabajando.
- Ir a la raíz del repositorio y ejecutar el comando
docker build -t ws-psi .
- Una vez creada la imagen, en el mismo directorio, se puede ejecutar
docker compose up
El archivodocker-compose.yml
está configurado para crear 4 servicios bajo la misma red de Docker, luego estos se podrán conectar entre ellos como si se tratase de una red de área local. Para parar el servicio se puede mandar el comandodocker compose down
o utilizar el atajoCTRL + C
. Para eliminar los contenedores y que no consuman recursos, se puede utilizar el comandodocker rm $(docker ps -aq)
.
Este proyecto está distribuido bajo la licencia MIT. Para más información, consultar el archivo LICENSE.