OpenSSH: autorisation basée sur les clés, longueur maximale des clés


9

J'utilise Putty sur Windows avec une authentification par clé pour accéder à certains de mes serveurs.

Cela fonctionne parfaitement avec une clé de ~ 3700 bits, mais avec une clé de ~ 17000 bits, il pense pendant environ 20 secondes côté client, puis dit simplement "Accès refusé" et demande un mot de passe.

Existe-t-il une limite de longueur de clé ou un délai d'expiration dans OpenSSH pour l'authentification par clé?

Je comprends que l'utilisation de touches aussi grandes n'a pas beaucoup de sens pratique, surtout quand on regarde ces 20 secondes de calcul, juste pour essayer de résoudre les problèmes auxquels je suis confronté: -) ...


J'ai vu des problèmes similaires se produire sur certaines versions d'OpenSSH, que j'ai contournées en utilisant une longueur de clé qui était une puissance de deux.
kasperd

Réponses:


9

À un moment donné, j'ai regardé la source d'OpenSSL pour les clés Diffie-Hellman et j'ai découvert qu'il y avait une limite "arbitraire" de 10K sur la taille des clés DH. J'ai changé la source d'un test et j'ai trouvé que cela fonctionnait. J'ai écrit un bogue aux auteurs, et ils ont répondu que c'était une intention de conception d'empêcher le DoS en utilisant des clés massives.

Ne me surprendrait pas de voir quelque chose de similaire dans OpenSSH.


5

Il n'y a pas de taille de clé maximale ou de délai d'expiration défini dans le protocole (ou du moins aucun que vous frapperiez), mais une implémentation peut ne pas prendre en charge de telles clés longues. Un temps de traitement de 20 secondes avec la clé privée ne semble pas élevé pour une clé RSA à 17 kbit. Ensuite, le serveur peut ne pas vouloir dépenser trop de puissance de calcul pour un utilisateur non authentifié: refuser des clés très volumineuses est une protection contre les attaques DoS.

Actuellement, 2048 bits sont considérés comme raisonnables pour une clé RSA; 4096 bits est plus élevé que nécessaire mais généralement pris en charge; au-delà de cela, vous ne devriez pas être surpris si certains programmes rejettent la clé.


Cette protection semble raisonnable. Est-il réglable ou codé en dur dans le code source?
BarsMonster

Il n'y a pas d'option pour cela dans le manuel, donc toute limite doit être dans le code source. Cela dit, je ne sais pas s'il existe réellement une protection, je voulais simplement dire qu'il serait raisonnable d'en avoir une. Je soupçonne que la réponse d'AndreasM est plus proche de la marque.
Gilles 'SO- arrête d'être méchant'

3

Avez-vous pu générer cette taille de clé sur le système cible prévu? Vous pouvez rencontrer une limite à ce qui est pris en charge. Le système Centos plutôt actuel prend en charge un maximum de 16k, ce qui semble suffisant pour des touches massives. Vous devriez voir le maximum si vous essayez de le dépasser avec ssh-keygen comme indiqué ci-dessous.

[nathan@omni ~]# ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384

Idem sur Debian 8.2. Mon netbook peut passer un certain temps à générer cette clé 16384 bits ... ce que je fais pour rire.
underscore_d

Idem sur "Git Bash" pour Windows 7, basé sur MinGW.
user1364368

Même chose sur OpenSuse Leap 42.1.
user1364368

1

Le serveur openssh a un paramètre LoginGraceTime. Depuis la page de manuel:

The server disconnects after this time if the user has not suc-
cessfully logged in.  If the value is 0, there is no time limit.
The default is 120 seconds.

Cela pourrait être une limite que vous atteignez si elle est fixée à 20 secondes.

Devinette: il se pourrait également que le mastic lui-même ait cette limite, pensant que si le traitement côté client de l'authentification par clé publique prend autant de temps, quelque chose ne va pas.


J'ai pensé la même chose et défini LoginGraceTime 1200 Eh bien, le message d'erreur est dans la console, donc je doute que ce soit quelque chose dans Putty ...
BarsMonster

1
Vérifiez les journaux du serveur. Avec une taille de clé comme celle-ci, j'obtiens: RSA_public_decrypt a échoué: erreur: 04067069: lib (4): func (103): reason (105). (à cause de la taille de la clé apparemment.) Je vais essayer une clé 2 ^ n.
AndreasM

1
16384 bits semblent fonctionner. Pour les résultats avec 32Kbits voir hermann-uwe.de/blog/... :)
AndreasM

1
Vous avez raison: Found thid: sshd [1014]: error: RSA_public_decrypt failed: error: 04067069: lib (4): func (103): reason (105) Donc, ce doit être un bogue dans sshd / OpenSSL :-)
BarsMonster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.