R04 — Capacité partagée, mémoire et endurance aux coupures¶
Statut : NON EXÉCUTÉ sur matériel — T2B1 et T3B1.
Appliquer le registre commun et conserver une ligne par modèle/OS requis. Les sorties des tests hôte/émulateur restent des preuves séparées.
Préconditions¶
Appareil vierge dédié, R01–R03 réussis ; alim USB commutable coupant réellement VBUS ; UART/SWO uniquement sur un binaire debug séparé si nécessaire pour mesurer, puis revalidation fonctionnelle du binaire sans debug.
Étapes¶
- Lancer les tests préparatoires
uv run pytest -q tests/host/fido2/test_capacity_budget.py tests/host/core/test_storage_budget.pyetmake test-upypour chaque modèle d’émulateur. Conserver résultats séparés du matériel. - Sur le vrai HID, utiliser le client Ctap2 de R03 pour créer 100 identifiants découvrables distincts, avec RP de 128 octets, user.id de 64 octets, nom et displayName de 64 octets, credProtect=3, hmac-secret et largeBlobKey. Renouveler le token MAKE_CREDENTIAL avant chaque création et confirmer physiquement. Le scénario et les tailles exactes sont dans
tests/host/fido2/test_capacity_budget.py; remplacer la connexion simulée par le HID réel, sans accès interne à la mémoire du firmware. - Importer via le vrai volume 32 HOTP distincts, secrets de 64 octets, issuer 32 octets, account 64 octets, SHA512/8 chiffres ; générer chacun au moins une fois. Construire les images avec segno/Pillow et les champs du scénario cité, puis suivre R05 pour chaque ajout.
- Avec LargeBlobs sur le HID, écrire/lire trois tableaux de 4096 octets sérialisés, dont les deux copies A/B deviennent actives au fil des écritures (
[{1: b"x" * 4074}], puis y et z). Remplacer une passkey existante par une nouvelle inscription du même couple RP/user.id, puis restaurer un OTP existant depuis son export chiffré avec confirmation spécifique d’écrasement, pour éprouver la copie avant suppression. - Faire au moins 100 cycles de mise à jour/suppression/réajout et provoquer la compaction ; compter les entrées et vérifier une assertion/code après chaque redémarrage. Essayer une 101e passkey, un 33e OTP et 4097 octets de largeBlob ; contrôler le refus sans mutation des données existantes.
- Pendant 30 écritures à des instants répartis avant/pendant/après la mutation et la compaction, couper réellement VBUS, rebrancher et contrôler que chaque identité est ancienne ou nouvelle, jamais partielle. Conserver la liste des instants/résultats, augmenter la campagne si un défaut apparaît.
- Mesurer le pic RAM/heap/stack physique pendant fonctionnement normal, import image, RSA, PBKDF2 et export/restore au remplissage maximal. Enregistrer la méthode et les marges ; la heap20M de l’émulateur ne constitue pas cette mesure.
Résultat attendu¶
100 passkeys + 32 OTP + 4096 octets largeBlobs coexistent et restent utilisables ; refus d’excès sans corruption ; mises à jour/compaction récupérables et aucun MemoryError/panic. Un simple total théorique de flash ou une réussite émulateur ne suffit pas.
Preuves à conserver¶
Inventaire avant/après, paramètres et scripts hôte exacts de campagne, compteurs/empreintes publics, erreurs de dépassement, traces d’alimentation/compaction, rapports mémoire par modèle et hash du firmware.