LINUX.ORG.RU

Алгоритм RSA, должны ли простые p и q быть различными?


0

1

В Википедии есть описание алгоритма RSA: http://ru.wikipedia.org/wiki/RSA, там написано: «Выбираются два случайных простых числа p и q заданного размера (например, 1024 бита каждое).», а должны ли эти числа быть различными? Нужно написать программу, реализующую этот алгоритм, сейчас её проверяю, и обнаружил, что при разных p и q расшифрованный текст соответствует оригиналу, а при равных — не соответствует. Искать ошибку в программе или p и q действительно должны быть различными? В другом месте я нашёл указание на то, что они должны быть разными (http://sources.ru/csharp/RSACryptoPad.html): «Генерируем два различных больших нечетных простых числа, назовём их P и Q, одинакового порядка» (причём смущает, что во втором источнике оговаривается, что выбранные простые числа должны быть нечётными).

★★★★

Да должны, закреплено в стандартах. При P=Q функция Эйлера считается по другой формуле, отсюда и неправильный результат

anonymous
()

> причём смущает, что во втором источнике оговаривается, что выбранные простые числа должны быть нечётными

/me попытался представить четное простое число

phoenix ★★★★
()

конечно разными, иначе факторизация сводится к извлечению корня!

unanimous ★★★★★
()

Если при выборе двух случайных!!! 1024-битных простых чисел они совпадут - юзер полный неудачник. Правда, на это все=же ставят проверки (а мало ли).

В случае P=Q задача факторизации сводится к взятию корня в целых числах, которое выполняется за считанные наносекунды. Так что... фэйл.

причём смущает, что во втором источнике оговаривается, что выбранные простые числа должны быть нечётными

You made my day!!! Интересно, сколько четных простых чисел кроме двойки вы сможете найти?

segfault ★★★★★
()
Ответ на: комментарий от segfault

> You made my day!!! Интересно, сколько четных простых чисел кроме двойки вы сможете найти?

Хм, неужели не очевидно, что я именно это и имел в виду? А то, что в том источнике специально оговаривается, что простые должны быть нечётными, заставило сомневаться в том, что алгоритм там изложен без ошибок.

askh ★★★★
() автор топика
Ответ на: комментарий от askh

> Хм, неужели не очевидно, что я именно это и имел в виду?

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

segfault ★★★★★
()
Ответ на: комментарий от segfault

//Т.е. то, что P и Q - нечетные есть пометка капитана очевидность.

segfault ★★★★★
()
Ответ на: комментарий от segfault

> > Хм, неужели не очевидно, что я именно это и имел в виду?

Нет, не очевидно.

Да я уже давно заметил, что на LOR лучше не использовать выражений, которые при желании можно понять неверно. Часто находится человек, который именно это и сделает.

Большое простое число очевидно больше 2, а значит заведомо нечётное. Найди во фразе «два различных больших нечетных простых числа» лишнее слово. Это «нечётных», правильно? Теперь подумай, какой вариант более вероятен:

а). что и автор статьи не заметил, что «нечётные» можно не писать, и что я не знаю об этом;

б). что автор статьи не заметил, что «нечётные» можно не писать, я обратил на это внимание, а ты не понял, что означает моя фраза об этом («причём смущает, что во втором источнике оговаривается, что выбранные простые числа должны быть нечётными»);

;-)

askh ★★★★
() автор топика
Ответ на: комментарий от askh

Вообще-то, по второй ссылке много чего забавного... например, «64 это '='» в описании системы исчисления base64. Пункт 4 генерации ключа также забавен - используют некую пляску с бубном вместо простого взятия обратного по модулю (P-1)(Q-1) расширенным Евклидом.

segfault ★★★★★
()
Ответ на: комментарий от unC0Rr

> Если p и q - специальные простые (т.е. (p-1)/2 - тоже простое)

Неоправданное уменьшение пространства ключей.

то можно обойтись без евклида

Во-первых, в дань уважения к великому человеку можно было бы разок «шифт» придавить. Во-вторых, избежать использования алгоритма Евклида можно только путем замены на возведение в степень (p-2) в поле вычетов по простому P, а эта операция в разы тяжелее.

segfault ★★★★★
()
Ответ на: комментарий от segfault

> Неоправданное уменьшение пространства ключей.

а Шнайер считает, что это усиление стойкости ключа

дань уважения к великому человеку можно было бы разок «шифт» придавить

«евклид» - это не «Евклид - учёный, без которого можно обойтись», а жаргонизм для «алгоритма Евклида»

эта операция в разы тяжелее

всяко не тяжелее, чем использование готового ключа

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

> а Шнайер считает, что это усиление стойкости ключа

Устаревшая инфа. Раньше так считали из-за неприменимости какой-то атаки к ключам такого вида. Но недавно нашли способ распространить ее и на них.

а жаргонизм для «алгоритма Евклида»

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

всяко не тяжелее, чем использование готового ключа

Ага, а по сравнению с поиском больших простых - так вообще понты. Я спрашивал, зачем заморачиваться с поиском обратного по частям, если можно сделать это сразу? К тому же, не совсем понятно, каким образом автор статьи предлагает искать обратное по модулям (P-1) и (Q-1)?

segfault ★★★★★
()
Ответ на: комментарий от segfault

> Я спрашивал, зачем заморачиваться с поиском обратного по частям, если можно сделать это сразу?

э не, зачем же по частям. Дело в том, что в этом случае мы знаем значение функции Эйлера для произведения p * q, таким образом легко можем найти обратное к e.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

вру, в таком случае мы знаем φ(φ(n)), чтобы найти обратное к e путём простого возведения в степень по модулю

unC0Rr ★★★★★
()
Ответ на: комментарий от askh

> Часто находится человек, который именно это и сделает.
Вы недавно на ЛОРе?? Всегда находится человек.

svu ★★★★★
()
Ответ на: комментарий от unC0Rr

А, при условии, что (P-1) и (Q-1) - произведения двух простых? Да. Итого получаем: ограничение пространства ключей и замену расширенного алгоритма Евклида на более тяжелую операцию - возведение в степень по модулю. Так все же, в чем профит?

segfault ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.