· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Новый взгляд на RSA

Посл.отвђт Сообщенiе


Дата: Июн 27, 2004 11:48:32 · Поправил: ECk

Здравствуйте!
Обратимся еще раз к RSA (на сей раз к опровержению некоторых фундаментальных основ RSA - например, об уникальности приватного ключа для конкретной экспоненты/модуля).
Получим "сильные простые числа" (safeprime в терминологии Maple 8)
safeprime(150) -> 167
safeprime(210) -> 227
Получим модуль: 167*227=37909
Получим Euler phi: 226*166=37516
Получим инверсию экспоненты (17) по подулю phi:
17^(-1)mod 37516 = 13241
Зашифруем значение 12345 по этому модулю с экспонентой 17:
12345^(17)mod 37909 = 27734
По логике и канонам RSA для этого значения (27734) должен быть только единственный ключ - (34201)
Но это не так. Решим уравнение (решаем в Maple 8)
msolve(27734^x=12345,37909)
получим результат: {x = 3862+9379*_Z1}
где _Z1 - любое целое число, принадлежащее множеству чисел от минус бесконечности до плюс бесконечности (включая ноль).
Проверим:
27734^(3862+9379*0) mod 37909 = 12345
27734^(3862+9379*1) mod 37909 = 12345
27734^(3862+9379*(-1)) mod 37909 = 12345
Так где же уникальность ключа?


Дата: Июн 27, 2004 13:41:02

Я RSA сам конечно не выводил... Но одна интересная мысль все же есть.

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

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

Вообщем мысль моя такая. Рассмотрим две последовательности a{n} и b{n}.

a{n} = a{n-1}^key mod base

b{n} = a{0}^(key ± X*n) mod base

Последовательность a{n} - циклична. Первый член ее это незашифрованные данные. Так вот, мне кажется, что эти последовательности как-то связаны между собой и X может быть вычеслен через период последовательности a{n}. Вопрос о существовании X оставляю открытым :)
Но опять же, это все интуиция.


Дата: Июн 27, 2004 14:10:16

Все это интересно с теоретической точки зрения. Вот только все эти так называемые баги пока не пошатнули криптостойкость RSA.


Дата: Июн 27, 2004 14:36:28 · Поправил: ECk

проверим
12345^17 mod 37909 = 27734
решим уравнение, где найдем x возведений в степень ключа по исходному модулю зашифрованного значения 27734, то есть, (key*x) - некоторое число возведений в степень key, т.е в данном случае - 17

msolve(27734^(17*x)=12345,37909)
получаем {}, то есть
решений этого уравнения нет

Другой подход показывает, что решения в данном случае имеют вполне определенный период - то есть, множество решений
с^(n+k*x)=m mod n
где:
с - зашифрованное значение
m - исходное значение
n - константа, зависящая от знака и значения экспоненты
k - период, зависящий от значения экспоненты/модуля
x - любое число из Z

Например, инвертируем результат (27734) по исходному модулю - 37909
27734^(-1) mod 37909 = 4523
решим уравнения:
msolve(27734^x=12345,37909); {x = 3862+9379*_Z1}
и
msolve(4523^x=12345,37909); {x = 5517+9379*_Z1}

И в первом, и во втором случае имеем константу - 9379, являющуюся периодом для ключей (для данного модуля и экспоненты).


Дата: Июн 27, 2004 16:20:03 · Поправил: ECk

msolve(27734^(17*x)=12345,37909)
все же решений нет


Дата: Июн 27, 2004 18:25:09

Неправильно поставил задачу - и ошибся :((
Решение все-таки есть! _DEN_ прав

Решаю следующим образом: (синтаксис Maple)
шифруем 12345^17 mod 37909 = 27734
x:=27734; // начальное зашифрованное значение
while(x<>12345) //зашифрованное значение
do
x:=power(x,17)mod 37909;//повторное шифрование
end do

Остановился на 4591
то есть: 27734^(17^4591)mod 37909 = 12345


Дата: Июн 27, 2004 21:19:23

ECk
Вот ты всё говоришь "для данного модуля и экспоненты". Почитай ещё раз про генерацию ключей RSA. Открытый ключ - "экспонента" - берётся отнюдь не с потолка (обычно 10001h). При "правильно" выбранной экспоненте закрытый ключ определяется однозначно. И всё "работает" как часы ;)


Дата: Июн 27, 2004 23:30:21

"Для данной экспоненты" - я имею в виду такую экспоненту, которая не имеет общих множителей с (p-1) и (q-1) - это из RFC 2313 "RSA encryption"

RFC 2313 PKCS #1: RSA Encryption March 1998

6. Key generation
This section describes RSA key generation.
Each entity shall select a positive integer e as its public exponent.
Each entity shall privately and randomly select two distinct odd
primes p and q such that (p-1) and e have no common divisors, and
(q-1) and e have no common divisors.
The public modulus n shall be the product of the private prime
factors p and q:
n = pq .
The private exponent shall be a positive integer d such that de-1 is
divisible by both p-1 and q-1.

К тому же, если экспонента имеет общие множители с phi от (p*q) - инверсия не существует.
Так что, экспонента по отношению к множителям, составляющим модуль, подобрана правильно.
Теперь о модуле: множители представляют из себя "сильные" простые числа - то есть числа p, вида (p-1)/2=q, где и p и q - простые числа.
(167-1)/2=83; 167 и 83 - простые числа.
(227-1)/2=113; 227 и 113 - простые числа.
Так что и множители для модуля подобраны правильно(в рамках стандарта).

Пожалуйста - экспонента 10001h (2^16+1)
Множитель 1 - 57119
Множитель 2 - 12107
(сильные простые числа)
модуль - 691539733
Euler phi 57118*12106=691470508
Инверсия(ключ d) (2^16+1)^(-1)mod 691470508 = 249632913
Шифруем 12345^(2^16+1)mod 691539733 = 676728080
решаем:
msolve(676728080^x=12345,691539733);
получаем:
{x = 249632913+345735254*_Z1}
проверяем:
power(676728080,(249632913+345735254*0)) mod 691539733;
результат: 12345
power(676728080,(249632913+345735254*1)) mod 691539733;
результат: 12345
power(676728080,(249632913+345735254*-1)) mod 691539733;
результат: 12345
на всем протяжении Z


Дата: Июн 28, 2004 02:04:04

Мысль такая.

a = b^k mod N

a - Зашифрованные данные
b - Исходные данные
k - Открытый ключ
N - Модуль

b^k mod N = b^k - m*N, где m - целое положительное, обладающее свойством:

b^k - m*N >= 0,
b^k - (m+1)*N <= 0.

Тогда для расшифровки данных, незная ключа достаточно решить уравнение

m = (b^k - a) / N, или
b = (a + m*N)^(1/k)

Одно уравнение, две неизвестных. Но у нас есть условия:

1-е: a < N
2-е: b < N
3-е: b^k - m*N >= 0
4-е: b^k - (m+1)*N <= 0
5-е и главное: Все числа - натуральные и, быть может, нулевые.

Т.е. уравнение в совокупности с данными пятью условиями теоретически должны дать единственный ответ. Напомню, нас интересует решение в целых.
Сегодня весь день пытался решить в общем виде. Результата пока нет.
На практике будет достаточно следующее...

Имеется неизвестное незашифрованное число b0 и произвольное целое число t, обладающее свойством: t < N
Вычислим для него m:

m = (t^k - a) / N

Если удасться по полученному m поставить знак между b0 и t (определить, кто больше а кто меньше), то задача решена и RSA останется только на страницах учебников истории.

Понимаю, звучит довольно самонадеяно...
Но все же хотелось бы выслушать чужие мнения по этому поводу.


Дата: Июн 29, 2004 08:56:23

:)
http://cryptography.ru/db/msg.html?mid=1161209
Почитайте. Освежите знания.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074