A quantum-resistant real-time video conferencing application implementing NIST-standardized post-quantum cryptography. Built with Qt6, GStreamer, and the liboqs library, this system protects against both classical and future quantum computer attacks while providing secure, low-latency video and audio communication.
π Why Post-Quantum? Traditional RSA and ECC encryption will be broken by quantum computers. This application implements Kyber-768 (ML-KEM) and Dilithium (ML-DSA), algorithms standardized by NIST in August 2024 to resist quantum attacks.
CRITICAL: This implementation assumes that the initial Dilithium public key is securely transferred between client and server through a trusted channel (e.g., pre-shared, certificate authority, or secure out-of-band exchange).
Without secure Dilithium key distribution, the system is vulnerable to Man-in-the-Middle (MITM) attacks during the initial handshake, potentially compromising the entire session.
- Pre-shared keys: Exchange Dilithium public keys offline before first use
- Certificate Authority (CA): Use a trusted CA to sign and distribute public keys
- QR Code/Physical exchange: Display and scan keys during first connection
- Trust-on-First-Use (TOFU): Store and verify public key fingerprints after first connection
- π‘οΈ Post-Quantum Cryptography: NIST-standardized Kyber-768 (ML-KEM) for key exchange and Dilithium2 (ML-DSA-65) for digital signatures
- π End-to-End Encryption: AES-256-ICM + HMAC-SHA1-80 over SRTP for media streams
- πΉ Real-Time Video/Audio: GStreamer-based multimedia framework with H.264 encoding and Opus audio
- π» Intuitive Qt6 GUI: Cross-platform interface with one-click connection setup
- β‘ High Performance: <1ms cryptographic overhead, 30 FPS video at 640x480 resolution
- π Quantum-Resistant: Protected against Shor's algorithm and other quantum attacks
- π Low Latency: <100ms on LAN, UDP/RTP transport with jitter buffering
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Qt6 GUI Frontend β
β ββββββββββββββββ ββββββββββββββββββββββββ β
β β LaunchWindow ββββββββββΆβ QProcess Manager β β
β ββββββββββββββββ ββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ
β C++ Backend (GStreamer) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Post-Quantum Authentication (Kyber + Dilithium) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββββββ β
β β Camera/Mic β ββ H.264/Opus β ββ SRTP Encryption ββ β
β β Capture β β Encoding β β AES-256-ICM β β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββββββ β
β β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββββββ β
β β Video/Audio ββ β Decoding ββ β SRTP Decryption ββ β
β β Playback β β β β β β
β βββββββββββββββ ββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Client initiates connection
- Server responds with Kyber-768 public key
- Client encapsulates shared secret using Kyber-768
- Client signs encapsulated key with Dilithium2
- Server verifies signature and decapsulates secret
- Both parties derive SRTP keys using HKDF-SHA256
- Media streams encrypted with AES-256 + HMAC
- CPU: Intel/AMD x86-64 (dual-core minimum)
- RAM: 4 GB minimum (8 GB recommended)
- Storage: 5 GB for dependencies
- Camera: USB webcam or built-in camera
- Network: Ethernet or Wi-Fi
- OS: Ubuntu 20.04/22.04/24.04 LTS
- Qt Framework: 6.2.4+
- GStreamer: 1.20.x+
- OpenSSL: 3.0.x+
- liboqs: 0.10.x+ (post-quantum crypto library)
- Build Tools: GCC/G++ (C++17), CMake, Make
See INSTALLATION.md for detailed setup instructions.
# Clone repository
git clone https://github.com/Vikas2171/Quantum_Secure_Video_Conference_App_V3.git
cd Video_Conference_App_V3_Quantum_Secure
# Install dependencies (Ubuntu)
sudo apt update
sudo apt install -y qt6-base-dev libgstreamer1.0-dev libssl-dev \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad libsrtp2-dev
# Build and install liboqs
git clone --depth 1 https://github.com/open-quantum-safe/liboqs.git
cd liboqs && mkdir build && cd build
cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr/local \
-DOQS_ENABLE_SIG_DILITHIUM=ON -DOQS_ENABLE_KEM_KYBER=ON ..
ninja && sudo ninja install && sudo ldconfig
# Build backend
cd ../../backend
make
# Build frontend
cd ../frontend
qmake6 frontend.pro && makecd frontend
./frontend- Select Server or Client mode
- Enter peer IP address and username
- Click Connect β video call starts automatically
Server:
cd backend
./server <client_ip>Client:
cd backend
./client <server_ip> <username>Quantum_Secure_Video_Conference_App_V3/
βββ README.md # Project overview (this file)
βββ INSTALLATION.md # Detailed installation guide
βββ frontend/ # Qt6 GUI Application
β βββ main.cpp # Entry point
β βββ launchwindow.h/cpp # Connection UI
β βββ frontend.pro # Qt project file
β βββ frontend # Compiled executable
βββ backend/ # C++ Backend
βββ src/
β βββ server_main.cpp # Server implementation
β βββ client_main.cpp # Client implementation
β βββ crypto_utils.cpp # AES-256, HMAC utilities
β βββ auth_protocol.cpp # Kyber + Dilithium protocol
βββ include/
β βββ crypto_utils.h
β βββ auth_protocol.h
βββ Makefile # Build configuration
βββ server # Server executable
βββ client # Client executable
The backend Makefile is system-specific and needs to be customized for your environment. Create a Makefile in the backend/ directory with the following content:
CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2 -Iinclude `pkg-config --cflags gstreamer-1.0 glib-2.0`
LIBS = -loqs -lssl -lcrypto `pkg-config --libs gstreamer-1.0 glib-2.0`
# Object files
OBJS = src/crypto_utils.o src/auth_protocol.o
all: server client
# Compile object files
src/%.o: src/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
# Link server
server: $(OBJS) src/server_main.o
$(CXX) $(CXXFLAGS) -o server $(OBJS) src/server_main.o $(LIBS)
# Link client
client: $(OBJS) src/client_main.o
$(CXX) $(CXXFLAGS) -o client $(OBJS) src/client_main.o $(LIBS)
clean:
rm -f server client src/*.o client_keys.json client_dilithium_keys.bin
.PHONY: all clean| Component | Algorithm | Security Level | Key/Signature Size |
|---|---|---|---|
| Key Exchange | Kyber-768 (ML-KEM) | NIST Level 3 (192-bit quantum) | 1184 bytes (pk), 1088 bytes (ct) |
| Digital Signature | Dilithium2 (ML-DSA-65) | NIST Level 2 (128-bit quantum) | 1312 bytes (pk), 2420 bytes (sig) |
| Stream Encryption | AES-256-ICM | 256-bit classical, 128-bit quantum | 32 bytes (key) |
| Authentication | HMAC-SHA1-80 | 80-bit MAC | 10 bytes (tag) |
- β Protected: Quantum attacks (Shor's, Grover's), man-in-the-middle, replay attacks
- β Resistant: Key compromise, eavesdropping, cryptanalysis
β οΈ Assumes: Secure endpoint, trusted implementation of liboqs
- Resolution: 640x480 @ 30 FPS
- Video Codec: H.264 (500-1500 kbps)
- Audio Codec: Opus (48 kHz, 64 kbps)
- Latency: <100ms (LAN), 100-300ms (WAN)
- CPU Usage: 3-8% total
- Memory: 150-250 MB
# Verify camera
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink
# Check SRTP plugins
gst-inspect-1.0 srtpenc
gst-inspect-1.0 srtpdec
# Verify liboqs
pkg-config --modversion liboqs- Start server:
./server <client_ip> - Start client:
./client <server_ip> "TestUser" - Verify video/audio transmission for 10+ minutes
- INSTALLATION.md: Step-by-step dependency setup and build instructions
Contributions are welcome! This is an academic project from IIT Jammu.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
- NIST PQC Standardization - Official NIST project
- CRYSTALS-Kyber (ML-KEM) - Key encapsulation mechanism
- CRYSTALS-Dilithium (ML-DSA) - Digital signature algorithm
- Open Quantum Safe (liboqs) - C library for PQC
- GStreamer Documentation - Multimedia framework
- SRTP (RFC 3711) - Secure RTP protocol
- Qt6 Documentation - GUI framework
Vikas Prajapati || Shubham Gupta || Shivani Consul
Indian Institute of Technology Jammu
B.Tech Project (BTP)
- NIST Post-Quantum Cryptography Standardization Project
- Open Quantum Safe (OQS) Project for liboqs
- GStreamer and Qt communities
π Quantum-safe. Future-proof. Secure today, tomorrow, and beyond.
Last Updated: December 20, 2025