RFC 6238 Recommande que le serveur de mettre en œuvre une forme d'algorithme de resynchronisation pour tenir compte de la dérive de temps de l'appareil utilisé pour générer l'OTP. Toutefois, la RFC fournit très peu d'informations sur la manière de mettre en œuvre une telle synchronisation et les conséquences qu'il aurait pu sur la sécurité globale de l'algorithme. Cette dérive de temps est généralement un problème avec des périphériques qui ne peuvent pas synchroniser avec NTP, tels que la plupart des jetons rigides de TOTP programmables. J'aimerais partager notre proposition ici et espérer proposer un algorithme sécurisé, explique de manière adéquate la dérive de temps dans les dévides et nécessite un effort minimal de l'utilisateur final. J'ai également ajouté des problèmes potentiels que je vois avec la proposition.
Nous travaillons avec une fenêtre de 30 secondes, typique du TOTP, mais le principal devrait être identique à d'autres tailles de fenêtre. Dans cette proposition, n est la fenêtre de validation actuelle en tenant compte de la correction de la dérive comme enregistrée pour ce périphérique. n-1 est la fenêtre précédente, n + 1 est la suivante, etc. La fenêtre de retard (le temps entre la génération de l'OTP et sa vérification) est définie à 1 étape, comme recommandé par RFC 6238. Cela représente la différence entre chercher de l'avant et de l'arrière.
La correction de la dérive manuelle est un processus où l'utilisateur est invité à entrer 2 OTPS consécutives. Ces OTPS sont utilisés pour calculer la dérive dans un décalage d'une heure maximale de 1 heure du temps système. Ne pas pouvoir donner 2 OTD consécutifs est considéré comme une tentative de connexion échouée.
Le RFC recommande d'élargir la fenêtre au-delà de deux étapes de deux fois (N et N-1). Cette proposition ajoute 2 étapes de temps supplémentaires (N-2 et N + 1) pour le réglage automatique du décalage. Je ne vois aucun moyen d'effectuer un tel ajustement automatique sans élargir la fenêtre sur au moins 4 étapes. Bien sûr, le réglage automatique pourrait être entièrement laissé de côté, mais la resynchronisation manuelle n'est pas très agréable pour l'utilisateur final. L'élargissement de la fenêtre est-il suffisamment petit pour maintenir un bon équilibre entre sécurité et convivialité?
Un OTP sera vérifié sur un total de 13 fenêtres. Cela pourrait potentiellement conduire à des fuites d'informations sur le secret. À mon avis, ce n'est pas un problème, car la longueur recommandée du secret en association avec le hachage le fera (pratiquement) impossible de deviner le secret, en particulier lorsque les tentatives sont limitées.
Utilise 2 OTDS consécutives suffisamment pour déterminer de manière fiable le décalage dans une fenêtre de 240 étapes temporelles (1 heure de retour et en avant)? Et est une compensation maximale de 1 heure suffisante pour tenir compte de la dérive de temps des appareils utilisés?
RFC 6238 recommande "que le validateur soit défini avec une limite spécifique au nombre d'étapes de temps qu'un prouveur peut être" hors de synchronisation "avant d'être rejeté." Il ne recommande pas d'algorithme de resynchronisation, bien qu'il mentionne que l'on pouvait être appliqué.
En général, la façon dont les gens gèrent généralement cela est d'exiger que le générateur TOTP ait une synchronisation de temps avec une source fiable au lieu d'appliquer un algorithme de resynchronisation. Parce que ces jours-ci, la plupart des clients TOTP sont des téléphones mobiles et des téléphones mobiles sont synchronisés sur les horodatages du réseau téléphonique par défaut, cela suffit généralement avec une compensation de ± 1 standard.
Il existe une grande variété d'autres cas dans lesquels avoir une horloge qui dévie de manière significative de la durée standard est un problème, notamment la rotation des certificats TLS, et les utilisateurs constateront généralement que ne pas avoir son appareil correctement synchronisé (qui, encore une fois, même la plupart des ordinateurs font automatiquement. ces jours-ci) leur causera de graves problèmes au-delà de TOTP. Votre proposition de resynchronisation n'est donc probablement pas nécessaire.