This project acts as a Proof of Concept (PoC) for a Master's Thesis (TFM). It implements a Self-Sovereign Identity (SSI) architecture to secure the data ingestion pipeline from IoT devices (Drones) to AI training datasets.
The system ensures that only authorized devices with valid Verifiable Credentials (VCs) can contribute data to the system, preventing data poisoning and ensuring integrity.
The project is organized as a monorepo with three main packages:
packages/shared: Common cryptographic kernel and Veramo agent configuration.packages/server(Verifier): receives telemetry, verifies credentials, and saves valid data to a CSV dataset.packages/authority(Issuer): trusted entity that issues flight licenses (VCs).packages/drone(Holder/Prover): IoT device that holds the license and signs telemetry data.
- Node.js: Version 18 or higher.
- Git: To clone the repository.
Since this is a monorepo, you must install dependencies in a specific order.
In the project root:
npm installThis is critical. The shared library must be built before the agents can run.
cd packages/shared
npm install
npm run buildInstall dependencies for the three individual components:
# Install Servercd server
npm install
# Install Authoritycd authority
npm install
# Install Dronecd drone
npm installTo run the full ecosystem, you will need 3 separate terminal windows.
The server must be running to receive data.
# Navigate to the server foldercd packages/server
# Start the server
npm start- Example:
did:key:z6Mk... - Copy this DID. You will need it to configure the drone.
- Keep this terminal open.
We simulate unboxing a new drone. It needs to geerate its identity and be configured.
# Navigate to the drone foldercd packages/drone
# Run the setup wizard
npm run setup- Copy the Drone DID displayed on the screen.
- DO NOT close this terminal. The script is paused, waiting for you to get a license.
The Authority certifies the drone.
# Navigate to the authority foldercd packages/authority
# Run the issuer agent
npm startGo back to TERMINAL 2 (where the Drone setup is paused).
- Paste the SERVER DID (from Terminal 1).
- Paste the License JWT (from Terminal 3).
- The system will verify and save the configuration.
Now that the drone is provisioned and licensed, it can operate autonomously.
In Terminal 2 (packages/drone), run:
npm startExpected Output
- Drone: It will load its identity and license from the local database, sign the telemetry, and send it to the server.
- Server: It will receive the message, cryptographically verify the license, and if valid, append the data to drones-dataset.csv