Подтвердить что ты не робот

Учитывая закрытый ключ, можно ли получить его открытый ключ?

Из всего, что я понимаю, читая различные материалы, пара ключей с открытым и закрытым ключами является основой ассиметричного шифрования, а также что-то о выборе 2 простых чисел (это примерно ваш личный ключ) и их умножении (что примерно соответствует вашему открытому ключу), Я вижу, что можно создать открытый ключ, если вы знаете секретный ключ. Правильно ли это или я что-то принимаю?

[EDIT]

Что меня больше сбивало с толку, так это то, что сериализовать ключ RSA в XML невозможно только с помощью частного ключа (с использованием .NET class RSACryptoServiceProvider). Не уверен, что это ограничение намеренно или нет!

4b9b3361

Ответ 1

Это зависит от криптосистемы.

В RSA мы имеем (ссылаясь на Википедию):

Открытый ключ состоит из модуля n и общедоступного (или шифрования) показателя e. закрытый ключ состоит из модуля n и частного (или дешифрованного) показателя d, который должны храниться в секрете.

Теперь, если у нас есть n и d (закрытый ключ), нам просто не хватает e для открытого ключа. Но e часто бывает довольно небольшим (менее трех цифр) или даже фиксированным (общая величина равна 65537). В этих случаях получение открытого ключа тривиально.

Для Эллиптической кривой Diffie-Hellman закрытый ключ является d, а открытый ключ dG (с G также общедоступным), поэтому он также тривиальный.

Ответ 2

В большинстве асимметричных реализаций криптосистем, единственный гарантируемый факт заключается в том, что вы не можете найти закрытый ключ из открытого ключа. В любом случае поиск открытого ключа из закрытого ключа в большинстве случаев является тривиальным.

Например, в RSA вы можете создать открытый ключ из закрытого ключа с помощью

openssl rsa -in private.pem -pubout -out public.pem

Что вводит в заблуждение терминология: "частный ключ" относится к двум различным понятиям, независимо от того, говоришь ли вы о теории или говоришь о практической реализации:

  • Теоретическим частным ключом является пара (d, n), которая разделяет идеальное симметричное (математическое) отношение с (e, n). Если вы их сравниваете, невозможно вычислить другой.
  • Практический закрытый ключ (например, в реализации openssl, например) относится к файлу, содержащему (d, n), но также к нескольким важным промежуточным значениям для цели скорости декодирования. В дополнение к этому теоретически "неизвестная" часть открытого ключа e часто привязывается к общим значениям по соглашению (который по умолчанию равен 0x10001 в openssl и хотя он может быть изменен, настоятельно рекомендуется придерживаться только очень конкретные значения). Поэтому вывод открытого ключа (e, n) из закрытого ключа тривиально по нескольким причинам.

Ответ 3

Это зависит от алгоритма и того, что вы подразумеваете под "закрытым ключом".

Закрытые ключи RSA часто хранятся в форме "Китайская теорема останова". Например, структура RSAPrivateKey, определенная в PKCS # 1 и повторно используемая многими другими криптовыми стандартами, принимает эту форму. Эта форма включает в себя два секретных номера, которые часто обозначаются p и q, из которых вычисляется тоталь. С помощью totient и частного экспонента быстро вычисляется публичный показатель.

В любом случае большинство пар ключей RSA используют 65537 в качестве открытого экспонента, а модуль всегда переносится как часть закрытого ключа.

Ответ 4

В ЛЮБОЙ криптосистеме открытого ключа открытый ключ математически связан с закрытым ключом. Это очень просто.

Открытый ключ выводится из закрытого ключа во время генерации, а с закрытым ключом в любой момент в будущем можно легко получить доступ к открытому ключу.

Невозможно пойти другим путем. Учитывая открытый ключ, получить закрытый ключ непросто. Вот почему мы можем безопасно делиться открытыми ключами с другими людьми. Если у вас достаточно времени/циклов ЦП, вы можете использовать ее, но, вероятно, легче ждать математической атаки на ключ.

Ответ 5

Для конкретного случая OpenSSH и ssh-keygen, да, вы можете:

ssh-keygen -y

Этот параметр будет читать частный файл формата OpenSSH и печатать открытый ключ в стандартный вывод.


Как правило, это зависит от алгоритма и того, что вы наклеиваете на закрытый ключ. Однако любая разумная реализация будет включать полную информацию (общедоступные и закрытые ключи) в секретном файле.

Ответ 6

Да при доступе к закрытому ключу открытый ключ может быть сгенерирован

Ответ 7

открытый ключ - это модуль N (и открытый показатель e, обычно 65537), закрытый ключ задается двумя числами p, q (и частным показателем d, иногда также частями CRT d_p, d_q для ускорения) по существу у вас есть N = pq и ed = 1 mod ((p-1) (q-1)), вы также можете вычислить d_p и d_q с помощью CRT данный закрытый ключ, вычисление модуля открытого ключа является "скучным" умножением, а публичный показатель находится в спецификации или вычисляется с использованием расширенного алгоритма Евклида, если стандартный e не был достаточно хорош. данный открытый ключ, для вычисления частного ключа требуется либо поиск d (проблема RSA), либо p, q (факторинг, см. полевое поле для лучшего альго для этого). Показано, что эти проблемы эквивалентны в разумных условиях [Разрыв RSA в целом эквивалентен факторингу, D. Aggarwal и U. Maurer, 2008]

Ответ 8

Существует неправильное представление о том, что такое закрытый ключ. Закрытый ключ - это только пара (d, n) и, учитывая только это, невозможно получить открытый ключ из него, если вы не можете предположить, что общий показатель составляет 65537, что имеет место почти для всех ключей rsa.

Если по какой-либо причине публичный экспонент - это больший номер, вы не можете создать открытый ключ из частного.

Тем не менее, значение, хранящееся как "закрытый ключ" для файлов pem, является не только частным ключом, но также содержит основные факторы (среди прочего) и, следовательно, легко сгенерировать открытый ключ из него.

Ответ 9

Теоретически это возможно, но для больших ключей вычислительно неосуществимы.