Threat modelModèle de menace
CURS3D defends against three classes of adversary:
CURS3D se défend contre trois classes d'adversaire :
- A cryptographically-relevant quantum computer (CRQC).Un ordinateur quantique cryptographiquement pertinent (CRQC). Native CURS3D transactions sign with ML-DSA-87 (FIPS 204, the finalised version of CRYSTALS-Dilithium-L5). All hashing is SHA-3 family (FIPS 202). EVM-flavoured transactions sit alongside and use secp256k1 ECDSA by design — that path is intentionally non-PQ to keep MetaMask / Hardhat / Foundry working; users wanting full PQ protection use the native ML-DSA path through
POST /api/tx/submit.Les transactions natives CURS3D sont signées en ML-DSA-87 (FIPS 204, version finalisée de CRYSTALS-Dilithium-L5). Tout le hachage est de la famille SHA-3 (FIPS 202). Les transactions EVM cohabitent et utilisent secp256k1 ECDSA par conception — ce chemin est intentionnellement non-PQ pour conserver la compatibilité MetaMask / Hardhat / Foundry ; les utilisateurs voulant une protection PQ totale passent par le chemin natif ML-DSA viaPOST /api/tx/submit. - Byzantine validators.Validateurs byzantins. Equivocation triggers a 33% slashing penalty plus jail. Inactivity yields escalating stake penalties after a two-epoch grace period.L'équivocation déclenche une pénalité de slashing de 33 % et une mise au cachot. L'inactivité entraîne des pénalités croissantes après deux epochs de grâce.
- Network-level attackers.Attaquants au niveau réseau. Per-peer rate limiting, peer-scoring with automatic ban below threshold, signed HeightAnnounce messages, body-size limits, and HTTP/WS connection caps.Rate-limiting par pair, peer-scoring avec ban automatique sous un seuil, messages HeightAnnounce signés, limites de taille de body, plafonds de connexions HTTP/WS.
Key cryptographic primitivesPrimitives cryptographiques clés
| ComponentComposant | AlgorithmAlgorithme | StandardStandard | SecuritySécurité |
|---|---|---|---|
| SignaturesSignatures | CRYSTALS-Dilithium L5 | FIPS 204 (2024) | Cat-5 (≥ AES-256)Cat-5 (≥ AES-256) |
| HashingHachage | SHA-3 / Keccak | FIPS 202 | 256-bit |
| Wallet KDFKDF wallet | Argon2id (m=64MB, t=3, p=4) | RFC 9106 | — |
| Wallet AEADAEAD wallet | AES-256-GCM | NIST SP 800-38D | 256-bit |
AuditsAudits
All findings from internal review are tracked in the public repository.
Tous les résultats de revue interne sont suivis dans le dépôt public.
| DateDate | AuditorAuditeur | ScopePérimètre | ResultRésultat |
|---|---|---|---|
| 2026-04 | 3-AI council (Claude, Codex, Gemini)Conseil 3-AI (Claude, Codex, Gemini) | Architecture review, threat surface mapRevue d'architecture, carte de surface de menace | Recommendations appliedRecommandations appliquées |
| 2026-05 | Internal hardening passPasse de durcissement interne | Rust core: storage, consensus, network, API rate limitsCœur Rust : storage, consensus, réseau, rate limits API | 11 findings fixed (commit 11 problèmes corrigés (commit c015ee3) |
| 2026 H2 | External audit (TBD)Audit externe (à confirmer) | Full protocol & node binaryProtocole complet & binaire du node | Scheduled before mainnetPlanifié avant mainnet |
cargo audit runs in CI on every push. The audit policy lives in .cargo/audit.toml with per-crate justifications for ignored transitive advisories. Zero critical findings.
cargo audit tourne en CI à chaque push. La politique d'audit vit dans .cargo/audit.toml avec des justifications par crate pour les advisories transitifs ignorés. Zéro finding critique.
Bug bounty & responsible disclosureBug bounty & divulgation responsable
A formal Immunefi-style bug-bounty program is forthcoming. Until then, please report security issues privately by email.
Un programme de bug bounty formel (style Immunefi) est en préparation. En attendant, merci de signaler les problèmes de sécurité par e-mail privé.
security@curs3d.fr
Please include: a clear description, reproduction steps, the affected version (commit hash if possible), and your suggested severity. Do not open public GitHub issues for live exploits.
Merci d'inclure : une description claire, les étapes de reproduction, la version affectée (commit hash si possible) et votre suggestion de sévérité. Ne publiez pas d'issues GitHub publiques pour des exploits actifs.
PGP
For end-to-end-encrypted reports, encrypt to the CURS3D Security key:
Pour des rapports chiffrés bout-à-bout, chiffrez avec la clé CURS3D Security :
- Fingerprint:
14C7 7953 E130 4F27 DDCF C6B2 4438 0E95 639E 6F37 - Download: /.well-known/security-pgp.asc (ASCII-armored, ed25519 sign + cv25519 encrypt subkey, expires 2028-05-21)
- Identity:
CURS3D Security <security@curs3d.fr>
A private GitHub Security Advisory on Pazificateur69/curs3d is also accepted and equally secret.
Un GitHub Security Advisory privé sur Pazificateur69/curs3d est également accepté et tout aussi confidentiel.
ScopePérimètre
In scope: the Rust node binary, the HTTP API, the WebSocket feed, the Ethereum-compatible JSON-RPC subset, the SDKs (Rust / JS / Python), the website (XSS, mixed-content, tokenomics-page math errors).
Dans le périmètre : le binaire Rust du node, l'API HTTP, le flux WebSocket, le sous-ensemble JSON-RPC compatible Ethereum, les SDKs (Rust / JS / Python), le site (XSS, contenu mixte, erreurs de math sur la page tokenomics).
Out of scope: third-party services (Cloudflare, Stoplight Elements), brute-force, DoS that requires sustained traffic above the public rate limits, social-engineering of maintainers.
Hors périmètre : services tiers (Cloudflare, Stoplight Elements), brute-force, DoS nécessitant un trafic soutenu au-dessus des rate limits publics, social-engineering des mainteneurs.
Safe-harborSphère de sécurité (safe harbor)
Good-faith research that respects user privacy, avoids data destruction and gives us a reasonable disclosure window will not be subject to legal action.
La recherche de bonne foi qui respecte la vie privée des utilisateurs, évite la destruction de données et nous laisse une fenêtre de divulgation raisonnable ne fera pas l'objet de poursuites.
Disclosed vulnerabilitiesVulnérabilités divulguées
No public disclosures yet.
Aucune divulgation publique pour l'instant.
Once the bug-bounty program is live, fixed and public-disclosed findings will appear here with CVE identifiers, severity, and patch commit links.
Dès que le programme de bug bounty sera actif, les findings corrigés et divulgués apparaîtront ici avec leurs identifiants CVE, leur sévérité et les commits de patch.
Known limitationsLimites connues
The following are documented in the project CLAUDE.md and reproduced here for transparency. None of them block the public 5-validator testnet, but they shape what is and isn't safe to rely on today.
Les éléments suivants sont documentés dans le CLAUDE.md du projet et reproduits ici par souci de transparence. Aucun ne bloque le testnet public à 5 validateurs, mais ils conditionnent ce sur quoi il est sûr de s'appuyer aujourd'hui.
- External security audit not yet performed.Audit de sécurité externe non encore réalisé. Internal audit cycles (3-AI council 2026-04, single-author Codex passes 2026-05) have closed multiple findings, but no third-party firm has reviewed the codebase. Treat this testnet accordingly. Plusieurs audits internes (council 3 IA en avril 2026, passes Codex en mai 2026) ont fermé de nombreux findings, mais aucune firme tierce n'a revu le code. À considérer en conséquence pour ce testnet.
-
invalid state rootat epoch boundaries — fixed.invalid state rootaux frontières d'époque — corrigé. Root cause: epoch settlement applied at block-apply time but skipped at boot replay; identical helper now runs in both paths. Regression test added (test_restart_across_epoch_boundary). Cause racine : le settlement d'époque s'appliquait à l'ajout de bloc mais pas au replay de démarrage ; un helper identique s'exécute désormais des deux côtés. Test de régression ajouté (test_restart_across_epoch_boundary). -
RequestBlockssync timeout / boot forks — fixed.Timeout syncRequestBlocks/ forks au boot — corrigé. BlockResponse now tolerates stale contiguous batches, sync escalates to snapshots after retries, forked checkpoints receive a snapshot offer, failed broadcasts are retried, and validators pause block production during startup/sync. BlockResponse tolère maintenant les lots contigus arrivés en retard, la sync escalade vers snapshot après retries, les checkpoints divergents reçoivent une offre snapshot, les broadcasts échoués sont retentés, et les validateurs suspendent la production pendant le démarrage/la sync. -
PGP key published 2026-05-21.Clé PGP publiée le 2026-05-21.
CURS3D Security key (fingerprint
14C7 7953 E130 4F27 DDCF C6B2 4438 0E95 639E 6F37) is published at /.well-known/security-pgp.asc and referenced from security.txt. End-to-end encrypted reports are now accepted; GitHub Security Advisories remain equally accepted. La clé CURS3D Security (empreinte14C7 7953 E130 4F27 DDCF C6B2 4438 0E95 639E 6F37) est publiée sur /.well-known/security-pgp.asc et référencée depuis security.txt. Les rapports chiffrés bout-à-bout sont désormais acceptés ; les GitHub Security Advisories restent acceptés à égalité. - No external audit.Aucun audit externe. All cryptography, consensus and VM code is implemented in-house and reviewed only internally. An external audit is a prerequisite to mainnet, not to the public testnet. Toute la cryptographie, le consensus et le code VM sont implémentés en interne et revus uniquement en interne. Un audit externe est un prérequis pour le mainnet, pas pour le testnet public.
Mainnet will not ship while any of the above remains open.
Le mainnet ne sortira pas tant qu'un de ces points reste ouvert.