Рейтинг:0

Какую информацию необходимо хранить для закрытого ключа RSA для расшифровки

флаг mx

Я использую рса модуль на питоне. Я использую следующую строку для создания открытого и закрытого ключа:

(открытый_ключ, закрытый_ключ) = rsa.newkeys(2048)

И затем я шифрую сообщение, используя:

зашифрованный_msg = rsa.encrypt(the_msg, public_key)

Теперь предположим, что я хочу передать кому-то закрытый ключ вместе с зашифрованным сообщением. Какая информация должна быть включена в закрытый ключ, который я передаю другому лицу? Если я посмотрю на Приватный ключ структура в коде Python, я вижу, например, приватный_ключ имеет следующие поля:

слепой контакт, bliffac_inverse, коэф, г, е, exp1, опыт2, мьютекс, н, п, д.

Нужно ли мне сохранять и передавать все эти данные другому человеку, чтобы он/она мог расшифровать сообщение? Что это за переменные?

флаг ma
В необработанном RSA открытый ключ (n, e) и закрытый ключ (n, d). Все остальные переменные не нужны для математики. Но конкретная программная реализация может сильно использовать другие переменные для скорости, дополнительных функций и по другим причинам.
user9278661 avatar
флаг mx
@Наюки спасибо за ответ. Является ли переменная `n` одинаковой для открытых и закрытых ключей? Если это так, то нужно передать только `d` в качестве закрытого ключа? Кроме того, какие еще переменные я упомянул в вопросе? Есть ли ссылка, объясняющая эти переменные?
флаг ma
(n = p * q) действительно используется как для открытого, так и для закрытого ключей. Опять же, я сказал, что другие переменные зависят от реализации, и вам нужно читать их самостоятельно.
SAI Peregrinus avatar
флаг si
«Теперь предположим, что я хочу передать кому-то закрытый ключ вместе с зашифрованным сообщением». ПОЧЕМУ… НИКОГДА не делитесь закрытым ключом, это лишает смысла использование RSA. Попросите другого человека сгенерировать пару ключей и передать вам свой открытый ключ. Или, что еще лучше, используйте [age](https://age-encryption.org), чтобы получить серьезные преимущества в плане безопасности по сравнению с шифрованием сообщений с помощью RSA (это почти всегда плохая идея).
Рейтинг:1
флаг in

В RSA есть различные числа, которые (отчасти) эквивалентны закрытому ключу, но не являются закрытым ключом. как таковой. Это числа, которые, если вы их знаете, могут быстро вычислить остальную часть закрытого ключа. Некоторые из этих чисел улучшают скорость подписи/дешифрования закрытого ключа, если вы их знаете, поэтому реализации RSA часто сохраняют их вместе с закрытым ключом для повышения скорости.

Я просмотрел эту реализацию и нашел следующее значение:

  • н это модуль, число по модулю, какие ключевые операции выполняются.
  • е это публичный представитель, степень, с которой шифруется сообщение (или проверяется его подпись).
  • г это частный экспонент. Возведение числа в степень г (по модулю н) — операция, обратная возведению числа в степень е. Это связано с тем, что в RSA для любого $м$ в диапазоне, $(m^e)^d \equiv (m^d)^e \equiv m \pmod n$.
  • п это больший фактор н.
  • д это меньший фактор н. Тот факт, что он меньше, важен для значения коэф.
  • exp1 является $d \mod (p-1)$.
  • опыт2 является $d \mod (q-1)$.
  • коэф является $q^{-1} \mod p$. Это коэффициент для метода ускорения ЭЛТ.
  • слепой контакт — случайное число, выбранное при расшифровке или подписи. Он используется во время этих операций, чтобы скрыть значение частных номеров от атак по времени и мощности: для «слепых» атак по времени.
  • слепой_обратный является обратным слепой контакт по модулю н, используемый для процесса ослепления.
  • мьютекс является внутренним для реализации и не является числом. Похоже, он используется для обеспечения потокобезопасности реализации.

Открытый ключ состоит из чисел н и е.

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

п, д, exp1, опыт2, и коэф являются дополнительными частный числа, которые, если они предоставлены, ускоряют операции расшифровки и подписи RSA. Вы хотите сохранить эти цифры, если можете, но они не необходимый. Для получения дополнительной информации о том, что они делают: Китайская теорема об остатках и RSA

слепой контакт и слепой_обратный временные числа, генерируемые слепой() функция в этой реализации Python RSA. Не сохраняйте эти номера.

user9278661 avatar
флаг mx
Спасибо, это отличный ответ. Не могли бы вы добавить несколько ссылок для полноты? Где вы нашли объяснение этим параметрам?
Myria avatar
флаг in
@ user9278661 Хм. Я просто знал, как они использовались, а ссылка «CRT и RSA» является ссылкой на дополнительные номера. Это все очень общие вещи RSA, а не специфичные для python-rsa. Чтобы понять конкретные имена переменных, я просмотрел исходный код python-rsa: https://github.com/sybrenstuvel/python-rsa/blob/main/rsa/key.py.

Ответить или комментировать

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