пара ключей 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