Production Deployment: webauthndev.ftsafe.com
This project provides an end-to-end platform for exploring WebAuthn user flows secured by post-quantum cryptography. The hosted demo and local setup instructions help you register authenticators, run authentication process, and compare PQC signature suites in a realistic WebAuthn environment. Decoder is integrated for decoding attestation objects, WebAuthn type CBOR responses, authenticator metadata, etc. A FIDO MDS explorer is also built for direct retrieval of authenticator metadata information, and conducting root certificate verification.
Scope - Includes: Python, virtual environment, Flask, python-fido2, and Post-Quantum Crypto (PQC) algorithms. - Currently supporting ML-DSA 44/65/87 for PQC
Note for Developers: Setting up and building all local dependencies (Python environment, Flask/FIDO2/Cryptography, PQC libraries, liboqs builds, HTTPS certificates, etc.) requires significant configuration time and toolchain setup. For most use cases, it is far more efficient to use the deployed platform directly instead of running on local environment.
-
Windows 10/11 (64-bit)
-
macOS (Intel or Apple Silicon)
A modern browser with WebAuthn support is required: - Edge, Chrome, Safari, Firefox
-
Git: (https://git-scm.com/)
-
Python 3.12+ with pip (https://www.python.org/downloads/)
git clone https://github.com/FeitianTech/postquantum-webauthn-platform.git
cd postquantum-webauthn-platform# Create and activate a virtual environment
py -3.12 -m venv .venv
.\.venv\scripts\activate
# Upgrade pip and install runtime dependencies
python -m pip install --upgrade pip
pip install -r requirements.txt
# Optional: PC/SC smart card extras
pip install "fido2[pcsc]"Windows (PowerShell):
.\.venv\scripts\activatemacOS:
source .venv/bin/activateUsing pip / virtualenv
pip install ".[pqc]"
python -c "import oqs"# Clone liboqs
git clone --branch main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
# Configure build
cmake -S . -B build -DOQS_BUILD_SHARED_LIBS=ON -DOQS_USE_OPENSSL=OFF
# Build in Release mode
cmake --build build --config ReleaseOutput: build\bin\Release\oqs.dll
Copy the DLL into your Python venv so oqs can find it:
copy build\bin\Release\oqs.dll C:\path\to\your\venv\Lib\site-packages\oqs\Or add the folder to your PATH.
# Clone liboqs
git clone --branch main https://github.com/open-quantum-safe/liboqs.git
cd liboqs
# Configure build
cmake -S . -B build -DOQS_BUILD_SHARED_LIBS=ON -DOQS_USE_OPENSSL=OFF
# Build in Release mode
cmake --build build --config Release
# Install the library (requires sudo)
sudo cmake --install buildMake sure you already built and installed liboqs (the C library). Now, clone and install the Python wrapper:
# Go to home directory
cd ~
# Clone liboqs-python
git clone https://github.com/open-quantum-safe/liboqs-python.git
cd liboqs-python
# Install into your active virtual environment
pip install .From your project root (where your .venv is located):
cd ~/postquantum-webauthn-platform
python -c "import oqs; print(oqs.get_version()); print(oqs.get_enabled_sigs())"If installed correctly, you should see something like:
0.14.0-dev
['ML-DSA-44', 'ML-DSA-65', 'ML-DSA-87', ...]This indicates the version number and supported algorithms. Make sure every PQC algorithm that you plan to use appears in the list above.
# Install Chocolatey
Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = `
[System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Install mkcert via Chocolatey
choco install mkcert -yWindows (PowerShell)
cd C:\path\to\your\project
mkcert demo.ftsafe.demomacOS (Terminal)
cd /path/to/your/project
mkcert demo.ftsafe.demoImportant:
- WebAuthn only works on secure contexts (HTTPS or localhost).
- Rename files to:
- demo.ftsafe.demo.pem
- demo.ftsafe.demo-key.pem
Otherwise, the program will fail to run.
Windows (PowerShell)
py -3 -m venv .venv
.\.venv\scripts\activatemacOS
python3 -m venv .venv
source .venv/bin/activatepython server/server/app.pyThe first launch writes a Flask session secret to instance/session-secret.key. Keep that file alongside the application so
multiple restarts reuse the same secret; delete it if you need to rotate the key.
Expected output:
Running on https://demo.ftsafe.demo:5000/Click the link to open the test app in your browser.