Existe-t-il un algorithme de génération de mot de passe unique (basé sur un secret prédéfini et une valeur/heure/compteur/etc changeants) qui est suffisamment simple pour qu'il puisse être traité par un humain moyen mais suffisamment sûr pour que le secret ne puisse pas être trouvé avec seulement quelques-uns mots de passe (disons 5-10)?
J'ai vu des questions sur divers schémas de mots de passe spécifiques et sur leur sécurité. Mais j'aimerais savoir plus généralement s'il existe des algorithmes bien connus.
L'intuition me dit que si quelque chose est assez facile à traiter par un humain, alors c'est aussi facile à casser. Mais là encore, j'ai été très surpris qu'un cryptage asymétrique soit possible, ou un échange de clé sécurisé (DH). Alors, surprends-moi!
Edit: Quelques précisions.
La question s'est posée lorsque je réfléchissais à l'authentification à deux facteurs pour une utilisation en extérieur. Une authentification à deux facteurs typique pour les environnements sécurisés (maison, bureau, ...) utilise un mot de passe et un générateur OTP dans un appareil ou sur votre téléphone. Vous perdez l'appareil/le téléphone, il y a toujours le mot de passe. Un enregistreur de frappe vole votre mot de passe, il y a toujours l'appareil/téléphone.
Mais qu'en est-il des situations où les deux pourraient être volées? Par exemple, vous utilisez une application pour récupérer un vélo électrique dans la rue ou pour ouvrir un casier dans une gare. Il se peut que quelqu'un regarde pendant que vous entrez le mot de passe sur votre téléphone, puis vole également le téléphone lui-même.
Le problème pourrait être résolu en utilisant des mots de passe qui deviennent inutiles dans un court laps de temps (par exemple 10 minutes). De plus, le téléphone aurait un secret individuel (par exemple, un certificat client SSL) pour rendre plus difficile les attaques par force brute contre l'authentification par mot de passe.
la suggestion de mr.spuratic autour de l'algorithme HCMU de Blum est assez proche de ce que je cherchais. Il semble toujours un peu trop lourd pour l'homme moyen, mais avec certains pratiquant, ce serait faisable.
Il existe certains schémas commerciaux, par exemple GridGuard de SyferLock qui prétendent le faire, mais je ne les ai jamais utilisés (je n'ai aucune affiliation). Cela repose sur le fait que l'utilisateur choisit correctement parmi plusieurs options lors de l'authentification plutôt que sur une heure typique ou un compteur OTP (ce qui signifie aucune arithmétique mentale).
Solitaire ( Schneier ), est souvent cité pour un cryptosystème humain-calculable, il aurait cependant besoin d'une certaine adaptation à des fins d'authentification. Une authentification défi-réponse avec clé partagée serait pratique, mais ne correspond pas à votre description du protocole OTP.
Ce que devrait fonctionner (avec la mise en garde habituelle ) serait une implémentation de TOTP ( RFC6238 ) ou HOTP ( RFC4226 ), en utilisant une autre HMAC hachage tel que le HCMU de Blum ( Machine calculable humaine incassable , description - ici ) hachage calculable mentalement (voir aussi le plus généralisé OCRA (RFC6287) .
TOTP/HOTP sont essentiellement la sortie (tronquée) d'un HMAC utilisant SHA-1, l'entrée étant un secret partagé et un horodatage ou un compteur. Vous devrez cependant utiliser une représentation strictement alphabétique de l'entrée, car l'algorithme de Blum ne s'applique qu'à l'entrée alphabétique.
Blum a également co-écrit un article Towards Human Computable passwords (on ArXiv) , bien que de grandes parties de celui-ci soient fortement mathématiques. Il ne couvre brièvement OTP dans §7.2.
Voir également:
Vous pouvez avoir une table de recherche utilisée comme un bloc unique.
Chaque page dans le livre de recherche représente une journée d'OTP, et vous recherchez le livre à la date/heure actuelle pour obtenir le bon OTP pour ce moment. Cela simule un TOTP. Vous pouvez choisir entre la sécurité (à quelle fréquence le TOTP change) et l'épaisseur de votre livre de référence.
Steve Gibson a rassemblé quelque chose appelé "Perfect Paper Passwords" comme une sorte de démonstration de la façon dont cela pourrait être fait. https://www.grc.com/ppp a les détails. Le site dispose d'un code téléchargeable qui peut être utilisé pour construire une implémentation plus sophistiquée.
Ce n'est pas basé sur le temps, mais simplement une séquence de mots de passe à usage unique, qui ne peuvent être utilisés que dans l'ordre. Même si le mot de passe actuel est reniflé, il ne fournit aucune information sur le prochain. Le nombre de caractères par mot de passe et "l'alphabet" sont réglables.
Ici, nous voyons que les codes 1A-D ont déjà été utilisés, et le prochain code à utiliser est E1 (Tygq).
Pour être honnête, même l'algorithme TOTP officiel n'est pas massivement compliqué, bien que vous deviez être assez dédié à calculer un HMAC dans votre tête. Cependant, cela suggère que vous pourriez raisonnablement avoir un système de mot de passe basé sur le temps calculé, en utilisant la plupart des mêmes blocs de construction.
Les principaux problèmes seraient que les gens ne sont pas aussi bons que les ordinateurs dans beaucoup de domaines:
Par conséquent, l'adaptation directe de l'algorithme TOTP impliquerait:
Cela sera moins sécurisé que celui basé sur ordinateur, car un attaquant serait capable de calculer rapidement un grand nombre de valeurs potentielles, vous devriez donc également limiter le nombre de tentatives autorisées dans un intervalle donné.
Et non, je ne sais pas ce que serait un remplacement HMAC approprié ...