Есть ли способ проверить, что данный закрытый ключ соответствует данному открытому ключу? Хочу проверить их на C ++
Как протестировать публичную / приватную пару ключей на C ++?
Ответы (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
Посетите http://www.cryptopp.com/, там есть утилиты для проверки пар ключей.
Как правило, закрытый ключ должен иметь возможность дешифровать данные, зашифрованные с помощью открытого ключа. Это доказательство того, что данная пара ключей действительна.