Cyber-physical security prototype · Solo: research, design + build
A working simulation of how a swarm of underwater drones could keep its links safe from future quantum computers, and notice when one of its drones is captured. Phones stand in for the drones; a live 3D dashboard shows the swarm.
- Three.js
- Node.js
- Socket.IO
- Python
- Flask
- Qiskit
- TenSEAL
- Stable Baselines3
- Role
- Solo build
- Research, design and every part of the code
- Team
- Pitched as four
- Three teammates joined the pitch to the judges
- Stage
- Working simulation
- Phones as drones, a live 3D dashboard
- Outcome
- Demo + paper
- Presented, and written up
- Talk
- GITAM Quantumisers (opens in a new tab)
- Presented to the club, so members could see how it's built
SamudraGupt-Q is my final-year project, and I built all of it on my own: the research, the design and every part of the code. My three teammates, there for the course's requirements, helped me pitch it to the judges. It's a working simulation of a security system for swarms of autonomous underwater drones.
Phones stand in for the drones and stream their real motion sensors. A 3D command dashboard shows the swarm live, and a separate attacker console lets me break things on purpose and watch how the system responds.
Drone swarms talk over encryption like RSA and elliptic curves, which a large enough quantum computer will break. Anyone can record that traffic today and decrypt it later, once the hardware exists.
The second problem is physical. If one drone is caught in a net, its keys are still valid, so the swarm keeps trusting it while it feeds in false sonar or positions.
- Keep the links safe from quantum attacks, not just today's
- Notice a captured drone from how it moves, not only from its keys
- Let the fleet share numbers without one server seeing every drone's data
Each phone sends its tilt, thrust and g-force ten times a second to a Node.js relay, which passes every packet to a Python backend. The backend runs four checks before anything reaches the dashboard.
- Quantum layerQiskit simulates entangled Bell pairs and turns them into key bits (the E91 idea)
- SignaturesEvery packet is signed, so a node can't pretend to be another
- PrivacyTenSEAL averages the fleet's depth readings while they're still encrypted (CKKS)
- AI agentA PPO agent reads link quality, latency and g-force, and chooses to carry on, rotate keys or cut the node off
The key exchange follows the E91 idea. Qiskit simulates a two-qubit circuit: an H gate puts the first qubit in both states at once, and a CNOT ties the second to it. Measured, the pair always agrees, 00 or 11, never 01 or 10.
I run it 512 times, turn each agreeing pair into a bit (00 → 0, 11 → 1), shuffle the bits and keep the first 64 as the key. Switch the H gate off and you can see why it's there: every result is 00, and the key is all zeros.
It's a simulation, not photons in water, and the Bell value on the dashboard is generated rather than measured from these shots (more under Limits).
The fleet needs an average depth, but no single server should see every drone's readings. With CKKS encryption, through TenSEAL, each drone encrypts its depth before it's sent. The cloud adds the three ciphertexts and multiplies the sum by ⅓ without decrypting anything, and only the naval command centre can decrypt the result.
Drag a drone's depth and its ciphertext turns into entirely different noise, while the decrypted average still comes out right. The outlier filter is the exception: it decrypts the readings, which I come back to under Limits.
Using phones as the drones gave me real, messy sensor data for free. Shaking a phone hard is a believable stand-in for a drone being grabbed, and it made every test physical instead of a line in a dataset.
I gave the agent three choices instead of a yes-or-no alarm. Rotating keys is a middle step, so a noisy reading doesn't split the swarm the way cutting a node off would.
I built the attacker as its own console. Spoofing a node, stripping its key or striking it all happen live, against the running system.
I tested the system with seven attack scenarios, run live from the attacker console against a swarm of phones.
- Starting a single node's key exchange, then a three-node swarm
- A hostile sonar contact the agent has to flag without breaking the swarm
- A packet with its key stripped, and a rogue node with a spoofed MAC address
- A violent shake, which triggers Protocol OmegaThe node is cut off and its keys wiped
- A drone reporting a false depth, which the fleet average has to ignore
One node joins and its quantum channel comes up.
It's a simulation, and some parts are still stand-ins. The Bell-test value the dashboard shows is generated rather than measured, the post-quantum Dilithium signatures are stubbed out after the library wouldn't install, and the step that filters outliers decrypts the readings, which undoes the privacy it's meant to keep. The agent also learns from synthetic data with a reward I wrote, so for now it mostly learns my own thresholds.
Some limits are physical: water absorbs light within about a hundred metres, and no drone can hold entangled qubits steady yet.
- Measure the Bell value from real measurement bases
- Get Dilithium running, and filter outliers without decrypting
- Train and evaluate the agent on recorded phone sessions with labelled attacks
What happened
I demonstrated it to the judges and wrote it up as a paper. GITAM's Quantumisers club liked it enough to have me present it to them, so their members could see how ideas like these are actually built.
SamudraGupt-Q was where I first mapped real things into a simulated world: phones moving in my hands became drones in a live 3D scene, sending real data, with every calculation made in real time. Working with quantum frameworks, with three layers running continuously at the same time, was the part I enjoyed most.