OpenSSH: авторизация на основе ключа, максимальная длина ключа

9

Я использую Putty в Windows с аутентификацией на основе ключей для доступа к некоторым моим серверам.

Он прекрасно работает с ключом ~ 3700 бит, но с ключом ~ 17000 он думает около 20 секунд на стороне клиента, а затем просто говорит "Доступ запрещен" и запрашивает пароль.

Существует ли какое-либо ограничение длины ключа или тайм-аут в OpenSSH для аутентификации на основе ключей?

Я понимаю, что использование таких больших клавиш не имеет большого практического смысла, особенно если посмотреть на эти 20 секунд расчета, просто пытаясь решить любые проблемы, с которыми я сталкиваюсь: -) ...

BarsMonster
источник
Я видел подобные проблемы в некоторых версиях OpenSSH, которые я обошел, используя длину ключа, которая была степенью двойки.
Касперд

Ответы:

9

Однажды я изучил источник OpenSSL для ключей Диффи-Хеллмана и обнаружил, что существует «произвольный» предел в 10 КБ для размера ключей DH. Я изменил источник для теста, и обнаружил, что работает. Я написал ошибку авторам, и они ответили, что целью проекта было предотвратить DoS с помощью массивных ключей.

Не удивило бы меня увидеть нечто подобное в OpenSSH.

Пол Холдер
источник
5

В протоколе не определен максимальный размер ключа или время ожидания (или, по крайней мере, ни один из них), но реализация может не поддерживать такие длинные ключи. 20-секундное время обработки с закрытым ключом не кажется высоким для 17-битного ключа RSA. Тогда сервер может не захотеть тратить слишком много вычислительной мощности на пользователя, не прошедшего проверку подлинности: отказ от очень больших ключей является защитой от DoS-атак.

В настоящее время 2048 бит считается разумным для ключа RSA; 4096 бит выше, чем необходимо, но обычно поддерживается; кроме этого, вы не должны удивляться, если некоторые программы отклонят ключ.

Жиль "ТАК - прекрати быть злым"
источник
Эта защита выглядит разумной. Это настраивается или жестко закодировано в исходном коде?
BarsMonster
В этом руководстве нет опций, поэтому любое ограничение должно быть в исходном коде. Тем не менее, я не знаю, есть ли защита на самом деле, я просто имел в виду, что было бы разумно иметь такую ​​защиту. Я подозреваю, что ответ AndreasM ближе к цели.
Жиль "ТАК - перестань быть злым"
3

Удалось ли вам сгенерировать ключ такого размера в предполагаемой целевой системе? Вы можете столкнуться с ограничением того, что поддерживается. Моя текущая система Centos поддерживает максимум 16 КБ, что кажется достаточным для массивных ключей. Вы должны увидеть максимальное значение, если попытаетесь превысить его с помощью ssh-keygen, как показано ниже.

[nathan@omni ~]# ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384
zaznet
источник
То же самое в Debian 8.2. Мой нетбук может потратить довольно много времени на генерацию этого 16384-битного ключа ... что я делаю для смеха.
underscore_d
То же самое на «Git Bash» для Windows 7, который основан на MinGW.
user1364368
Также как и в OpenSuse Leap 42.1.
user1364368
1

Сервер openssh имеет настройку LoginGraceTime. Со страницы руководства:

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.

Это может быть предел, который вы бьете, если он установлен на 20 секунд.

Неожиданное предположение: возможно, что у самой замазки есть этот предел, думая, что если обработка на стороне клиента аутентификации с открытым ключом занимает столько времени, что-то не так.

AndreasM
источник
Я думал то же самое и установил LoginGraceTime 1200 Ну, сообщение об ошибке находится в консоли, поэтому я сомневаюсь, что это что-то в Putty ...
BarsMonster
1
Проверьте логи сервера. С таким размером ключа я получаю: RSA_public_decrypt fail: error: 04067069: lib (4): func (103): reason (105). (очевидно, из-за размера ключа.) Я попробую 2 ^ n ключ.
AndreasM
1
16384 бит, кажется, работает. Для результатов с 32 кбит см. Hermann-uwe.de/blog/… :)
AndreasM
1
Вы смертельно правы: нашел thid: sshd [1014]: ошибка: ошибка RSA_public_decrypt: ошибка: 04067069: lib (4): func (103): причина (105) Так что это должно быть ошибкой в ​​sshd / OpenSSL :-)
BarsMonster