R08 — Vecteurs TOTP/HOTP et atomicité du compteur¶
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¶
R05/R07 réussis ; secrets exclusivement RFC de test, appareil isolé des services réels, script générant les PNG des URI de test.
Étapes¶
- Exécuter
uv run pytest -q tests/host/otp/test_hotp_totp.pyet relever tous les vecteurs de référence/paramètres. Importer par QR le secret ASCII RFC422612345678901234567890, HOTP SHA1/6 chiffres/counter0. - Générer dix fois, confirmer chaque génération et comparer les codes à la table RFC4226 : 755224,287082,359152,969429,338314,254676,287922,162583,399871,520489. Refuser une génération intermédiaire et vérifier qu’aucun code n’est délivré.
- Pour TOTP SHA1/SHA256/SHA512, utiliser les secrets et résultats de
tests/host/otp/test_hotp_totp.py, avec dates compatibles avec la plage CDC2024–2100. Mesurer le temps écoulé entre TIME et affichage et calculer le vecteur pour la période réellement observée ; la valeur RFC ancienne59s n’est pas un epoch accepté par le protocole de production. - Couper avant/après la génération HOTP, relancer et confirmer que le code déjà affiché n’est pas réémis. Répéter avec restauration d’une ancienne sauvegarde du même secret.
- Vérifier rafraîchissement TOTP à la frontière de période et refus après perte d’heure.
Résultat attendu¶
Codes exacts pour algorithme/chiffres/période, compteur persistant et monotone, aucun code TOTP sans heure, restauration du même secret ne faisant pas reculer HOTP.
Preuves à conserver¶
URI/images de test, table comparée code par code, epoch effectif et frontière de période, traces de coupures/restore et compteurs publics de campagne.