CybersecuritySoftware
DIMY Contact Tracing Protocol Simulator
Built a Python simulator for a privacy-preserving contact tracing protocol with frontend nodes, a backend TCP server, and a passive attacker model. The simulator models rotating identifiers, encounter storage, upload/query flows, and adversarial observation.

Summary
Project context
A course project that translates privacy-preserving protocol concepts into a runnable network simulator.
Problem / goal
The project needed to demonstrate how ephemeral identifiers, secret sharing, and Bloom filters could work together while exposing privacy assumptions to a passive attacker model.
My role
Contributed mainly to frontend protocol logic, UDP communication, Shamir reconstruction, and Bloom-filter lifecycle.
What I personally contributed
- Implemented rotating ephemeral identifiers, UDP broadcast behavior, TCP request-response flows, and Bloom-filter encounter storage.
- Coordinated threading, locks, background loops, and interactive commands for node, server, and attacker workflows.
- Modelled passive attacker observation points to make privacy assumptions easier to inspect.
Technical approach
- Implemented rotating ephemeral identifiers, Shamir Secret Sharing, Bloom filter encounter storage, UDP broadcasting, and TCP request-response communication.
- Used threading, locks, and background loops to coordinate node behavior, upload/query operations, and interactive commands.
- Modelled a passive attacker that collects protocol broadcasts for privacy testing.
Key features
- Frontend nodes that broadcast and receive temporary identifiers.
- Backend TCP server for upload and query workflows.
- Bloom-filter lifecycle for encounter data.
- Passive attacker model for protocol assumption testing.
Impact / results
- Delivered a runnable simulator that demonstrates core protocol workflows and attacker observation points.
- Made privacy and networking behavior easier to inspect through interactive commands and structured JSON messages.
What I learned
- Concurrency and protocol state must be designed together when simulations depend on timing and background behavior.
- A passive attacker model is useful for making security assumptions concrete rather than abstract.