Как протестировать публичную / приватную пару ключей на C ++?

Есть ли способ проверить, что данный закрытый ключ соответствует данному открытому ключу? Хочу проверить их на C ++


person Anwar Mohamed    schedule 25.07.2012    source источник
comment
есть ли способ получить их модуль в C ++?   -  person Anwar Mohamed    schedule 25.07.2012
comment
Можете ли вы привести мне пример с использованием openssl и c ++   -  person Anwar Mohamed    schedule 25.07.2012
comment
Модуль, если я не ошибаюсь, является частью закрытого ключа. Библиотеки, обрабатывающие пары ключей, также должны иметь возможность предоставлять / извлекать модуль из ключа. Cryptopp - пример   -  person EddieBytes    schedule 25.07.2012
comment
Я как раз отвечал, есть ли способ получить их модуль на С ++? ...   -  person Luchian Grigore    schedule 25.07.2012


Ответы (2)


Это зависит от алгоритма открытого ключа, который использует эти ключи, и от того, как эти ключи кодируются. Например, открытый ключ RSA состоит из двух параметров «n» и «e», в то время как закрытый ключ состоит из этих параметров плюс «d» и, возможно, также «p» и «q». Все эти параметры представляют собой большие целые числа, обычно представленные с использованием внутренней формы некоторой большой целочисленной библиотеки. Итак, чтобы сравнить открытый и закрытый ключи, вам просто нужно проверить соответствие «n» и «e». В зависимости от используемой библиотеки и системы вы можете даже игнорировать 'e', ​​поскольку это может быть константа.

Использование OpenSSL может выглядеть примерно так:

RSA *pubkey = PEM_read_RSA_PUBKEY(...);
RSA *privkey = PEM_read_RSAPrivateKey(...);

if (!BN_cmp(pubkey->n, privkey->n)) {
    // same modulus, so the keys match
person Chris Dodd    schedule 25.07.2012

Посетите http://www.cryptopp.com/, там есть утилиты для проверки пар ключей.

Как правило, закрытый ключ должен иметь возможность дешифровать данные, зашифрованные с помощью открытого ключа. Это доказательство того, что данная пара ключей действительна.

person EddieBytes    schedule 25.07.2012
comment
А для проверки в другом направлении, например если у вас нет / вы не хотите доступа к закрытому ключу: все, что подписано с закрытым ключом следует проверять по общему ключу. - person smocking; 25.07.2012