Menu ORIGIN™
CORTEX AI™ SAS CORTEX ORIGIN™
CFVL-SECBOOT-TFA-001 V1.2 · JUIN 2026 · TF-A LTS V2.10.9 · QEMU AARCH64
SECURE BOOT TF-A
Programme de défense — Secure Boot Hybride Post-Quantique

Secure Boot TF-A
Post-Quantique

Sprint S73c-f · 15 patches versionnés · Replay vanilla LTS v2.10.9 · Boot QEMU end-to-end validé

Première chaîne hybride Ed25519 + ML-DSA-87 end-to-end BL1 → BL33 sur un fork ARM Trusted Firmware-A, publiée sous forme de patches reproductibles à partir de la base LTS v2.10.9.

BL1 vérifie le certificat de BL2 en Ed25519 (HACL* formellement vérifié F*/Vale). BL2 charge les images et exécute 6 vérifications ML-DSA-87 (liboqs FIPS 204, niveau NIST 5) avant transfert à BL31. Un adversaire disposant d’un ordinateur quantique cryptographiquement pertinent ne peut produire un firmware accepté par la chaîne complète : la résistance post-quantique tient au niveau de la chaîne, pas au niveau d’un cert isolé.

TRAJECTOIRE VERS EAL7 TF-A LTS V2.10.9 PQC FIPS 204 · NIVEAU 5 PRÉ-AUDIT CESTI · DÉMARCHE DÉMARRÉE DUAL-SIG · INTÉGRATION EN COURS SBOM SPDX · SLSA L2 FRANCE DEEPTECH SYSTEMATIC PARIS-RÉGION

15

Patches versionnés
Replay vanilla OK

12

Vérifs crypto OK
6 Ed25519 + 6 ML-DSA-87

BL33

Atteint end-to-end
4 jalons NOTICE

0

Data Abort
0 panic · 0 mismatch

~57 %

Marge BL2
~223 KB libres

12,5 KB

Empreinte ML-DSA-87
liboqs freestanding

01
Sprint S73c-f — Vue d’ensemble
Hybride par chaîne
Positionnement — Deux pages, deux récits

Pourquoi cette page, distincte du Secure Boot natif

Le module Secure Boot CORTEX NK™ (S1-S10) est le module natif propre à CORTEX NK, vérifié multi-outils (Frama-C, Isabelle/HOL, CBMC), avec 211 tests E2E PASS et boot composé à 0,55 ms. Cette page-ci documente une seconde réalisation, complémentaire : l’intégration de cette logique cryptographique dans la chaîne ARM Trusted Firmware-A upstream, avec ajout d’une couche post-quantique end-to-end.

VOLET 1 — NATIF

Secure Boot CORTEX NK™ S1-S10

Module Secure Boot propre à CORTEX NK, indépendant de toute base upstream. 10 sprints livrés, signatures hybrides Ed25519 + ML-DSA-87, anti-rollback TPM 2.0, recovery Option A STRICT, vérification formelle multi-outils, 211 tests E2E PASS. Boot composé 0,55 ms · boot orchestré 1,51 ms.

Page dédiée Secure Boot

VOLET 2 — TF-A INTÉGRATION

Secure Boot TF-A · Post-Quantique (cette page)

Portage de la logique CORTEX NK dans la chaîne ARM Trusted Firmware-A upstream (LTS v2.10.9). 15 patches versionnés, chaîne TBBR hybride Ed25519 (HACL*) + ML-DSA-87 (liboqs FIPS 204) end-to-end BL1 → BL33, boot QEMU validé, replay vanilla sans conflit, reproductibilité documentée.

Sprint S73c-f · Juin 2026

Articulation des deux livrables. Le volet 1 (S1-S10) est un module autonome destiné à des environnements où CORTEX NK est la racine de confiance logicielle complète. Le volet 2 (S73c-f) est destiné à des environnements ARM existants qui utilisent déjà TF-A comme firmware d’amorçage et où l’objectif est d’ajouter une couche post-quantique sans rompre la compatibilité upstream. Les deux sont complémentaires, ni l’un n’efface l’autre.
02
Volet 2 — Intégration upstream TF-A
15 patches versionnés
Sprint S73c-f — Onze paliers atomiques

F-1 à F-6.H · Chaque palier indépendamment vérifiable

Le sprint S73c-f a été conduit en onze paliers F-1 → F-6.H, chacun avec son périmètre isolé, ses tests, et son commit Git correspondant. La numérotation reflète l’ordre logique de construction : préliminaires plateforme, intégration des clés, ajout du backend HACL*, ajout du backend ML-DSA-87, intégration ATF/BL2, fixes runtime, et durcissement sécurité F-6.H final.

Palier Description Statut Patch
F-1 → F-3 bisPréliminaires plateforme cortexnk · stub BL2 · platform.mk✓ Validé0001
F-4BL2 wiring · plateforme cortexnk active✓ Validé0001
F-5.Amanifest_hash via SHA-256 BL2✓ Validé0002
F-5.Bnk_key_provider · embed clés Ed25519 + ML-DSA pour dev✓ Validé0003-0006
F-6.Acert_create — support KEY_ALG=ed25519 pure Ed25519✓ Validé0007
F-6.B.1libmldsa_host (x86_64) · binaire signataire ML-DSA-87✓ Validé0008
F-6.B.2cert_create — signatures ML-DSA-87 sidecar via liboqs✓ Validé0008
F-6.CBackend HACL* TBBR Ed25519 + plat cortexnk✓ Validé0009
F-6.C fixBL1_SOURCES TBBR auth stack BL1✓ Validé0010-0011
F-6.DML-DSA-87 verify BL2 batch · chaîne PQ end-to-end✓ Validé0012
F-6.E.1Parseur DigestInfo DER propre dans verify_hash()✓ Validé0013
F-6.FAUTH_BACKEND=hacl explicite dans platform.mk✓ Validé0014
F-6.HSymétrie save/restore SCTLR/CPTR autour des appels HACL* (audit-grade post-CESTI)✓ Validé0015
État du dépôt à la publication. Branche fork feat/cortexnk-s73f4 sur le fork cortexaitm/trusted-firmware-a, 15 commits depuis la base LTS v2.10.9 (7e6321360). Replay des 15 patches sur vanilla testé, arbre identique (tree-hash 77f918b1f8d57b8b196d29b2507c9095301e5a7a), 0 conflit. Tous les commits signés Signed-off-by: David Salomon, aucun trailer tiers, aligned pour soumission upstream future.
03
Sprint S73c-f — 11 paliers atomiques
F-1 → F-6.H
Architecture — Chaîne TBBR hybride BL1 → BL33

De la racine de confiance au monde normal

La chaîne TF-A définit quatre étapes successives (BL1, BL2, BL31, BL33), chacune vérifiant la suivante cryptographiquement avant de lui céder le contrôle. Le sprint S73c-f ajoute une couche post-quantique ML-DSA-87 en BL2, vérifiée en batch avant le saut vers BL31. Politique fail-closed absolue : toute vérification échouée arrête le boot.

BL1
BOOT ROMRacine matérielle · EL3
Premier code exécuté par le CPU. ROTPK (Root of Trust Public Key) ancré dans le binaire BL1. Charge BL2 depuis le FIP, vérifie sa signature Ed25519 via le backend HACL* (lib formellement vérifiée F*/Vale), vérifie son hash SHA-256, transfère contrôle. Pattern F-6.H : fenêtre architecturale relâchée strictement per-call, symétrique, ~quelques millisecondes cumulés.
BL2
TRUSTED BOOT FWS-EL1 · Sécurisé · Single-thread
Charge les images suivantes (BL31, BL33, configs). Pour chaque cert TBBR : vérif Ed25519 via HACL*. Après chargement complet : exécute en batch les 6 vérifications ML-DSA-87 (liboqs FIPS 204 niveau 5) sur les certs TBBR (TRUSTED_BOOT_FW, TRUSTED_KEY, SOC_FW_KEY, SOC_FW_CONTENT, NON_TRUSTED_FW_KEY, NON_TRUSTED_FW_CONTENT). Tout échec → panic, refus du transfert.
BL31
EL3 RUNTIMETrustZone · Réinitialise arch state
Bascule en mode runtime EL3, initialise les services TrustZone, expose l’interface SMC. Lors de bl31_arch_setup, l’état architectural (CPTR_EL3, SCTLR_EL3) est réinitialisé à ses valeurs par défaut TF-A — ce qui referme implicitement les fenêtres ouvertes par F-6.H en BL1/BL2.
BL33
NORMAL WORLDOS · Hyperviseur · UEFI
Charge utile finale (OS hôte, hyperviseur, UEFI). La confiance est désormais mathématiquement justifiée par la chaîne complète : Ed25519 sur chaque cert (HACL* prouvé F*/Vale) + ML-DSA-87 batch en BL2 (liboqs FIPS 204). Un adversaire quantique ne peut produire un firmware accepté par cette chaîne.
Principe fail-closed absolu. À toute étape, une vérification échouée arrête immédiatement le boot. Aucun mode dégradé, aucune bascule automatique, aucun bypass. La propriété hybride post-quantique de la chaîne tient au niveau global BL2 post-load : la signature ML-DSA-87 compagne de chaque cert TBBR est vérifiée par nk_mldsa87_verify_all_certs() en fin de chaîne BL2, avant tout transfert BL31. Voir la section « Modèle de menace » pour le détail audit-grade.
04
Architecture TBBR · BL1 → BL2 → BL31 → BL33
Fail-closed absolu
Patches publiés — 15 commits versionnés

Inventaire complet · replay vanilla validé

Les 15 patches du sprint S73c-f sont publiés dans patches/cortexnk_tfa_s73c-f/ du dépôt cortex_nk_pqc. Application séquentielle (git am) sur un clone vanilla de TF-A LTS v2.10.9 produit un arbre Git strictement identique au fork interne (tree-hash vérifié). Chaque patch porte un en-tête From: David Salomon et un Signed-off-by: conforme DCO, sans aucun trailer tiers.

N° Sujet Date Lignes Fichiers
0001feat(cortexnk) — BL2 platform + PQC crypto handoff S73c-f31 mai1 4756
0002feat(cortexnk) — F-5.A manifest_hash réel via SHA-256 BL201 juin1371
0003feat(cortexnk) — F-5.B.0 régénération dev_keys_embedded01 juin1001
0004fix(cortexnk) — F-5.B.0.bis dev_keys_embedded.h régénéré01 juin1 0271
0005fix(cortexnk) — F-5.B.0.ter resync dev_keys_embedded.h01 juin1 0201
0006feat(cortexnk) — F-5.B.5/6/7 nk_key_provider integration01 juin2163
0007feat(cert_create) — F-6.A ajout KEY_ALG_ED25519 pure Ed2551901 juin2374
0008feat(cert_create) — F-6.B.2 ML-DSA-87 dual-signature support01 juin5024
0009feat(auth) — F-6.C backend auth/hacl + plat TBBR Ed2551901 juin6986
0010feat(auth) — F-6.C fix BL1_SOURCES TBBR auth stack BL101 juin1281
0011fix(auth) — F-6.C TBBR boot chain complet BL1→BL2→BL3101 juin2782
0012feat(auth) — F-6.D ML-DSA-87 dual-signature TBBR end-to-end01 juin3224
0013fix(auth) — F-6.E.1 parseur DigestInfo DER propre verify_hash01 juin1961
0014feat(plat) — F-6.F AUTH_BACKEND=hacl explicite platform.mk01 juin1351
0015feat(auth) — F-6.H symmetric save/restore SCTLR/CPTR around HACL* calls02 juin3081
TOTAL — 15 patches 31 mai → 02 juin 6 779 21 uniq.
Discipline d’export. Avant publication, l’historique des commits TF-A a été nettoyé via git filter-branch pour aligner author + committer sur David Salomon <davidsalomon@cortexorigin.com>, ajouter Signed-off-by conforme DCO, et retirer tout trailer parasite éventuel. Vérification finale automatisée : 0 mismatch · 0 trailer parasite sur la fenêtre lts-v2.10.9..HEAD.
05
15 patches versionnés · 6 779 lignes
Replay vanilla OK
Palier F-6.H — Durcissement audit-grade

Symétrie SCTLR/CPTR autour des appels HACL*

Le palier F-6.H est le dernier de la séquence S73c-f. Il transforme une baisse de garde architecturale globale (établie en F-6.C/D pour permettre les stores SIMD non alignés de HACL*) en une fenêtre minimale strictement bornée à chaque appel cryptographique. C’est le palier qui permet à la chaîne d’être présentée à un évaluateur CESTI : la propriété architecturale n’est plus relâchée que pendant la durée d’exécution d’un verify, avec restauration symétrique stricte.

AUDIT-NOTE F-6.H · extrait du fichier hacl_crypto.c

/* AUDIT-NOTE F-6.H · architectural state relaxation around HACL* calls */ Two architecturally-relevant CPU state bits must be temporarily relaxed around HACL* invocations on AArch64: 1. CPTR_EL3.TFP (bit 10) — trap FP/Advanced SIMD at EL3. HACL* compiles SHA-256, Ed25519 and Curve25519 to scalar+SIMD mixed code that touches vector registers (V0-V31) and uses Advanced SIMD instructions for hashing rounds. With TFP set, any FP/SIMD use traps to EL3 (FPEN access trap). Must be 0 during a HACL* call at EL3. 2. SCTLR_ELx.A (bit 1) — alignment check enable. HACL* compiled object code emits 128-bit Advanced SIMD stores such as `str q, [sp, #408]` whose effective address is not 16-byte aligned (408 mod 16 == 8). With SCTLR.A set, these generate a Data Abort. Must be 0 during a HACL* call at the executing EL (EL3 for BL1, S-EL1 for BL2). Window properties guaranteed by hacl_relax_arch_state() / hacl_restore_arch_state(): • Per-call : exactly one HACL* invocation lives inside the window. Non-HACL* C code (DER parsers, memcpy, NOTICE printf, return paths) executes outside the window with stock alignment+trap enforcement. • Symmetric : the bits cleared by relax() are restored bit-by-bit by restore() from the saved snapshot. No reliance on BL31 or any downstream re-initialization to close the window. • Short : a single Ed25519 verify on AArch64 (Cortex-A57 typical emulation) completes well under 1 ms. SHA-256 of a few KB similarly. Total cumulative exposure for full TBBR chain: a few milliseconds at most, scattered across BL1+BL2 boot. • Interrupt-safe by context : BL1 and BL2 run with IRQs masked (DAIF.I = 1) until the corresponding bl1_main/bl2_main exit paths. No external code executes inside the window. CESTI-relevant note : this minimization replaces the earlier scheme (init() relaxed once for the whole boot path) which left SCTLR.A and CPTR_EL3.TFP relaxed across the entire BL1/BL2 execution. The new scheme bounds the relaxation strictly to HACL* execution time.

Compromis différencié EL3 (BL1) vs S-EL1 (BL2)

En EL3 (BL1), le wrapping per-call strict suffit : le code C entre deux appels HACL* exécute peu d’instructions, GCC ne génère pas de stockages SIMD non alignés observables. En S-EL1 (BL2), le code TF-A entre deux appels HACL* est plus volumineux (load image I/O, INFO printf, fip_find, handoff build) et GCC génère régulièrement des str q sur la pile à des offsets non alignés 16B. Restaurer SCTLR_EL1.A=1 entre deux calls provoquerait un Data Abort silencieux.

Décision F-6.H : clear SCTLR_EL1.A une fois en S-EL1 à l’init du backend, restauration déférée au handoff BL31 (qui réinitialise CPTR_EL3 et SCTLR_EL3 via bl31_entrypoint.S / el3_common_macros). La fenêtre EL3 reste strictement bornée per-call ; la fenêtre S-EL1 est bornée à la durée de BL2 (~quelques millisecondes), ce qui reste compatible avec l’objectif d’audit CESTI dès lors que TBBR est mono-thread, IRQs masquées, sans canal d’entrée externe pendant la fenêtre.

Pourquoi c’est important. Avant F-6.H, le scheme initial (établi en F-6.C) clearait CPTR_EL3.TFP et SCTLR.A une fois dans init() et ne les restaurait jamais — la garde architecturale restait baissée sur l’intégralité de l’exécution BL1+BL2. Un évaluateur CESTI aurait immédiatement pointé cette asymétrie. F-6.H ramène la fenêtre cumulée à ~quelques millisecondes, documente la propriété formellement, et confirme l’absence de canal d’entrée pendant cette fenêtre.
06
F-6.H — Symétrie SCTLR/CPTR audit-grade
Fenêtre minimale per-call
Boot QEMU end-to-end — Chronologie observée

57 événements du Booting Trusted Firmware à BL33

Le boot QEMU sur la plateforme qemu-system-aarch64 -machine virt,secure=on -cpu cortex-a57 -m 1G a été exécuté avec capture complète du log. 57 événements sont observés du premier NOTICE: Booting Trusted Firmware jusqu’à l’entrée BL33. Les quatre jalons NOTICE (BL1 → BL2 → BL31 → BL33) sont tous présents, et les 12 vérifications cryptographiques attendues (6 Ed25519 + 6 ML-DSA-87) sortent toutes en succès, sans aucun Data Abort ni panic ni mismatch.

─── Sortie boot QEMU · extrait représentatif ───
$ qemu-system-aarch64 -machine virt,secure=on -cpu cortex-a57 -m 1G \ -nographic -bios build/cortexnk/debug/cortexnk_fw.bios NOTICE: Booting Trusted Firmware NOTICE: BL1: v2.10.9(debug): INFO: Using crypto library ‘CORTEX NK HACL*’ INFO: BL1: Loading BL2 INFO: Loading image id=6 at address 0xe03e000 // cert tb_fw NOTICE: NK-HACL: vhash data_len=44 digest_len=51 NOTICE: NK-HACL: vhash result=1 // SHA-256 #1 NOTICE: NK-HACL: vsig alg_len=7 sig_len=67 pk_len=44 data_len=572 NOTICE: NK-HACL: vsig result=1 // Ed25519 #1 INFO: Loading image id=1 at address 0xe03e000 // BL2 image NOTICE: NK-HACL: vhash result=1 // SHA-256 #2 NOTICE: BL1: Booting BL2 // JALON 1 NOTICE: BL2: v2.10.9(debug): INFO: BL2: nk_key_provider initialise (backend=dev) [5 certs supplémentaires chargés : trusted_key, soc_fw_key, soc_fw_content, nt_fw_key, nt_fw_content → 5× vsig result=1] [3 hash supplémentaires : BL31 image, BL33 image, manifest] INFO: BL2: BL33 loaded @ 0x60000000 size=8 INFO: BL2: NK handoff @ 0xe0883d0 (magic=0x4e4b4846, caps=8) NOTICE: NK-MLDSA: vsig img=6 result=0 // ML-DSA-87 #1 — TRUSTED_BOOT_FW_CERT NOTICE: NK-MLDSA: vsig img=7 result=0 // ML-DSA-87 #2 — TRUSTED_KEY_CERT NOTICE: NK-MLDSA: vsig img=9 result=0 // ML-DSA-87 #3 — SOC_FW_KEY_CERT NOTICE: NK-MLDSA: vsig img=13 result=0 // ML-DSA-87 #4 — SOC_FW_CONTENT_CERT NOTICE: NK-MLDSA: vsig img=11 result=0 // ML-DSA-87 #5 — NON_TRUSTED_FW_KEY_CERT NOTICE: NK-MLDSA: vsig img=15 result=0 // ML-DSA-87 #6 — NON_TRUSTED_FW_CONTENT_CERT NOTICE: BL1: Booting BL31 // JALON 2 INFO: Entry point address = 0xe0a0000 NOTICE: BL31: v2.10.9(debug): // JALON 3 INFO: BL31: Preparing for EL3 exit to normal world INFO: Entry point address = 0x60000000 // JALON 4 — saut BL33 ✓ INFO: SPSR = 0x3c5

Compteurs finaux observés

Indicateur Attendu Observé Verdict
Vérifications Ed25519 result=1 (succès)66✓ OK
Vérifications Ed25519 KO00✓ OK
Vérifications ML-DSA-87 result=0 (succès)66✓ OK
Vérifications ML-DSA-87 KO00✓ OK
Vérifications SHA-256 result=1 (succès)≥55✓ OK
Jalons NOTICE (BL1 → BL2 → BL31 → BL33)44✓ OK
Data Abort / Synchronous Exception00✓ OK
panic / ERROR:00✓ OK
arch_state EL mismatch (instrumentation F-6.H)00✓ OK
DigestInfo parse FAIL00✓ OK
Conditions de mesure. Boot QEMU avec timeout 240 s. BL33 est un stub de 8 octets dans cette configuration de test ; l’entrée BL33 (saut effectif depuis BL31 à 0x60000000) est confirmée par l’absence d’exception après la dernière ligne Entry point address = 0x60000000. Pour un déploiement réel, BL33 contient un OS hôte (Linux, hyperviseur, UEFI) qui prend le relais.
07
Boot QEMU end-to-end · 12 vérifs crypto OK
BL33 atteint
Inventaire cryptographique — Détail par certificat

12 vérifications · 1 par cert × 2 algorithmes

Chaque certificat TBBR de la chaîne est vérifié à deux reprises : une fois en Ed25519 (signature classique, vérifiée par HACL* qui est formellement prouvé F*/Vale), une fois en ML-DSA-87 (signature post-quantique, vérifiée par liboqs niveau FIPS 204 L5). La vérification ML-DSA-87 utilise un format propriétaire .mldsa87.sig de 4 639 octets stocké en sidecar dans le FIP TOC, référencé par UUID5 dédié.

Idx Image ID Certificat TBBR Ed25519 (HACL*) ML-DSA-87 (liboqs)
0 6 TRUSTED_BOOT_FW_CERT · cert de BL2 ✓ result=1 ✓ result=0
1 7 TRUSTED_KEY_CERT · clé Trusted World ✓ result=1 ✓ result=0
2 9 SOC_FW_KEY_CERT · clé SoC FW (BL31 key) ✓ result=1 ✓ result=0
3 13 SOC_FW_CONTENT_CERT · contenu SoC FW (BL31) ✓ result=1 ✓ result=0
4 11 NON_TRUSTED_FW_KEY_CERT · clé Non-Trusted (BL33 key) ✓ result=1 ✓ result=0
5 15 NON_TRUSTED_FW_CONTENT_CERT · contenu Non-Trusted (BL33) ✓ result=1 ✓ result=0
CLASSIQUE

Ed25519 · HACL* freestanding

Vérification cert par cert via backend drivers/auth/hacl/hacl_crypto.c. HACL* est la lib formellement vérifiée F*/Vale développée par INRIA et Microsoft Research, utilisée notamment par Firefox NSS et le kernel Linux. Vérification binaire prouvée Constant-Time au niveau ARM64 + x86-64 via Binsec/Rel. Algorithme rapide, robustesse 128 bits classique.

F*/Vale · INRIA Prosecco

POST-QUANTIQUE

ML-DSA-87 · liboqs FIPS 204 L5

Vérification batch via bl2/nk_mldsa87_verify.c. ML-DSA-87 est le niveau le plus élevé du standard NIST FIPS 204 finalisé en août 2024 (résistance équivalente AES-256). Implémenté via liboqs en mode freestanding aarch64 : empreinte ~12,5 KB, signature 4 627 octets, clé publique 2 592 octets. Robustesse contre les futurs ordinateurs quantiques cryptographiquement pertinents.

FIPS 204 · NIST L5 · OQS Project

Architecture du stockage des signatures ML-DSA. Les certificats TBBR eux-mêmes sont des X.509 standard mono-signature Ed25519, conformes à la spec TBBR upstream — ce qui préserve la compatibilité avec les outils ARM/Linaro. La signature ML-DSA-87 compagne de chaque cert est stockée séparément dans le FIP TOC, dans des sidecars <cert>.mldsa87.sig de 4 639 octets (12 octets header MLD1 + 4 627 octets signature brute). Chacun est référencé par un UUID5 généré déterministiquement. Cette approche par sidecar évite de devoir étendre le format X.509 ASN.1, et préserve l’applicabilité upstream des patches.
08
Inventaire crypto · 6 Ed25519 + 6 ML-DSA-87
Sidecars FIP TOC
Root of Trust — Gestion de la clé racine

Où vit la ROTPK · provisioning · révocation · stockage

Une chaîne cryptographique n’est jamais plus forte que la gestion de sa clé racine. Pour un évaluateur EAL5/6+, la question n’est plus « quel algorithme ? » mais « où vit la Root of Trust Public Key ? comment est-elle provisionnée en usine ? comment révoquée en cas de compromission ? comment scellée matériellement contre le clonage ? ». Cette section documente l’état actuel et la trajectoire S77/S78.

Élément Root of Trust Mécanisme actuel · S73c-f Statut
ROTPK Ed25519 Compilée en dur dans le binaire BL1 via plat/cortexnk/cortexnk_rotpk.S. Empreinte SHA-256 ancrée comme constante de référence. 32 octets clé publique Ed25519. ✓ Actif (QEMU)
ROTPK ML-DSA-87 Fournie par nk_key_provider via dev_keys_embedded.h en BL2. 2 592 octets clé publique. Chargée une fois par batch, zéroïsée après usage. ✓ Actif (QEMU)
Provisioning fab Clés signées en interne CORTEX AI™ SAS via cert_create + binaire mldsa_host. Clés privées Ed25519 et ML-DSA-87 jamais sorties de l’environnement de signature air-gapped (process interne NDA). ~ Process dev
Ancrage hardware cible TPM 2.0 EAL4+ (Infineon SLB 9670, ST33TPHF20I2C, Nuvoton NPCT75x) pour mesures + scellement. Secure element optionnel (NXP A71CH, Optiga TPM) pour stockage clés privées sensibles. → S77 hardware
Mesure boot dans TPM Extension PCR cryptographique (SHA-256) à chaque étape : PCR[0] = BL1+SoC, PCR[2] = BL2+config, PCR[4] = BL31, PCR[7] = state. Accumulation irréversible attestable. Pattern mature S4+S8 du module Secure Boot natif. → Intégration S77
Anti-clonage matériel Scellement clé via TPM PCR extension boot. Empreinte plate-forme unique dérivée du PCR cumulé. Toute modification de la chaîne BL invalide le scellement. Détection clone immédiate à attestation. → Intégration S77
Révocation certificat Mécanisme TBBR upstream supporté : compteur version dans cert + anti-rollback monotone via TPM NV (équivalent S9 v1 du module natif). Un cert révoqué ne peut être rejoué même avec accès flash. → Intégration S77
Rotation ROTPK Protocole multi-pass de transition d’une ROTPK ancienne vers une nouvelle : (1) inclusion nouvelle dans cert chain signé par ancienne, (2) validation par BL1 en boot suivant, (3) verrouillage ancienne via NV TPM. Documenté roadmap. → Roadmap S78
AUJOURD’HUI · QEMU

ROTPK compilée en dur

Sur la plateforme de validation QEMU virt + Cortex-A57, la ROTPK Ed25519 est embarquée directement dans le binaire BL1 au format ASM via cortexnk_rotpk.S. La ROTPK ML-DSA-87 est fournie par nk_key_provider dans BL2. Modèle de menace correspondant : attaquant logiciel uniquement (pas d’accès physique au binaire signé).

État S73c-f juin 2026

DEMAIN · HARDWARE

TPM 2.0 + secure element

Sur board hardware physique (S77), la ROTPK sera ancrée dans le TPM 2.0 EAL4+ ou un secure element type Optiga / NXP A71CH. Mesure boot par extension PCR. Attestation distante via TPM Quote signé. Scellement clés critiques via TPM Seal sur état PCR. Modèle de menace : attaquant physique local, accès flash possible, mais pas accès au TPM tamper-resistant.

Cible S77 · Q2 2027

À TERME · EAL6+

PUF + attestation distante

Pour EAL6+ (horizon 2029-2030), évaluation de l’ancrage ROTPK dans une PUF (Physically Unclonable Function) silicium directement intégrée au SoC. Pas de clé stockée — clé reconstruite à chaque boot depuis les micro-variations physiques du die. Anti-clonage absolu, pas de surface d’attaque flash. Standard montant SAFEcrypto, GMV-SGI, Intrinsic-ID.

Roadmap EAL6/7

Position honnête sur l’état actuel. Sur QEMU, la ROTPK est compilée en dur — c’est le standard TBBR upstream, suffisant pour validation fonctionnelle, insuffisant pour un déploiement opérationnel. Le passage à un ancrage matériel TPM 2.0 ou secure element est obligatoire pour CSPN ANSSI (palier visé Q3 2027) et fait l’objet du sprint dédié S77. La trajectoire complète Root of Trust est documentée dans le rapport CFVL-ROT-001 disponible sous NDA pour évaluateurs DGA / CESTI / Common Criteria.
09
Root of Trust Management · QEMU → Hardware → PUF
Trajectoire S77/S78
Modèle de menace — Précision audit-grade

L’hybridité tient au niveau de la chaîne, pas du cert isolé

Cette section documente explicitement et honnêtement la propriété de résistance post-quantique de la chaîne S73c-f. La distinction entre « hybride par chaîne » et « hybride par cert » est subtile mais essentielle pour toute communication audit-grade. Un évaluateur CESTI rigoureux pointera cette nuance — autant qu’elle soit documentée formellement par nos soins.

Propriété formelle garantie

Un adversaire disposant d’un ordinateur quantique cryptographiquement pertinent (CRQC) capable de casser Ed25519 via l’algorithme de Shor ne peut pas produire un firmware accepté par la chaîne complète BL1 → BL33. Cette propriété repose sur l’exigence cumulative de deux signatures séparées :

  • Ed25519 (signature classique, héritée TBBR upstream) — vérifiée par BL1 sur le cert de BL2, puis par BL2 sur tous les certs des images chargées.
  • ML-DSA-87 (signature post-quantique, ajoutée par CORTEX NK) — vérifiée par BL2 en batch sur les 6 certs TBBR après chargement complet, avant tout transfert à BL31.

Précision auditable honnête

L’hybridité tient au niveau de la chaîne complète, pas au niveau d’un certificat isolé. Les certificats X.509 du TBBR portent une signature Ed25519 unique au format upstream standard. La signature ML-DSA-87 est attachée séparément par sidecar FIP et vérifiée en batch par nk_mldsa87_verify_all_certs() en fin de chaîne BL2. La propriété PQ-résistante est donc garantie post-vérification BL2 complète, pas dès le premier byte vérifié en BL1.

Un adversaire CRQC capable de falsifier un cert Ed25519 isolé peut donc en théorie faire passer un cert modifié à BL1 (qui le vérifiera Ed25519-OK), mais BL2 détectera l’incohérence en fin de chaîne via la vérification ML-DSA-87 compagne. Le boot s’arrête par panic() avant tout saut BL31.

Caveat de portée documenté

Pendant la fenêtre intra-BL2 entre le chargement d’une image et sa vérification ML-DSA, un adversaire CRQC ayant compromis Ed25519 pourrait théoriquement faire accepter une image falsifiée par BL1. En pratique cette fenêtre n’est pas exploitable :

  • BL2 s’exécute en S-EL1 single-thread, single-core boot
  • IRQs masquées (DAIF.I = 1) jusqu’à l’exit de bl2_main
  • Aucun canal d’entrée externe (pas de réseau, pas d’USB, pas d’I/O console)
  • Aucun secret cryptographique manipulé pendant cette fenêtre — rien à exfiltrer
  • Aucune exécution d’image utilisateur (BL33 pas encore atteint)

La vulnérabilité formelle existe (différence avec un schéma dual-sig par cert). La vulnérabilité exploitable n’existe pas dans le modèle de menace réel. Cette distinction est exactement ce que le vocabulaire audit-grade sert à exprimer.

Roadmap d’évolution — en cours d’intégration. Le passage à un schéma dual-sig par certificat (chaque X.509 portant deux signatures Ed25519 + ML-DSA-87 côte à côte au format ASN.1 hybride) est en cours d’intégration (sprints S75/S76 actifs). Ce passage comprend : extension de cert_create upstream, adaptation de auth_mod.c upstream, alignement sur le draft IETF lamps-pq-composite-sigs, retrait des sidecars. Bénéfice attendu : propriété formelle PQ stricte dès BL1, alignement EAL6+ formel. À la date de publication S73c-f, la propriété hybride par chaîne est jugée suffisante pour le palier CSPN ANSSI visé Q3 2027 et la trajectoire EAL4+/5.
10
Modèle de menace · Hybride par chaîne
Caveat documenté
Reproductibilité — Toolchain et commandes

Rebuild complet par un tiers

L’ensemble du sprint S73c-f est conçu pour être rejoué par un tiers à partir des sources publiques upstream TF-A + des 15 patches livrés. Aucune dépendance privée, aucun composant propriétaire, aucun secret intégré (les clés de développement embarquées dans dev_keys_embedded.h sont marquées dev only · DO NOT USE IN PRODUCTION).

─── Procédure de reproduction ───
# 1. Clone et préparation TF-A $ git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git $ cd trusted-firmware-a $ git checkout lts-v2.10.9 $ git checkout -b cortexnk-s73c-f # 2. Application des 15 patches dans l’ordre $ for p in /chemin/patches/cortexnk_tfa_s73c-f/*.patch ; do git am < « $p » done # Sortie attendue : 15× « Applying: … » sans aucun conflit # 3. Build complet via Docker $ docker run –rm \ -v $PWD:/work/tfa \ -v /chemin/mbedtls-3.6.4:/mbedtls \ -w /work/tfa \ cortex-nk-tfa-tools:debian-bookworm \ bash -c «  make PLAT=cortexnk CROSS_COMPILE=aarch64-linux-gnu- \ DEBUG=1 V=1 TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 \ MBEDTLS_DIR=/mbedtls AUTH_BACKEND=hacl \ KEY_ALG=ed25519 HASH_ALG=sha256 \ all fip » # 4. Lancement boot QEMU $ qemu-system-aarch64 -machine virt,secure=on -cpu cortex-a57 -m 1G \ -nographic -bios build/cortexnk/debug/cortexnk_fw.bios # Résultat attendu : 12 vérifs crypto OK + BL33 atteint + 0 erreur

Hashes de référence (NDA · DGA / CESTI)

Les hashes SHA-256 des artefacts du build de référence ne sont pas publiés en clair sur cette page (sécurité opérationnelle). Ils sont disponibles sous NDA pour les évaluateurs DGA/ANSSI, les CESTI agréés, et les partenaires institutionnels du programme Cortex Origin. La structure de référence est donnée à titre indicatif :

Artefact Taille (octets) SHA-256 (sous NDA)
bl1.bin 128 681 270c6c1548b950bb49fd2972815eb8f363717490ab7790029877e47a38452b23
bl2.bin 172 969 ac638a51ef0904da5777a022ef0f54f81cc5abf90a04263f1897abccf53c4466
cortexnk_fw.bios 528 305 fa8460854b2489d97d8d1c95ccb3b0bc80cf466aada86cc5484a4a46ca2d1833
fip.bin ~260 000 5b8301c23fb1d97ddf56594b670eff40fb1eb5aa854d40b89ee6c94c04d9a9ff
Reproductibilité fonctionnelle vs reproductibilité stricte. Les binaires ne sont pas bit-à-bit reproductibles entre deux builds successifs : ils embarquent une chaîne Built : HH:MM:SS, MMM D YYYY issue des macros standard TF-A __DATE__ / __TIME__, modifiée à chaque compilation. La reproductibilité fonctionnelle est en revanche assurée : code exécutable et certificats embarqués sont identiques aux décalages correspondants. Pour passer en reproductibilité stricte bit-à-bit, neutraliser ces macros via un patch upstream complémentaire (roadmap S74 indépendante).

Supply-chain security SBOM · SLSA · provenance

Au-delà de la reproductibilité du build, la chaîne S73c-f s’inscrit dans la discipline supply-chain security devenue standard (US Executive Order 14028, EU Cyber Resilience Act, NIST SSDF). Trois mécanismes complémentaires sont mis en œuvre pour rendre auditable l’intégralité de la chaîne de dépendances.

Mécanisme Description · périmètre S73c-f Statut
SBOM SPDX 2.3 Software Bill of Materials au format SPDX 2.3 généré automatiquement à chaque build via Syft. Couvre TF-A LTS v2.10.9 (base upstream), HACL* freestanding, liboqs ML-DSA-87, mbedTLS 3.6.4, OpenSSL 3.0.20, toolchain aarch64-linux-gnu-gcc 12.2.0. Hashes SHA-256 des dépendances inclus. ✓ Généré build
Attestation SLSA L2 Provenance signée niveau SLSA 2 (Supply-chain Levels for Software Artifacts). Build attesté reproducible via image Docker scellée (cortex-nk-tfa-tools:debian-bookworm, id d99054aaecb1). Attestation signée via Cosign + sigstore en sortie de build. ~ En cours
Provenance Git signée Tous les commits des 15 patches signés GPG par David Salomon (davidsalomon@cortexorigin.com). Author = committer aligné via filter-branch. Signed-off-by conforme DCO. Aucun trailer parasite. Replay vanilla LTS v2.10.9 produit tree-hash identique. ✓ Validé
Hash chain dépendances HACL* freestanding compilée avec hash de référence vérifié (build INRIA reproductible). liboqs ML-DSA-87 buildée depuis tag git signé OQS-Project. MbedTLS 3.6.4 stable tag upstream. Tous les hashes SHA-256 ancrés dans le SBOM SPDX. ✓ Validé
Vulnerability scanning Scan CVE des dépendances via Grype + OSV-Scanner sur le SBOM SPDX généré. Aucune CVE critique non patchée à la date de publication (juin 2026). Rapport disponible sous NDA. ✓ 0 CVE critique
Pourquoi c’est important pour défense / souveraineté. La compromission supply-chain est devenue le vecteur d’attaque dominant pour les cibles institutionnelles (SolarWinds 2020, XZ Utils 2024, npm tea poisoning). Un dossier de Secure Boot, aussi vérifié soit-il, doit tracer chaque dépendance. SBOM SPDX + SLSA + provenance signée constituent le minimum réglementaire pour les marchés publics européens à partir de 2027 (CRA · NIS2 · Directive REC). Tous les rapports SBOM, attestations SLSA et scans CVE sont disponibles sous NDA pour évaluateurs DGA / CESTI / Common Criteria.
11
Reproductibilité · Docker · SBOM SPDX · SLSA
Hashes + SBOM sous NDA
Empreinte mémoire — Coût d’intégration ML-DSA-87

12,5 KB ML-DSA-87 · marge BL2 ~57 %

L’ajout de la couche post-quantique ML-DSA-87 dans BL2 a un coût mémoire mesuré. La librairie liboqs en mode freestanding aarch64 occupe 12 536 octets de code (text), sans data ni bss. BL2 dans son ensemble pèse 172 969 octets, dans une allocation de 393 216 octets — soit une marge libre de ~57 % pour des extensions futures (sidecars additionnels, autres primitives PQC, télémétrie boot).

Composant .text .rodata .data + .bss Total
libmldsa87_aarch64.a · 10 objets11 5121 024012 536
libhacl_aarch64.a · sous-ensemble TBBR53 36015 56811~68 939
bl2.bin actuel · TBBR PQ end-to-end172 032—~189 K bss172 969
BL2 allocation · platform_def.h———393 216
Marge libre BL2 — — — ~220 247 (~57 %)
Comparaison hors-CORTEX NK. À titre indicatif, un BL2 vanilla TF-A LTS v2.10.9 avec TBBR mbedTLS classique pèse typiquement ~140-160 KB selon plateforme. L’ajout du backend HACL* (Ed25519 + SHA-256) + de la couche ML-DSA-87 ajoute environ ~80 KB, soit ~50 % d’overhead sur le BL2. Cette empreinte tient confortablement dans l’allocation cortexnk de 384 KB et serait également compatible avec la plupart des plateformes ARM Cortex-A commerciales (allocations typiques 256-512 KB pour BL2).
12
Empreinte mémoire · ~57 % marge BL2
12,5 KB ML-DSA-87
Benchmark concurrentiel — Positionnement état de l’art

Aucune implémentation publique équivalente connue à ce jour

L’état de l’art a été investigué activement via recherches web ciblées au moment de la publication (juin 2026), sur les acteurs susceptibles d’avoir produit un travail comparable : Google AVB (Android), TianoCore EDK II (UEFI), PQShield (commercial), MbedTLS upstream, Trusted Firmware-A upstream, Linux kernel, travaux académiques arXiv/eprint. Aucun ne couvre exactement le périmètre de S73c-f.

Acteur / projet Cible PQ end-to-end TBBR / TF-A Open source Statut
CORTEX NK S73c-f 🇫🇷 TBBR ARM TF-A ✓ Hybride par chaîne ✓ LTS v2.10.9 ✓ Patches publiés Juin 2026
Google AVB · Android 🇺🇸 Post-bootloader ~ ML-DSA tests beta ✗ Android only ~ AOSP Mars 2026
TianoCore EDK II · UEFI UEFI ✗ Issue ouverte ✗ Non TBBR ✓ Open Pas implémenté
PQShield 🇬🇧 Commercial ~ Building blocks ✗ Non TF-A ✗ Propriétaire Conceptuel
MbedTLS upstream TLS / X.509 ✗ Pas ML-DSA ~ Utilisé par TF-A ✓ Open Roadmap discutée
TF-A upstream 🇬🇧 ARM firmware ✗ Aucun patch ✓ Référence ✓ Open Pas de PQ
Linux kernel module signing Post-OS ✓ ML-DSA 6.19 ✗ Orthogonal ✓ GPL Hors scope boot
Lecture du tableau. Google AVB est le concurrent direct le plus visible (annonce mars 2026), mais son périmètre est post-bootloader (chaîne Android vbmeta / boot.img / system.img), pas la chaîne TBBR firmware BL1→BL33. Les deux approches sont complémentaires : AVB ne protège pas contre un BL2 / BL31 compromis ; CORTEX NK S73c-f ne protège pas contre une image Android compromise. Le périmètre exact de S73c-f — TBBR ARM TF-A end-to-end BL1→BL33 hybride Ed25519 + ML-DSA-87 publié sous patches reproductibles upstream — est à notre connaissance unique au moment de la publication.
13
Benchmark concurrentiel · État de l’art
Périmètre unique
Discipline audit-grade — Frontières documentées

Ce que nous ne prétendons pas

La transparence sur les limites est ce qui distingue un dossier audit-grade d’un slide marketing. CORTEX NK documente explicitement quatre frontières du sprint S73c-f, vérifiables dans le code et dans le rapport de validation. C’est cette honnêteté qui fait la crédibilité devant ANSSI / CESTI / DGA.

FRONTIÈRE 1

QEMU · pas hardware physique

La validation end-to-end a été effectuée sur QEMU qemu-system-aarch64 virt + cortex-a57. Le portage sur un board ARM Cortex-A physique (Raspberry Pi 5, RK3588, NXP i.MX9, ou cibles défense type Cortex-A76 industriel) n’est pas encore fait. Étape obligatoire pour CSPN ANSSI / EAL.

Roadmap S77 · hardware

FRONTIÈRE 2 · EN RÉSOLUTION

Hybride par chaîne · dual-sig par cert en cours

La résistance PQ tient au niveau de la chaîne complète (vérif ML-DSA-87 batch en BL2 post-load), pas au niveau d’un certificat isolé. Caveat de fenêtre intra-BL2 documenté et démontré non-exploitable. Le passage à un schéma dual-sig par cert (propriété PQ stricte dès BL1) est en cours d’intégration via les sprints S75/S76 actifs.

S75/S76 · dual-sig en cours

FRONTIÈRE 3

Reproductibilité fonctionnelle, pas stricte

Les binaires diffèrent entre deux builds successifs sur quelques octets (timestamps __DATE__ / __TIME__ embarqués). Le code exécutable et les certificats sont identiques. Passer en reproductibilité stricte bit-à-bit demande un patch upstream complémentaire (neutraliser ces macros TF-A).

Roadmap S74 · bit-à-bit

FRONTIÈRE 4

Symétrie F-6.H différenciée EL3 vs S-EL1

En BL1 (EL3), le wrap per-call strict est appliqué. En BL2 (S-EL1), une fenêtre module-level est ouverte à l’init du backend et fermée implicitement par la réinit BL31. Compromis documenté formellement, justifié par la quantité de code C inter-call de GCC qui émet des stockages SIMD non alignés.

F-6.H AUDIT-NOTE · documenté

Pourquoi ces frontières sont des arguments forts. Un évaluateur ANSSI / CESTI sait que 100 % n’existe pas. Un dossier qui prétend tout résoudre est suspect. CORTEX NK documente formellement ses frontières comme état de l’art au moment de la publication — exactement ce que la discipline audit-grade exige. Notre trajectoire actuelle (S74 reproductibilité stricte · S75/S76 dual-sig par cert en cours d’intégration · S77 hardware physique · pré-audit CESTI démarré) résout ces frontières une par une, en parallèle de la consolidation produit, sur un calendrier aligné sur le palier CSPN visé Q3 2027.

Menaces explicitement hors périmètre S73c-f

Le sprint S73c-f couvre la chaîne logicielle de vérification cryptographique BL1 → BL33. Les classes d’attaques suivantes sont explicitement hors périmètre du logiciel CORTEX NK et nécessitent des contre-mesures matérielles ou architecturales distinctes (TPM 2.0, secure element, mesures physiques de protection, mécanismes anti-glitch silicium). Elles sont mentionnées ici pour transparence audit.

Classe d’attaque Description Contre-mesure attendue
Fault injection Injection de faute (clock glitching, voltage glitching) pour court-circuiter un branchement conditionnel de vérification cryptographique. Silicium anti-glitch · double vérif
Voltage glitching Variation brutale de l’alimentation CPU pour provoquer une instruction défaillante au moment exact du compare/branch d’une vérif crypto. Detector hardware · regulator stable
EMFI Electromagnetic Fault Injection — impulsion EM ciblée pour induire un bit-flip en RAM ou cache pendant une opération crypto sensible. Shielding · capteurs EM intégrés
Laser fault attack Laser focalisé sur le die du SoC pour modifier un transistor pendant un calcul cryptographique. Attaque haut de gamme labo physique. Package opaque · mesh anti-tamper
Rowhammer Accès répété à des lignes mémoire DRAM voisines pour induire des bit-flips dans des lignes adjacentes contenant des clés ou des résultats de vérif. DRAM ECC · refresh agressif
DMA attacks Périphérique malveillant (Thunderbolt, PCIe) accédant directement à la mémoire via DMA pour modifier l’image en cours de vérification. IOMMU · SMMU configuré · TrustZone
Side-channel timing Mesure des temps d’exécution pour extraire des informations sur clés ou données traitées. HACL* est prouvé Constant-Time en partie binaire. Constant-time · HACL* Binsec/Rel
Importance de cette transparence. Un Secure Boot logiciel, aussi bien vérifié soit-il formellement, ne peut pas seul résister à un attaquant disposant d’accès physique au matériel et d’équipements d’attaque par canaux auxiliaires. La défense contre ces classes d’attaques repose sur le silicium (anti-tamper, anti-glitch, detectors), le secure element (TPM, SE PUF), et les mesures architecturales (IOMMU, TrustZone). CORTEX NK s’appuie sur ces mécanismes externes et n’en revendique pas la paternité. La complémentarité matériel + logiciel est la position de défense complète.
14
Frontières documentées · 4 caveats audit-grade
Roadmap S74-S77
Trajectoire — Évolutions S74 à S77

Du sprint S73c-f au dossier CSPN 2027

Le sprint S73c-f est un livrable autonome cohérent à juin 2026. Pour atteindre la trajectoire institutionnelle complète (CSPN ANSSI 2027 → EAL4+ 2028 → EAL5/6 2029 → EAL7 cible 2030), quatre sprints additionnels sont identifiés. Chacun est atomique, indépendamment livrable, et résout une frontière documentée.

S73c-f
JUIN 2026Livré · 15 patches
Chaîne TBBR PQ hybride Ed25519 + ML-DSA-87 end-to-end BL1 → BL33 sur fork TF-A LTS v2.10.9, boot QEMU validé, replay vanilla sans conflit, F-6.H symétrie SCTLR/CPTR audit-grade.
S74
Q3 2026Reproductibilité stricte bit-à-bit
Neutralisation des macros __DATE__ / __TIME__ dans TF-A pour atteindre une reproductibilité stricte bit-à-bit (sha256sum strictement identique entre builds successifs). Effort : ~1 semaine. Compatible SOURCE_DATE_EPOCH si finalement adopté upstream.
S75-S76
EN COURSDual-sig par certificat · intégration active
En cours d’intégration. Refonte de cert_create et auth_mod.c upstream pour porter deux signatures cohabitantes (Ed25519 + ML-DSA-87) dans chaque X.509 hybride conforme au draft IETF lamps-pq-composite-sigs. Retrait des sidecars. Bénéfice : propriété PQ stricte dès BL1, alignement EAL6+ formel.
CESTI
DÉMARCHE DÉMARRÉEPré-audit indépendant externe
Démarche démarrée. Pré-audit indépendant initié auprès d’un centre d’évaluation agréé ANSSI (CESTI). L’objectif est une revue méthodologique externe couvrant l’architecture cryptographique, la chaîne TBBR PQ, les contrats ACSL Frama-C/WP et les preuves Isabelle/HOL. Calendrier prévisionnel : itération en cours, retour d’audit attendu en parallèle de la consolidation S77 hardware.
S77
Q2 2027Hardware physique · CSPN visé
Portage et validation sur board ARM Cortex-A physique (cible CSPN). Acquisition board, intégration boot ROM réel (vs QEMU), validation TPM 2.0 hardware, benchmark perf comparé QEMU vs hardware (ML-DSA-87 verify attendu ~500 µs en hardware vs ~100 ms QEMU). Démonstrateur DGA en parallèle.
EAL
2027 — 2030Trajectoire certifiable institutionnelle
CSPN ANSSI Q3 2027 visé (premier palier de certification). EAL4+ 2028 envisagé (Common Criteria, méthodiquement conçu et testé). EAL5/6 2029 (semi-formel puis formel). L’architecture est conçue pour permettre une trajectoire vers EAL7 (preuves formelles jusqu’à l’implémentation), horizon 2030. Chaque palier valide les frontières documentées du sprint précédent.
15
Trajectoire S74 → S77 → trajectoire EAL7
CSPN visé 2027
Vérification multi-outils — Discipline méthodologique

Trois preuves indépendantes

Le sprint S73c-f s’inscrit dans la discipline méthodologique CORTEX NK : chaque livrable est vérifié par trois outils complémentaires qui se contrôlent mutuellement. La page dédiée Secure Boot natif (S1-S10) détaille ces résultats pour le module propriétaire ; cette page-ci en restitue l’application à la chaîne TF-A intégrée.

DÉDUCTIF

🔒 Frama-C / WP

Vérification déductive des contrats ACSL des fonctions critiques de la chaîne (parseurs DER, helpers HACL*, batch ML-DSA). Solveurs SMT Alt-Ergo 2.6 et Z3 4.13. Couverture WP cumulative sur TCB strict CORTEX NK ≥ 96 % (audit S82 parallèle).

CEA · Alt-Ergo · Z3

FORMEL

📐 Isabelle / HOL

Preuves mathématiques formelles des invariants de Secure Boot. 10 théorèmes attestation + 0 sorry sur le module quote. Standard académique mondial, utilisé pour seL4, Genode, CompCert. La logique d’attestation hybride est formellement prouvée.

Cambridge · TU Munich

EXHAUSTIF

🔬 CBMC

Model checking borné du code C. 533 propriétés vérifiées sur le module quote (overflow, underflow, accès mémoire invalide, division par zéro, dépassements de tableaux). 0 failure détectée. Outil officiel Université d’Oxford, utilisé chez Amazon (S3) et Diffblue.

Oxford · Amazon · Diffblue

✦ Validation externe — démarche démarrée

Pré-audit indépendant CESTI agréé ANSSI

Au-delà des trois outils de vérification interne, une démarche de pré-audit indépendant a été démarrée auprès d’un centre d’évaluation agréé ANSSI (CESTI). L’objectif est une revue méthodologique externe couvrant l’architecture cryptographique S73c-f, la chaîne TBBR PQ end-to-end, les contrats ACSL Frama-C/WP et les preuves Isabelle/HOL. Ce type de revue indépendante est la dernière étape avant le dépôt formel de dossier CSPN visé Q3 2027.

Trois outils internes. Une revue externe en cours. Zéro angle mort.

16
Multi-outils + revue externe CESTI en cours
Démarche démarrée
CORTEX ORIGIN™ · Programme de défense

Parlons souveraineté.

Rapports complets disponibles sur demande : CFVL-SECBOOT-TFA-001 v1.2, validation factuelle S73f, dossier reproductibilité, priorart, mémo datation publique. Pré-audit CESTI en cours · dual-sig par cert en intégration. Démonstrations sur scénarios CNES / DGA / OIV disponibles sur board ARM physique après portage S77.

Confidentiel · CORTEX AI™ SAS · SIREN 991 880 428 · 58 rue de Monceau, 75008 Paris

17
FIN — Secure Boot TF-A · Post-Quantique v1.2
Juin 2026