Potrzebuję utworzyć publiczne i prywatne klucze RSA dla aplikacji klient/serwer i używam do tego celu JSch library. Do tej pory generowałem klucze 4096-bitowe, ponieważ chciałbym mieć najlepsze możliwe zabezpieczenia. Zajmuje to od 3 do 5 minut, podczas gdy generowanie klucza 2048-bitowego zabiera coś w tempie 10 sekund. Masz sscce:Generowanie 4096-bitowego klucza RSA jest wolniejsze niż 2048-bitów przy użyciu Jsch
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.KeyPair;
public class KeyGenerator {
public static void main(String[] args) {
JSch jsch = new JSch();
System.out.println("Starting...");
try {
KeyPair keyPair = KeyPair.genKeyPair(jsch, KeyPair.RSA, 4096);
}
catch (JSchException e) {
e.printStackTrace();
}
System.out.println("Done.");
}
}
Czy należałoby oczekiwać tak dużej różnicy w czasie generowania? Nie jestem super jasne, w jaki sposób generowane są klucze RSA (stąd przy użyciu biblioteki), ale przypuszczam, że wymagany czas może być wykładniczy? To po prostu wydaje się ... zbyt wykładnicze.
Oto JSch API (ponieważ sama biblioteka i strona internetowa, z której pochodzi, nie zawierają dokumentacji).
Aktualizacja: Zrobiłem profilowanie. Oto wykres czasów keygen, zaczynając od 512 bitów i idąc do 4096, z 30 próbkami na klucz.
A oto podobny wykres z badań 4096-bitowych wykluczona (samego zestawu danych):
Te wyglądają bardzo podobnie, co oznacza dość gładki wykładniczy wzrost czasu. Chyba jestem po prostu niecierpliwy!
Czy rozważałeś użycie ECC zamiast RSA? Generowanie kluczy jest znacznie szybsze w przypadku równie silnych kluczy. – Hmmmmm