Я попытался следующие методы для создания частного (и общественности) ключ DSA с длиной ключа 2048-битном:Как сгенерировать 2048-битную пару ключей DSA для Java?
Via Keytool
keytool -genkeypair -alias MyKeyPair -keyalg DSA -keysize 2048 -validity 365 -keystore MyKeyStore.ks
Итоговое в:
keytool error: java.lang.IllegalArgumentException: Modulus size must range from 512 to 1024 and be a multiple of 64
С кодом
KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyAlgorithm,"BC");
keyGen.initialize(numBits);
Результирующее в:
Exception in thread "main" java.security.InvalidParameterException: strength must be from 512 - 1024 and a multiple of 64
at org.bouncycastle.jcajce.provider.asymmetric.dsa.KeyPairGeneratorSpi.initialize(Unknown Source)
at java.security.KeyPairGenerator.initialize(KeyPairGenerator.java:340)
Приведенный выше пример использует реализацию Надувной замок, потому что где-то я читал он должен поддерживать 2048-битные ключи DSA. Я также попробовал вариант по умолчанию с той же ошибкой.
Я установил файлы политики юрисдикции (JCE) неограниченной силы. Согласно этому выходу, можно было бы ожидать большие ключи должны быть возможно:
System.out.println("DSA Max key length: " + Cipher.getMaxAllowedKeyLength("DSA"));
DSA Max key length: 2147483647
Но если вы Echeck KeySize ОГРАНИЧЕНИИ в JCE Providers Docs, 1024-бит равен максимальному.
Кто может сказать, если 2048-разрядный закрытый ключ просто не поддерживается в Java 7? Или, если есть другой способ создать ключ такого размера и импортировать его в Java Keystore?
Java 8 API отдает, он будет поддерживать большие ключи. Поэтому нам, возможно, придется подождать до следующего года.
спасибо за вашу реакцию я в курсе. как я объяснил, я уже установил его, но он не удалил 1024-битный предел KeyPairGenerator. Кажется, что у самого KeyPairGenerator есть жесткий предел 1024 inst чтобы оставить этот предел для конкретной реализации, например, Bounty Castle. Итак, точка 1 не является полным решением. Пункт 2 - это не тот путь, который хотелось бы или должен принять, я думаю. Это может быть единственный выбор, но я ожидаю, что есть другие способы обхода (например, вокруг JCE). На данный момент я выбираю точку 3 и придерживаюсь 1024-бит. – Clouren
@Clouren Вы бы хотели взять исходный код из Bounty Castle и вручную изменить его, чтобы работать? Источник находится здесь: http://www.bouncycastle.org/latest_releases.html - Я просто просмотрел его. Возможно. Я начну в области «bcprov-jdk15on-149 \ src.zip \ org \ bouncycastle \ crypto \ engines», как только вы получите исходный код. – Zeveso