POST-QUANTUM OPENSSL CONFIGURATION — SHELL

Qssl
OVERVIEW
Qssl is the "Qompass AI SSL Solution" (GitHub repo description), titled "Quality SSL: Qompass AI SSL for the Post-Quantum Age" / "Qompass AI on OpenSSL" in its README: a shipped OpenSSL configuration (`qssl/qssl.cnf` plus profile files) that turns on FIPS mode and the OQS provider, pins TLS cipher/group/signature policy including ML-KEM hybrid groups and ML-DSA signature algorithms, and ships scripts to check files for post-quantum algorithm coverage.
HOW IT WORKS
- 1OpenSSL loads `qssl/qssl.cnf` (`openssl_conf = openssl_init`, `config_diagnostics = 1`): the init section wires the EVP settings, engines, OID section, providers, random section, and the named SSL configuration.
- 2EVP settings turn FIPS mode on (`fips_mode = yes`), and the provider section activates `base`, `default`, `legacy`, `fips`, `oqsprovider`, and `pkcs11` providers — the OQS provider is what supplies the post-quantum algorithms.
- 3The OID section registers the ML-DSA OIDs (`mldsa44`/`mldsa65`/`mldsa87`), so certificates and signatures using them parse with names.
- 4A connection picks one of the named TLS policies in `[ssl_configuration]` — `system_default`, `level3`, `fips`, `oqs`, or `tpm2` — each pinning `CipherString`/`Ciphersuites`, `Groups`, `MinProtocol`/`MaxProtocol`, and `SignatureAlgorithms`; the `oqs` policy's groups are ML-KEM hybrids only and its signature algorithms are `falcon512:falcon1024:mldsa65:mldsa87`.
- 5Certificate work uses the same file's CA/req sections: `CA_default` under `/etc/pki/qompass-ca`, `default_bits = 3072`, `default_md = sha256`, `default_keyalg = EC`, and the `server_cert`/`client_cert`/`v3_ca` extension profiles (also shipped standalone as `qssl/profiles/server_cert.cnf`).
- 6Separately, `qssl/scripts/pq_check.sh <file>` scans a target file for occurrences of a fixed list of post-quantum algorithm names (BIKE, FrodoKEM, HQC, ML-KEM, ML-DSA, Falcon, SPHINCS+, MAYO, CROSS, OV and their hybrids) and writes a present/missing/duplicate report to `pq_report.txt`; the repo's test gate runs `scripts/tests/pqctest.sh` against the system OpenSSL and asserts PQ signature algorithms complete key-gen/sign/verify and that a tampered signature does not verify.
CONCEPTS
ss_ML-KEM is the shared secret produced by ML-KEM-768 encapsulation against the peer's encapsulation key; ss_X25519 is the X25519 Diffie–Hellman output; ∥ is byte concatenation. For the hybrid groups Qssl configures (x25519_mlkem768 and its siblings), the concatenated secret is the input keying material to TLS 1.3's HKDF key schedule, so the session is secure if either component holds — the construction RFC 9954 (the IETF hybrid key exchange design) specifies.
CONFIGURATION
| Option | Default | What it does |
|---|---|---|
config_diagnostics | 1 | OpenSSL config diagnostics on |
`fips_mode` (`[evp_settings]`) | yes | FIPS mode for EVP operations |
`providers` (`[provider_sect]`) | base`, `default`, `legacy`, `fips`, `oqsprovider`, `pkcs11` all `activate = 1 | Providers loaded at startup |
default_sect.properties | "provider=default", "security_level=3" | Property query for the default provider |
fips_sect.algorithms | ALL:!X25519:!X448:!Ed25519:!Ed448 | Algorithm restriction for the FIPS provider |
oqs_sect.module | /opt/QAI/qompassl/lib64/ossl-modules/oqsprovider.so | Path to the OQS provider module as written in the file |
`mldsa44` / `mldsa65` / `mldsa87` (`[qai_oid]`) | 2.16.840.1.101.3.4.3.32` / `.33` / `.34 | Registered ML-DSA OIDs |
`random` (`[random]`) | CTR-DRBG | Random generator type (alternatives named in comments: HASH-DRBG, HMAC-DRBG) |
random.cipher | AES-256-CTR | Cipher for CTR-DRBG |
random.seed | JITTER | Entropy seed source |
system_default.MinProtocol` / `MaxProtocol | TLSv1.2` / `TLSv1.3 | Protocol bounds for the system-default TLS policy |
system_default.Groups | P-256:P-384:P-521:X25519:X448 | Key-exchange groups for the system-default policy |
system_default.Ciphersuites | TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 | TLS 1.3 ciphersuites for the system-default policy |
`level3.Groups` (`tls_seclevel_3`) | X25519:P-256:P-384:P-521:X448:x25519_mlkem768:x25519_mlkem1024:p384_mlkem768:mlkem768:mlkem512:mlkem1024 | Groups for the security-level-3 policy, including ML-KEM hybrids |
`oqs.Groups` (`oqs_ssl_sect`) | x25519_mlkem768:x25519_mlkem1024:p384_mlkem768:mlkem768:mlkem512:mlkem1024 | ML-KEM-only groups for the OQS policy |
oqs.SignatureAlgorithms | falcon512:falcon1024:mldsa65:mldsa87 | Signature algorithms for the OQS policy |
`fips.Groups` (`fips_ssl_sect`) | P-256:P-384:P-521 | Groups for the FIPS policy |
CA_default.dir | /etc/pki/qompass-ca | CA directory (`certs`, `database`, `serial`, `certificate` derive from it) |
CA_default.default_days | 365 | Default certificate validity |
CA_default.default_crl_days | 30 | Default CRL validity |
CA_default.default_md | sha256 | Default CA message digest |
req.default_bits | 3072 | Default key size for requests |
req.default_keyalg | EC | Default key algorithm for requests |
req.prompt | no | Do not prompt for the distinguished name (the `[dn]` section supplies US / Washington / Spokane / Qompass AI / Security) |
tsa_config1.signer_digest | sha256 | Time-stamp authority signer digest (TSA section in the same file) |
CONTROLS
| Action | Control |
|---|---|
| Check a file for post-quantum algorithm coverage | `qssl/scripts/pq_check.sh <script_file>` (exactly one argument; report written to `pq_report.txt`) |
| Run the post-quantum test harness | `scripts/tests/pqctest.sh` (driven by `tests/test_qssl.py` against the system OpenSSL) |
| Run the test gate | `pytest tests/test_qssl.py` (asserts ML-DSA / SLH-DSA key-gen/sign/verify round-trips, classical ED25519/RSA round-trips, loud failure with no `openssl`, and tampered-signature rejection) |
| Select a TLS policy | Choose a named section from `[ssl_configuration]` (`system_default`, `level3`, `fips`, `oqs`, `tpm2`) in `qssl/qssl.cnf` |
NOT COVERED
- The README is boilerplate (badges, contact, funding, FAQ) with no usage instructions; there is no documented install step that copies `qssl.cnf` into an OpenSSL config path or sets `OPENSSL_CONF` — the test deliberately unsets `OPENSSL_CONF`/`OPENSSL_MODULES` and tests the system OpenSSL instead. - Several `.include` lines and engine/module paths in `qssl.cnf` point at `/opt/QAI/qompassl/…`, `/etc/ssl/profiles/…`, and `/usr/lib/…` paths whose provisioning is not documented in the files read. - The remaining profile files (`ca_profiles.cnf`, `ct_log_list.cnf`, `engines_providers.cnf`, `oid.cnf`, `random_sect.cnf`, `tsa_sect.cnf`) were listed but only `server_cert.cnf` was read in full; their individual keys are not tabulated here. - `qssl/scripts/optbuild.sh` (a build script in the tree) was not read for this pack. - Primo clones are known-stale estate-wide; `qssl.cnf` and `pq_check.sh` were read from the primo clone (`~/.GH/Qompass/Qssl/`) and the same paths exist in the GitHub tree listing, but they were not diffed byte-for-byte against GitHub HEAD.
REFERENCES
- FIPS 203 — Module-Lattice-Based Key-Encapsulation Mechanism Standard (ML-KEM)The standard behind the ML-KEM-512/768/1024 groups in Qssl's level3 and oqs policies.
- FIPS 204 — Module-Lattice-Based Digital Signature Standard (ML-DSA)The standard behind the mldsa44/65/87 OIDs Qssl registers and the oqs policy's signature algorithms.
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3The handshake message order, the key schedule, and the ciphersuite/group negotiation the policies pin.
- RFC 9954 — Hybrid key exchange in TLS 1.3How hybrid groups concatenate the component shared secrets — the equation above, as specified.
- OpenSSL config(5) manual — configuration file formatThe section/provider syntax qssl.cnf is written in, including the provider activation model.
- OQS Provider — Open Quantum Safe provider for OpenSSL 3The provider Qssl activates as oqsprovider; its algorithm list is where the ML-KEM/ML-DSA/Falcon names come from.