Учитывая два ключа SSH2, как мне проверить, что они принадлежат одной и той же паре ключей в Java? - PullRequest
4 голосов
/ 13 декабря 2010

Я пытаюсь найти способ проверить, что два ключа SSH2, один закрытый и один открытый, принадлежат к одной паре ключей.Я использовал JSch для загрузки и анализа закрытого ключа.

Обновление: фрагмент, который может показать, как восстановить открытый ключ из закрытого ключа (SSH2 RSA), решил бы проблему.

Ответы [ 4 ]

9 голосов
/ 15 декабря 2010

Это можно сделать с помощью легкого API BouncyCastle .

Например:

InputStream in = new FileInputStream("path/to/private/key");
AsymmetricKeyParameter privateKey = PrivateKeyFactory.createKey(in);
RSAPrivateCrtKeyParameters rsaPrivateKey = (RSAPrivateCrtKeyParameters)privateKey;
BigInteger modulus = rsaPrivateKey.getModulus();
BigInteger publicExponent = rsaPrivateKey.getPublicExponent();
RSAKeyParameters publicKeyParams = new RSAKeyParameters(false, modulus, publicExponent);

Класс RSAKeyParameters представляет фактический ключ.

Надеюсь, это поможет!

1 голос
/ 03 мая 2014

Я написал этот метод util с использованием безопасности Java (обычный J2SE):

public static boolean validateRSAKeyPair(RSAPrivateCrtKey privateKey, RSAPublicKey publicKey) {
    BigInteger n = publicKey.getModulus();
    BigInteger e = publicKey.getPublicExponent();
    BigInteger d = privateKey.getPrivateExponent();
    BigInteger p = privateKey.getPrimeP();
    BigInteger q = privateKey.getPrimeQ();

    BigInteger pq = p.multiply(q);//shold equal to n
    BigInteger eulerMod = p.add(NEGATIVE_ONE).multiply(q.add(NEGATIVE_ONE));// φ(n)=(p-1)*(q-1)
    BigInteger mod = d.multiply(e).mod(eulerMod);// (d*e) mod φ(n), should be 1
    return n.equals(pq) && BigInteger.ONE.equals(mod);
}

Он проверяет пару ключей RSA по параметрам алгоритма RSA.

1 голос
/ 15 декабря 2010

Может быть, это то, что вы ищете: Как вы тестируете публичную / приватную пару ключей DSA?

Обновление: для решения на чистом Java взгляните на стандартизированное Java Cryptography Extension (JCE): http://download.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html#KeyGenerator

Обновление 2: Вот пример кода из RSA (метод с именем "go" генерирует пару ключей): http://www.rsa.com/products/bsafe/documentation/cryptoj35html/doc/dev_guide/group__CJ__SAMPLES__RSANOPAD__JCE.html

Обновление 3: вот ссылка, которая занимается анализом открытого ключа для JCE: Как преобразовать строку из формата PEM в DER

0 голосов
/ 15 декабря 2010

Я знаю, что это обман, но вы можете вызвать такой процесс, как:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

См. это .

...