Расшифровка RSA с использованием только D, Exponent и Modulus - PullRequest
2 голосов
/ 20 июня 2010

Я пытаюсь расшифровать, используя RSACryptoServiceProvider, но у меня есть только пара модулей и d в качестве закрытого ключа, а также показатель степени.

Структура RsaParameters не справится с этим. Он отклоняет меня при расшифровке с исключением «Плохой ключ».

Насколько я понимаю, этой пары достаточно для расшифровки без использования всех частей DQ DP INVERSEQ. Более того, в примере, который я нашел для python с pyCrypto, он имеет метод RSA.construct, который принимает только перечисленные выше части.

Возможно ли это с помощью классов в .NET Framework или другой библиотеке? Я пытался с BountyCastle, но не повезло.

Ответы [ 3 ]

1 голос
/ 20 июня 2010

это всего лишь математика;)

k = c^d mod N

k - это текстовое сообщениес шиферд твой закрытый ключN твой модульВ Java это будет выглядеть так:

BigInteger c = ...
BigInteger d = ...
BigInteger n = ...
BigInteger k = c.modPow(d, n);

Я надеюсь, что в C # есть что-то равное.

1 голос
/ 20 июня 2010

Имея имеющуюся информацию, вы можете восстановить всю недостающую информацию, а затем предоставить RSACryptServiceProvider все необходимые параметры.Алгоритм, который вам необходим для начала работы, - здесь .Посмотрите на раздел 8.2.2 (i), «Отношение к факторингу».Третий абзац, который начинается с «С другой стороны», продолжает набросать простой алгоритм, который можно использовать для восстановления простых чисел p и q.Из них вы можете легко восстановить другие значения.Вам понадобится разумный пакет BigInteger.

0 голосов
/ 20 июня 2010

Если вы не можете заставить .NET Framework сделать это, я давно написал программу на C ++ (которую вы можете конвертировать в C # с некоторыми усилиями), которая вручную выполняет криптографические преобразования RSA и просматривает источник код, похоже, он должен работать с использованием закрытого ключа (d) без указания p и q. Это на http://sourceforge.net/projects/bmrsa/

...