Почему общедоступные параметры Диффи Хеллмана одинаковы при каждом выполнении?

Я пытаюсь реализовать протокол обмена ключами Диффи Хеллмана. На данный момент я застрял на генерации общедоступных параметров.
Каждый раз, когда я запускаю программу, параметры p и g одинаковы (хотя в документации к методу говорится: «Это будет генерировать новую пару ключей при каждом вызове». ).

Может ли кто-нибудь объяснить мне, что мне здесь не хватает?

KeyPairGenerator kpg;
try 
{
    kpg = KeyPairGenerator.getInstance("DiffieHellman");
    kpg.initialize(512, new SecureRandom());
    KeyPair dkp = kpg.generateKeyPair();

    DHParameterSpec params = 
            ((javax.crypto.interfaces.DHPublicKey) dkp.getPublic()).getParams();
    BigInteger p = params.getP();
    BigInteger a = params.getG();
    System.out.println(p);

} catch (Exception e) 
{
    e.printStackTrace();
}

person scarleth ohara    schedule 09.01.2014    source источник
comment
Реализации платформы Java требуются только для реализации DiffieHellman с размером ключа 1024. Хотя это практически не меняет реализацию, можете ли вы попробовать инициализировать с размером ключа 1024 и посмотреть, что произойдет? Также постарайтесь вообще не вызывать инициализацию (будет использоваться инициализация по умолчанию)   -  person SirRichie    schedule 09.01.2014


Ответы (1)


Вы явно не инициализируете значения p и g для обмена Диффи-Хеллмана, поэтому они инициализируются значениями по умолчанию. Обратите внимание, что эти значения общедоступны и должны быть разделены между двумя сторонами, чтобы обмен работал правильно. Я зашел в тупик после третьего SPI в Sun JCE, но, поскольку вы не устанавливаете параметры самостоятельно, код извлекает те же значения по умолчанию p и g, что и используются для DSA и применения их к DH.

Из Javadoc:

В случае, если клиент явно не инициализирует AlgorithmParameterGenerator (через вызов метода init), каждый поставщик должен предоставить (и задокументировать) инициализацию по умолчанию. Например, поставщик Sun использует размер простого числа модуля по умолчанию, равный 1024 битам, для генерации параметров DSA.

документация по реализации Sun перечисляет следующие значения для 512-битных ключей:

p = fca682ce 8e12caba 26efccf7 110e526d b078b05e decbcd1e b4a208f3
    ae1617ae 01f35b91 a47e6df6 3413c5e1 2ed0899b cd132acd 50d99151
    bdc43ee7 37592e17
g = 678471b2 7a9cf44e e91a49c5 147db1a9 aaf244f0 5a434d64 86931d2d
    14271b9e 35030b71 fd73da17 9069b32e 2935630e 1c206235 4d0da20a
    6c416e50 be794ca4
person chrylis -cautiouslyoptimistic-    schedule 09.01.2014