OpenSSH: autoryzacja oparta na kluczu, maksymalna długość klucza

9

Używam Putty w systemie Windows z uwierzytelnianiem opartym na kluczach, aby uzyskać dostęp do niektórych serwerów kopalni.

Działa całkowicie dobrze z kluczem ~ 3700 bitów, ale z kluczem ~ 17000 bitów myśli po około 20 sekundach po stronie klienta, a następnie po prostu mówi „Odmowa dostępu” i pyta o hasło.

Czy w OpenSSH istnieje limit długości lub limit czasu uwierzytelniania opartego na kluczach?

Rozumiem, że używanie tak dużych kluczy nie ma praktycznego znaczenia, zwłaszcza gdy patrzę na te 20 sekund obliczeń, próbując rozwiązać problemy, z którymi się spotykam: -) ...

BarsMonster
źródło
Widziałem podobne problemy w niektórych wersjach OpenSSH, nad którymi pracowałem, używając długości klucza, która była potęgą dwóch.
kasperd

Odpowiedzi:

9

W pewnym momencie przyjrzałem się źródłu OpenSSL dla kluczy Diffie-Hellmana i stwierdziłem, że istnieje „arbitralny” limit 10K wielkości kluczy DH. Zmieniłem źródło testu i stwierdziłem, że zadziałało. Napisałem błąd do autorów, którzy odpowiedzieli, że zamierzeniem projektu było zapobieganie DoS przy użyciu ogromnych kluczy.

Nie zdziwiłbym mnie, gdy zobaczyłem coś podobnego w OpenSSH.

Paul Holder
źródło
5

W protokole nie ma zdefiniowanego maksymalnego rozmiaru klucza ani limitu czasu (lub przynajmniej takiego, w który chcesz uderzyć), ale implementacja może nie obsługiwać tak długich kluczy. 20-sekundowy czas przetwarzania z kluczem prywatnym nie wydaje się wysoki dla 17-bitowego klucza RSA. Wówczas serwer może nie chcieć wydawać zbyt dużej mocy obliczeniowej nieuwierzytelnionemu użytkownikowi: odmowa bardzo dużych kluczy stanowi ochronę przed atakami DoS.

Obecnie 2048 bitów jest uważane za rozsądne dla klucza RSA; 4096 bitów jest wyższe niż to konieczne, ale zwykle obsługiwane; poza tym nie powinieneś być zaskoczony, jeśli niektóre programy odrzucają klucz.

Gilles „SO- przestań być zły”
źródło
Ta ochrona wygląda na rozsądną. Czy jest dostrajany czy zakodowany w kodzie źródłowym?
BarsMonster,
W instrukcji nie ma takiej opcji, więc wszelkie ograniczenia muszą znajdować się w kodzie źródłowym. To powiedziawszy, nie wiem, czy rzeczywiście istnieje ochrona, miałem na myśli, że posiadanie takiej ochrony byłoby rozsądne. Podejrzewam, że odpowiedź AndreasM jest bliżej znaku.
Gilles „SO- przestań być zły”
4

Czy udało Ci się wygenerować ten rozmiar klucza w docelowym systemie docelowym? Być może wystąpił limit obsługiwanego. Raczej obecny mój system Centos obsługuje maksymalnie 16k, co wydaje się wystarczające dla masywnych kluczy. Powinieneś zobaczyć maksimum, jeśli spróbujesz przekroczyć go za pomocą ssh-keygen, jak pokazano poniżej.

[nathan@omni ~]# ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384
zaznet
źródło
To samo dotyczy Debiana 8.2. Mój netbook może spędzić sporo czasu generując ten 16384-bitowy klucz ... rzeczy, które robię dla śmiechu.
underscore_d
To samo dotyczy „Git Bash” dla systemu Windows 7, który jest oparty na MinGW.
user1364368,
To samo dotyczy OpenSuse Leap 42.1.
user1364368,
2

Serwer openssh ma ustawienie LoginGraceTime. Ze strony podręcznika:

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.

Może to być limit, do którego trafiasz, jeśli jest ustawiony na 20 sekund.

Dzikie przypuszczenie: może być również tak, że sam kit ma ten limit, sądząc, że jeśli przetwarzanie uwierzytelnienia klucza publicznego po stronie klienta trwa tak długo, coś jest nie tak.

AndreasM
źródło
Myślałem tak samo i ustawiłem LoginGraceTime 1200 Cóż, komunikat o błędzie jest w konsoli, więc wątpię, że to coś w Putty ...
BarsMonster
1
Sprawdź dzienniki serwera. Przy takim rozmiarze klucza otrzymuję: RSA_public_decrypt nie powiodło się: błąd: 04067069: lib (4): func (103): powód (105). (najwyraźniej z powodu rozmiaru klucza.) Spróbuję klucza 2 ^ n.
AndreasM
1
16384 bitów wydaje się działać. Na wyniki z 32kbits zobaczyć hermann-uwe.de/blog/... :)
AndreasM
1
Masz śmiertelnie rację: Znaleziono thid: sshd [1014]: błąd: RSA_public_decrypt nie powiódł się: błąd: 04067069: lib (4): func (103): powód (105) Więc to musi być błąd w sshd / OpenSSL :-)
BarsMonster