Aller au contenu

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

  1. Exécuter uv run pytest -q tests/host/otp/test_hotp_totp.py et relever tous les vecteurs de référence/paramètres. Importer par QR le secret ASCII RFC4226 12345678901234567890, HOTP SHA1/6 chiffres/counter0.
  2. 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é.
  3. 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.
  4. 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.
  5. 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.