Как рассчитать открытый ключ (E) закрытого ключа RSA (D)?

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

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

Итак, я нашел решение! Рассчитать открытый ключ моего личного ключа.

Это не традиционная работа, поэтому я думаю, что ни в одном языке программирования нет функции для этой цели, и я должен создать свою собственную функцию на основе алгоритма RSA, которая вычисляет E на основе заданного D.

есть идеи как это сделать?

(Я предпочитаю C#! Но на самом деле мне нужно решение (даже математическая формула!), язык не имеет значения.)


person Seyed Hamed Shams    schedule 06.01.2014    source источник
comment
stackoverflow .com/questions/5244129/   -  person Flexo    schedule 07.01.2014
comment
Кажется, это связано, но на самом деле в этом посте нет ответа на мой вопрос.   -  person Seyed Hamed Shams    schedule 07.01.2014
comment
Да, это возможно (как предполагает этот связанный вопрос). Но этот вопрос не по теме, если вы не боретесь с реализацией этого на конкретном языке?   -  person Duncan Jones    schedule 07.01.2014
comment
Я не указал язык, потому что это не важно, и мне нужно решение. Так что я никого не ограничивал отвечать на мой вопрос на конкретном прог-языке.   -  person Seyed Hamed Shams    schedule 08.01.2014
comment
Делаю пост понятным!   -  person Seyed Hamed Shams    schedule 08.01.2014


Ответы (1)


пара ключей rsa состоит из открытого ключа (показатель e и модуль N) и закрытого ключа (показатель d и модуль N)

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

...тем не мение ...

если у вас есть закрытый ключ, который содержит больше значений по соображениям производительности (например, как d, dQ, dP, P, Q, N), то у вас есть все, что вам нужно, чтобы вычислить открытый показатель из этого:

вычислить phi_n как (P-1)*(Q-1)

запустите расширенный алгоритм Евклида, чтобы вычислить мультипликативную инверсию d mod phi_n... это ваш открытый показатель... поскольку N уже известно (P * Q), у вас есть открытый ключ

РЕДАКТИРОВАТЬ (точнее):

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

самым простым способом вы можете посмотреть на RSA, один ключ пары ключей - это не что иное, как показатель степени и общий модуль ... на самом деле, когда вы создаете пару ключей и вычисляете значения e и d, вы можете обменять их на друг друга, и все будет по-прежнему работать

чтобы вычислить мультипликативную модульную обратную, вам нужен модуль ... теперь наступает проблемная часть: есть два

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

второй модуль - это фи N (функция Эйлера фи) ... это значение ЯВЛЯЕТСЯ секретом ... каждый, у кого есть это значение, может вычислить обратный ключ ... в случае RSA фи (n) равно (P-1 )*(Q-1)

P и Q — два больших простых числа, используемых в RSA... N = P * Q

теперь, как вы можете видеть, чтобы вычислить другой ключ для данного ключа, вам нужно знать phi (n) ... единственный известный способ получить phi (N) - это функция eulers phi, и для этого вам понадобится множители N... так как N является произведением двух больших простых чисел, вам нужны эти два простых числа... так что либо у вас есть ключ, содержащий P и Q (на самом деле одного из них будет достаточно, так как вы можете разделить N, чтобы получить другое...) или вам придется факторизовать N самостоятельно...

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

поэтому, чтобы вернуться к вашей конкретной проблеме:

не имеет значения, хотите ли вы вычислить E через D или D через E... математическая задача та же самая... вы можете решить эту ЕСЛИ И ТОЛЬКО ЕСЛИ у вас есть хотя бы один множитель общего модуля N

person DarkSquirrel42    schedule 11.01.2014
comment
На самом деле я хочу иметь возможность создать пару ключей RSA с моим собственным закрытым ключом. Я искал и обнаружил, что мы можем вычислить от Е до D, но мы не можем получить от D до E. Теперь у меня есть D, и я хочу получить его E. - person Seyed Hamed Shams; 12.01.2014
comment
Большое спасибо за ваш полный ответ. - person Seyed Hamed Shams; 13.01.2014