Есть ли способ изменить открытый ключ таким образом, чтобы дешифрование могло быть выполнено с помощью закрытого ключа после некоторого изменения?

В схеме асимметричного шифрования мне было интересно, можно ли добиться следующего:

  1. Боб отправляет Алисе свой открытый ключ
  2. Алиса изменяет открытый ключ Боба и шифрует им какой-то документ.
  3. Алиса отправляет зашифрованный документ Бобу
  4. Боб получает документ, но не может его расшифровать своим закрытым ключом.
  5. Позже Алиса отправляет Бобу некоторую дополнительную информацию (вероятно, связанную с методом, который она использовала для изменения открытого ключа Боба).
  6. Боб использует эту дополнительную информацию, чтобы изменить свой закрытый ключ и успешно расшифровать документ.

Кто угодно?

Я предполагаю, что RSA для генерации ключей, шифрования и дешифрования, но если это проще сделать с другой схемой, не стесняйтесь комментировать.


person Kenji Baheux    schedule 02.03.2010    source источник


Ответы (4)


(Я полагаю, вы говорите об RSA.)

Да, возможно, но не на 100%.

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

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

Но можно изменить показатель степени. Вы можете выбрать любое (простое) число между 1 и показателем степени в качестве нового показателя степени и надеяться, что оно совпадает с простым числом. Не зная тотентиент, невозможно всегда выбрать правильный показатель степени. Чтобы найти тотентиент, вам нужно знать простые множители ключа, а это значит, что вам придется сломать ключ (получайте удовольствие!).

Итак, на самом деле невозможно иметь для этого 100% рабочий метод, по крайней мере, не зная только открытый ключ.

Если вам нужна дополнительная информация о теории, проверьте здесь

person George    schedule 02.03.2010
comment
Если, скажем, модуль является произведением двух 512-битных целых чисел, тогда любое 513-битное простое число будет приемлемым в качестве нового секретного открытого ключа. Проблема со схемой заключается в том, что Боб мог сгенерировать свой открытый ключ таким образом, чтобы ему было легко вычислять дискретные журналы по модулю своего модуля. - person abc; 02.03.2010

Надеюсь, моя идея сработает.

Предположим, что (e,d,n) является кортежем публичной экспоненты RSA. Частный показатель RSA и модуль RSA n:

Выберите простое число, например p, от 1 до 256-битного целого числа.

Чтобы зашифровать сообщение m, вычислите новый открытый показатель степени как e*p и зашифрованный текст как:

c= m^{e*p} mod n.

Чтобы расшифровать, получатель должен знать простое число p, поэтому вы отправляете ему это p позже, и он вычисляет

(1) P = p^{-1} mod phi(n)

а также

(2) m^e=c^{P} mod n

а также

наконец m=(m^e)^d mod n. Это работает, поскольку получатель знает phi (n).

Кстати, а где это можно использовать? Есть ли у вас какое-нибудь приложение для этого?

person Jothi Rangasamy    schedule 16.02.2011

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

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

person caf    schedule 02.03.2010
comment
Согласно di-mgt.com.au/rsa_alg.html объем RSA охватывает генерацию ключей, шифрование и дешифрование. - person Kenji Baheux; 02.03.2010
comment
@Kenji: известно, что RSA небезопасен для больших объемов данных. Как говорит caf, лучше всего шифровать данные очень маленького размера (то есть типичный ключ для AES). - person Noon Silk; 02.03.2010
comment
Kenji: Обратите внимание, что на той странице, на которую вы ссылаетесь, в разделе Шифрование с использованием PKCS # 1v1.5 данные, которые должны быть зашифрованы D, обычно описываются как сеансовый ключ. Ключ сеанса - это ключ для симметричного алгоритма, используемого для шифрования фактических данных, представляющих интерес. - person caf; 02.03.2010

Хм, интересно.

Я полагаю, вы имеете в виду RSA?

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

Итак, на самом деле вы говорите о подходе, который меняет ключи.

Технически (математически), если вы введете другое число, вы получите другое число. Так что это не проблема; изменение открытого ключа каким-либо образом приведет (при условии, что вы убедите свою реализацию RSA использовать его или подготовите соответствующее другое число) приведет к другому симметричному ключу, таким образом, Боб получит нерасшифровываемый документ (потому что он будет ожидать другого ключа).

На самом деле, я не уверен, что тебя это волнует. Это довольно бесполезное занятие. Возможно, однако, вас действительно интересует разделение ключей ( или «Секретный обмен», как, кажется, называет это википедия).

HTH. Я ни в коем случае не эксперт.

person Noon Silk    schedule 02.03.2010
comment
Я ищу способ разблокировать шифрование путем обмена некоторой третьей информацией поверх существующего асимметричного шифрования. Спасибо за ссылку на разделение ключей. Я буду смотреть в него. - person Kenji Baheux; 02.03.2010
comment
@Kenji: Да, тогда разделение клавиш - это то, что вам нужно. Это позволит вам безопасно распределить ключ между двумя людьми и гарантировать, что его можно будет использовать только тогда, когда они будут сотрудничать (т. Е. Присоединиться к ключу). - person Noon Silk; 02.03.2010
comment
Введение в Википедию начинается с того, что в схеме совместного использования секретов есть один дилер и n игроков, но я предположил, что n ›= 2, поэтому я еще не уверен, что разделение ключей полезно для моего сценария (Алиса - дилер, а Боб - игрок). Еще нужно подумать об этом. - person Kenji Baheux; 02.03.2010
comment
@Kenji: Значит, вы хотите отправить «часть» ключа, а затем отправить другую часть «позже»? Я имею в виду (очевидно), что технически это то же самое, что просто послать весь ключ позже. Вы можете разделить его между Алисой и Бобом (Алиса - дилер и игрок), но это немного странно, ИМХО. Если вы не пытаетесь предотвратить какую-либо атаку при передаче на свой ключ, но отправляете его в двух частях (в этом случае это уместно). - person Noon Silk; 02.03.2010
comment
«Разблокирование» шифрования (следовательно, передача некоторой третьей информации) должно происходить только тогда, когда между Алисой и Бобом выполняется какое-то условие (например, предложение руки и сердца :-D). - person Kenji Baheux; 02.03.2010
comment
@Kenji: Тогда просто не отправляйте ключ до этого этапа. В любом случае для Боба это бесполезно. Это также самая упрощенная реализация (следовательно, менее подвержена ошибкам, а значит, более безопасна). - person Noon Silk; 02.03.2010
comment
разделение ключей не требуется и является излишне сложным. Просто используйте RSA и не отправляйте зашифрованный ключ, пока не будете готовы к расшифровке другой стороной. - person President James K. Polk; 03.03.2010
comment
@GregS: Да, я думаю, я просто пытаюсь разделить волосы. - person Kenji Baheux; 03.03.2010