Security Policy

Reporting vulnerabilities, severities, disclosure and release verification.

This page reproduces docs/SECURITY.md from qanum-core v0.9.0 (release tag). Links to files that are not published on this site are shown as plain text until the source repository is public.

Contents

Supported Versions

Qanum L1 is pre-mainnet software. Security fixes ship on the current release line only; all users are expected to upgrade to the latest release.

Version line Status
v0.9.x Supported (current testnet release line — v0.9.0)
Earlier pre-release builds Not supported — upgrade

How many release lines receive security fixes on mainnet, and for how long, will be published here before the mainnet genesis.

The current release and its checksums are listed in its release notes (docs/release-notes/) and on the official site https://qanum.org. Each release also ships a CycloneDX SBOM per crate (the full dependency list, including the vendored liboqs with its exact commit), and no release is tagged while cargo audit reports a vulnerability. Releases are signed with post-quantum keys: see Verifying a Release.

Reporting a Vulnerability

To report security issues send an email to security@qanum.org (not for support).

Please include:

Reports can be encrypted with the project disclosure key (published on keys.openpgp.org, email-verified):

Name Key ID Fingerprint Expires
Qanum Security security@qanum.org 01D9622680BAFCA9 8013 E1BF F91C A30E E6A5 F273 01D9 6226 80BA FCA9 2028-09-07
# import the key
gpg --keyserver hkps://keys.openpgp.org --recv-keys 8013E1BFF91CA30EE6A5F27301D9622680BAFCA9

# encrypt a report
gpg --encrypt --armor -r security@qanum.org report.txt

Please never include secret key material or other sensitive data in plain email. Every report is acknowledged, assigned a severity and followed through fix, release and disclosure as described below; the reporter is kept informed at each step and credited in the advisory unless they prefer not to be.

Severity

Each report is assigned one of four levels, following Bitcoin Core’s classification:

A report may also be judged not to be a vulnerability, or serious but not in need of an embargo; it is then handled in public.

Response Timeline

Step Target
Acknowledgement of the report within 72 hours
Release with the fix — Critical as soon as possible; target 7 days
Release with the fix — High within 30 days
Release with the fix — Medium within 60 days
Release with the fix — Low the next regular release

Every fix ships no later than 90 days after the report. If a target cannot be met, the reporter is told why and given a new date.

Disclosure

Details are published after the fix, so that users have time to upgrade:

Two weeks before details are published, the release notes of a new release announce how many vulnerabilities it fixes and their severity, without details. In every case the details are published no later than 90 days after the report, unless the reporter agrees to a longer embargo; after that window the reporter is free to publish.

Vulnerability Records

Every published vulnerability gets an advisory in the release notes and a row in CVE-REGISTER.md, with its severity, the fixing release and commit. Fixes that close a known Bitcoin Core vulnerability are recorded there under the Core CVE. CVE identifiers for vulnerabilities in Qanum itself are requested through GitHub Security Advisories (GitHub is a CVE Numbering Authority).

Actively Exploited Vulnerabilities

Qanum is free and open-source software, published free of charge and not monetised by its developer. The project’s assessment is that it is not supplied in the course of a commercial activity in the sense of the EU Cyber Resilience Act (Regulation (EU) 2024/2847); if that changes, this policy will be updated first. Independently of that, if a vulnerability is known to be actively exploited, a fix and an advisory are published as fast as possible, node operators are warned through the release notes, a PGP-signed notice and https://qanum.org, and the case is recorded in CVE-REGISTER.md.

security.txt

contrib/security.txt is the machine-readable contact file (RFC 9116), published signed with the disclosure key at https://qanum.org/.well-known/security.txt. It is renewed before it expires as part of every release (CONTRIBUTING.md, release checklist).

Scope

In scope: consensus rules and validation, the P2P protocol and message handling (net_v2, the Noise transport, node identities and TOFU), cryptography (ML-DSA / SLH-DSA / ML-KEM integration, signature verification and VERIFY-UNITS accounting), wallet storage and key handling, header pre-sync / minimum chain work / assumevalid handling, and the RPC surface (loopback-only by default).

Out of scope: attacks requiring physical access, social engineering, and loss of testnet coins — testnet coins have no economic value (see TESTNET-TERMS.md).

Safe Harbor

Good-faith security research on Qanum software and testnet infrastructure is welcome. We will not pursue legal action against researchers who report vulnerabilities responsibly, coordinate disclosure with us, and avoid accessing or affecting other users’ funds, data, or nodes beyond what is needed to demonstrate the issue. Please do not disclose before the fix is released, within the windows in Disclosure (never more than 90 days after the report without your agreement).

Verifying a Release

Every release ships, next to the source tarball and the SBOMs:

Every release also ships qanum-security-X.Y.Z.json, the security facts of the release: the signature suites, the P2P transport, the networks, the release keys, the toolchain and liboqs, the cargo audit result and the SHA-512 of the SBOMs, written from the code of the tag. It is listed in SHA512SUMS, so the signatures cover it. It claims no certification and no external audit.

With a qanum-cli you already trust:

qanum-cli verifyrelease <directory-with-the-downloaded-files>

It works offline (no node), checks both signatures against the release keys built into qanum-cli and the SHA-512 of every listed file, and exits with code 0 only if everything matches.

First download (no trusted qanum-cli yet): compare the release key ids below with the ones published on https://qanum.org, check the classical signature and the checksums, then build and run verifyrelease on the same files:

gpg --verify SHA512SUMS.asc SHA512SUMS
sha512sum -c SHA512SUMS

Release Signing Keys

Suite Key id Status
ML-DSA-87 277c02387e4908e1bdcd30ff2a4428e0343c5639f2a5b4ff31df9038e451326b active from v0.9.0
SLH-DSA-SHAKE-256s 17c676d4b25569fdb9898ac2f9e5c1f9fe6b6967bee99131b485f16b8e0b0aa5 active from v0.9.0

Generated offline on 2026-10-11. Their public keys are in src/release_keys.rs; a test checks that the key ids above match them.

The secret keys are created with qanum-release-sign keygen and live only on an offline machine, encrypted under a passphrase (Argon2id + AES-256-GCM). How releases are built, signed and published: RELEASE-SIGNING.md. Rotation: a release signed with the current keys ships the next keys in src/release_keys.rs. Compromise: the key is removed in the next release and the compromise is announced here, in a PGP-signed notice and on https://qanum.org.

Testnet Note

Testnet coins have no value, the chain may be reset at any time, and mainnet does not exist yet (mainnet genesis is not defined). Never send anything of value to any Qanum address. Full terms: TESTNET-TERMS.md.