Криптоанализ RSA

Содержание

Слайд 2

RSA:

Берем p,q- два больших простых числа(512 бит)
n=pЧq, ϕ(n)=(p-1)Ч(q-1)
e<ϕ(n) ,такое что

RSA: Берем p,q- два больших простых числа(512 бит) n=pЧq, ϕ(n)=(p-1)Ч(q-1) e d-?
gcd(e, ϕ(n))=1
d-? : eЧd=1 (mod ϕ(n))
(e,n)-открытый ключ, d-закрытый ключ
Задача:
Как зная e и ϕ(n) найти за полиномиальное время такое d(такое что eЧd=1 (mod ϕ(n))).

Слайд 3

Encryption and Digital Signature

Шифрование:
MОZn(секретное сообщение)
C=M^e(mod n) то, что мы посылаем получателю.
D=С^d(mod n)

Encryption and Digital Signature Шифрование: MОZn(секретное сообщение) C=M^e(mod n) то, что мы
D=M, D является расшифровкой C

Цифровая подпись:
М-сообщение или Hash от него
Мы посылаем (M,S), где S=M^d(mod n)–подпись.
Каждый может проверить, что S^e=M, но не может сам придумать по M такое S.

Слайд 4

Полезный теоретический факт

Пусть (N,e)-публичный ключ, d- закрытый ключ. Тогда зная (N,e,d) можно

Полезный теоретический факт Пусть (N,e)-публичный ключ, d- закрытый ключ. Тогда зная (N,e,d)
разложить N на простые множители N=pЧq за полиномиальное время.

Слайд 5

Полезный теоретический факт

Пусть (N,e)-публичный ключ, d- закрытый ключ. Тогда зная (N,e,d)

Полезный теоретический факт Пусть (N,e)-публичный ключ, d- закрытый ключ. Тогда зная (N,e,d)
можно разложить N на простые множители N=pЧq за полиномиальное время.
Задача:
Докажите этот факт.

Слайд 6

Теоретический факт


Открытый вопрос: Пусть даны N,e:gcd(e,ϕ(n))=1 и F:Zn->Zn, F(x)=x^(1/e)(mod n) –

Теоретический факт Открытый вопрос: Пусть даны N,e:gcd(e,ϕ(n))=1 и F:Zn->Zn, F(x)=x^(1/e)(mod n) –
вычисляется за единичное время. Существует ли тогда полиномиальный алгоритм, раскладывающий N на простые множители.(F(x)-’оракул’)
Результат: для малых e ответ нет. Boneh и Venkatesan доказали,что в определенной модели, ответ ‘Да’ на вопрос для малых e даст нам эффективный алгоритм разложения N.

Слайд 7

Методы разложения N на простые сомножители

Trial Division
Pollard’s p-1 Method
Pollard’s rho Method
Elliptic Curve

Методы разложения N на простые сомножители Trial Division Pollard’s p-1 Method Pollard’s
Method
Quadratic Sieve Method
Number Field Sieve Method

Слайд 8

Trial Division

Пытаемся разделить n на все простые числа от 1 до Цn.

Trial Division Пытаемся разделить n на все простые числа от 1 до Цn.

Слайд 9

Trial Division

Пытаемся разделить n на все простые числа от 1 до Цn.

Trial Division Пытаемся разделить n на все простые числа от 1 до

Плохой метод (работает log(n)*2n^1/2)

Слайд 10

Trial Division

Пытаемся разделить n на все простые числа от 1 до Цn.

Trial Division Пытаемся разделить n на все простые числа от 1 до

Плохой метод (работает log(n)*2n^1/2)
Хороший метод так, как больше чем у 91% чисел есть простой делитель меньший 1000.

Слайд 11

Pollard’s p-1 Method

n=pq , у p-1 все простые делители

Pollard’s p-1 Method n=pq , у p-1 все простые делители k- произведение
k- произведение достаточно больших степеней всех простых чисел Пусть a=2. p|(a^k-1), значит мы можем найти p, как gcd(n, (a^k-1)).

Слайд 12

Pollard’s rho(ρ) Method

Если у нас есть n исходов и 1.2*(n^1.2) испытаний то

Pollard’s rho(ρ) Method Если у нас есть n исходов и 1.2*(n^1.2) испытаний
вероятность того, что 2 элемента совпали >50%.(birthday paradox)
Теперь придумаем какую-нибудь функцию f: Zn->Zn, которая ведет себя в Zn ‘рандомно’(f(x)=x^2+1(mod n)-подойдет)
Начнем выписывать последовательность x1,x2,x3,… , где xi+1=f(xi), параллельно будем считать gcd(xi-xj,n) для всех i и j – если gcd не 1 то мы разложили n.

Слайд 13

Pollard’s rho(ρ) Method

Замечание Если считать для всех пар i и j gcd(xj-xi,n),

Pollard’s rho(ρ) Method Замечание Если считать для всех пар i и j
то мы сделаем слишком много операций.

Слайд 14

Pollard’s rho(ρ) Method

Замечание Если считать для всех пар i и j gcd(xj-xi,n),

Pollard’s rho(ρ) Method Замечание Если считать для всех пар i и j
то мы сделаем слишком много операций.
Вопрос: Как этого избежать?

Слайд 15

Pollard’s rho(ρ) Method

Замечание Если считать для всех пар i и j gcd(xj-xi,n),

Pollard’s rho(ρ) Method Замечание Если считать для всех пар i и j
то мы сделаем слишком много операций.
Вопрос: Как этого избежать?
Ответ: Проверять только для j=2i.