44. Шифрование с открытыми ключами: RSA, системы Эль-Гамаля, системы на основе «проблемы рюкзака».
Шифрование с открытыми ключами
Криптосистема состоит из взаимно однозначного шифрующего преобразования f из множества Р всех возможных элементов открытого текста в множество С всех возможных элементов шифртекста.
По определению, криптосистема с открытым ключом обладает тем свойством, что знание шифрующего преобразования не позволяет по ключу шифрования найти ключ дешифрования, избежав чрезвычайно длинных вычислений. Другими словами, шифрующая функция f:P->C легко вычисляется, если ключ шифрования .K(/E) известен, но вычислять значения обратной функции f(\-1):C->P очень сложно.
RSA
Работает криптосистема RSA следующим образом.
Каждый пользователь А выбирает два простых числа p(/A), q(/A) а вслед за этим — случайное число e(/A) которое не имеет общих множителей с (p(/A)-1)(q(/A)-1) (случайно целое число е(/a) между 1 и фи(/n)) Далее, А вычисляет n(/A)=p(/A)q(/A), фи(/n(/A))=n(/A)+1-p(/A)-q(/A) и число, обратное относительно умножения к e(/A) по модулю фи(n(/A)):d(/A)=(\def)e(/A)(\-1)(mod фи(n(/A))). Ключ шифрования K(/E,A)=(n(/A),e(/A)) делается открытым, а ключ дешифрования K(/D,A)=(n(/A),d(/A)) - секретным. Шифрующее преобразование — это отображение Z/n(/A)Z в себя по формуле f(P)=(\-)P(\e(/A))(mod n(/A)). Дешифрующее преобразование — это отображение Z/n(/A)Z в себя по формуле f(\-1)(C)=(\-)C(\d(/A))(mod n(/A)) Cогласно выбору d(/A) эти два отображения взаимно обратны. А именно, последовательное применение в любом порядке f и f(\-1) приводит к возведению в степень d(/A)e(/A) Поскольку d(/A)e(/A) дает при делении на фи(n(/A)) остаток 1, это эквивалентно возведению в первую степень.
При выборе р и q пользователь А должен позаботиться о выполнении ряда условий. Самые важные из них следующие: эти простые числа не должны быть слишком близки друг к другу (например, одно должно быть на несколько десятичных разрядов длиннее другого), числа р—1 и q—1 должны иметь очень маленький наибольший общий делитель и каждое из них должно иметь хотя бы один большой простой делитель.
Системы Эль-Гамаля
Криптосистема Эль-Гамаля работает следующим образом. Сначала фиксируется достаточно большое конечное поле F(/q) и элемент gEF(/q)(\*) (желательно, хотя и не обязательно, чтобы он был порождающим). Предположим, что используются элементы открытого текста с численными эквивалентами Р в F(/q). Каждый пользователь А выбирает случайно целое число a=a(/A) из диапазона 0<a<q-1. Это секретный ключ дешифрования. Открытым ключом шифрования является элемент g(\a)EF(/q).
Чтобы передать сообщение Р пользователю А, выбирается случайно целое число к и А посылается следующая пара элементов из F(/q):
(g(\k),Pg(\ak))
Вычислить g(\ak) можно, не зная а, просто возведя g(\a) в степень к. Теперь А, зная а, может по этой паре раскрыть Р, возведя первый элемент g(\k) в а-ю степень и разделив на результат второй элемент (или, что эквивалентно, возведя g(\k) в степень q-1-a и умножив на второй элемент). Другими словами, послание состоит из замаскированного сообщения (Р «несет маску» g(\ak)) и «ключа», а именно,g(\k) которым можно снять маску (но воспользоваться ключом может лишь тот, кто знает а).
Шифрсистемы на основе "проблемы рюкзака"
"Проблема рюкзака" (или "ранца") может быть сформулирована следующим образом. Пусть задано множество натуральных чисел A- {α1,α2,...,αη} и натуральное число S. Требуется установить, имеется ли такое подмножество множества А , сумма элементов которого была бы равна S . Эквивалентной является следующая формулировка: существует ли такой набор чисел x(/i)E{0,1}, i<=n для которого
SUM(/i=1)(\n)a(/i)x(/i)=S
[Данная проблема получила свое название в связи с тем, что поставленная задача может быть переформулирована также в следующем виде. Имеется набор предметов с известными весами и рюкзак, который может выдержать вес, не превышающий заданной величины. Можно ли выбрать набор предметов для погрузки в рюкзак так, чтобы они в точности имели максимально возможный вес.
"Проблема рюкзака" является весьма сложной, ее решение с полиномиальной сложностью в настоящее время не известно.]
Идея построения системы шифрования на основе проблемы рюкзака заключается в выделении некоторого подкласса задач об укладке рюкзака, решаемых сравнительно легко, и "маскировки" задач этого класса (с помощью некоторого преобразования параметров) под общий случай. Параметры подкласса определяют секретный ключ, а параметры модифицированной задачи — открытый ключ. В качестве легко решаемой задачи Р.Меркль и М. Хеллман в 1978 г. предложили задачу об укладке "супервозрастающе-го" рюкзака.
Назовем супервозрастающей последовательность натуральных чисел (b(/1),b(/2),...,b(/n)), обладающую свойством
b(/i)>SUM(/j=1)(\i-1)b(/j), 2<i<n
Проблема рюкзака для супервозрастающей последовательности может быть решена с помощью процедуры, состоящей в выполнении следующих шагов:
1. Положить i = n ;
2. Если i > 1, то положить х(/i) равным 1 и S равным S –b(/i), если S>b(/i), и положить х(/i), равным 0 в противном случае;
3. Положить i равным i — 1 и возвратиться к шагу 2.
В системе, основанной на проблеме рюкзака, величина n является параметром системы.
Для вычисления открытого и соответствующего секретного ключа каждый из абонентов системы осуществляет следующую последовательность действий.
1. Выбирает супервозрастающую последовательность
(b(/1),b(/2),...,b(/n)) и модуль т такой, что m>SUM(/i=1)(\n)b(/i)
2. Выбирает случайное число W, 1<W<m-1, такое, что НОД(W,m) = 1.
3. Выбирает случайную перестановку пи чисел {1,2,...,n}.
4. Вычисляет a(/i)=W*b(/пи(i)) mod m для i=(1,n)(\-)
Открытым ключом является набор (a(/1),a(/2),...,a(/п)), секретным ключом — набор (пи,m,W,(b(/1),..,b(/n))).
Чтобы зашифровать сообщение М, предназначенное для абонента А , абонент В осуществляет следующие шаги с помощью открытого ключа (a(/1),a(/2),...,a(/η)) абонента А :
1. Представляет Μ в виде бинарной последовательности
Μ = М(/1)М(/2)...М(/n) длины n ;
2. Вычисляет C=SUM(/i=1)(\n)*a(/i) и направляет его к А .
Абонент А . получив С, вычисляет Η = W(\-1) С mod m, а затем, решая проблему рюкзака для супервозрастающей последовательности, находит числа z(/i)E{0,1} такие, что
H=SUM(/i=1)(\n)z(/i)*b(/i)
Биты последовательности Mi, вычисляются по формуле:
M(/i)=z(/пи(i)), i=(1,n)(\-)
Корректность проведенной процедуры расшифрования вытекает из следующих рассуждений. Поскольку
0<H<m, то H=SUM(/i=1)(\n)M(/i)*b(/пи(i)) и, следовательно, алгоритм
решения проблемы рюкзака действительно находит биты открытого текста, переставленные в соответствии с перестановкой пи.