При наличии закрытого ключа возможно ли получить его открытый ключ? - PullRequest
49 голосов
/ 30 марта 2009

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

[EDIT]

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

Ответы [ 9 ]

46 голосов
/ 03 сентября 2009

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

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

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

Вводит в заблуждение терминология: «закрытый ключ» относится к двум различным понятиям, независимо от того, говорите ли вы о теории или о практической реализации:

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

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

В RSA имеем (цитируя Википедию):

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

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

Для Эллиптическая кривая Диффи-Хеллмана , закрытый ключ d, и открытый ключ dG (с G также public), так что это тоже тривиально.

9 голосов
/ 03 апреля 2009

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

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

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

3 голосов
/ 30 марта 2009

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

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

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

2 голосов
/ 24 марта 2017

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

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

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

2 голосов
/ 21 августа 2012

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

ssh-keygen -y

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


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

1 голос
/ 30 марта 2009

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

0 голосов
/ 25 января 2016

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

0 голосов
/ 30 марта 2009

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

...