Криптосистема Уильямса

Материал из testwiki
Перейти к навигации Перейти к поиску

Криптосистема Уильямса (Williams System) — система шифрования с открытым ключом, созданная Хью Коуи Уильямсом (Hugh Cowie Williams) в 1984 году.

История

Алгоритм был разработан в 1984 году как альтернатива более известному RSA. Целью разработки было избавиться от уязвимостей криптосистемы.

Об алгоритме

Для любой криптосистемы желательно, чтобы было доказано, что её взлом имеет вычислительную сложность аналогичную вычислительной сложности задачи, которую на данный момент невозможно решить за обозримое время. Как и RSA, криптосистема Уильямса опирается на предположение о сложности факторизации больших чисел, и было доказано, что для любого взлома шифротекста с помощью предварительного криптоанализа (имея лишь открытый ключ) необходимо провести факторизациюШаблон:Sfn, то есть решить уравнение pq=n относительно p и q. Это утверждение не было доказано для системы RSA. Вычислительная сложность задачи факторизации неизвестна, но считается, что она достаточно высока. Но, как и RSA, криптосистема Уильямса уязвима для атаки на основе подобранного шифротекста.

Описание алгоритма

Алгоритм системы Уильямса, не являясь вычислительно более сложным, чем RSA, намного более громоздкий в описании. Для него существует леммаШаблон:Sfn, которая будет описана в разделе о математическом аппарате — она играет ключевую роль в этой криптосистеме.

Математический аппарат

Для начала следует определить терминологию — она заимствована из теории квадратичных полей, но для криптосистемы требуются лишь самые начальные знания. Рассмотрим элемент

α=a+bc=(a,b),

где a,b,c — целые числа, а c — условный элемент, квадрат которого равен c. Тогда будут справедливы следующие формулы:

α1+α2=(a1+a2,b1+b2),
α1α2=(a1a2+cb1b2,a1b2+a2b1)

Сопряжённым к α числом называется

α¯=abc

Определим также функции, которые помогут нам выразить степень этого числа. Пусть

αi=Xi(α)+Yi(α)c,

тогда Xi и Yi можно выразить через αi следующим образом:

Xi(α)=(αi+α¯i)/2
Yi(α)=b(αiα¯i)/(αα¯)=(αiα¯i)(2c)

Последнее выражение предназначено только для упрощения понимания. Так как функции определены для пар (a,b), то не содержат c. Если предположить теперь, что a2b2c=1, то можно записать следующие рекуррентные соотношения:

X2i=2Xi21
Y2i=2XiYi
X2i+1=2XiXi+1X1
Y2i+1=2XiYi+1Y1

Эти формулы предназначены для быстрого вычисления Xi и Yi. Так как X0=1 и X1=a, то Xi(α) также не зависит от b.

Шаблон:Hider

Создание ключа

Сначала выбираются два простых числа p и q, вычисляется их произведение n. С помощью перебора выбирается число c так, чтобы символы Лежандра δp и δq удовлетворяли условиям, наложенным в лемме. Затем (также подбором) определяется число s такое, что символ Якоби

(s2cn)=1

и gcd(s,n)=1. Число m выбирается так же, как и в лемме:

m=(pδp)(qδq)/4

Затем выбираются числа d,e, удовлетворяющие условиям, наложенным в лемме. Выберем случайное, например, d:gcd(d,m)=1, а e вычислим по формуле

e=m+12d1(modm)

Тогда n,e,c,s — открытый ключ, а p,q,m,d — секретный ключ.

Зашифрование

Все вычисления здесь ведутся по модулю n. Запись a+bc(modn) здесь означает (amodn)+(bmodn)c. Представим открытый текст в виде числа w2,3,...,n1. Определим γ и b1: если символ Якоби (w2cn) равен +1, то

b1=0 и γ=w+c,

иначе определим γ через произведение

b1=1 и γ=(w+c)(s+c).

Тогда легко убедиться, что символ Якоби

(γγ¯n)=1,

что проверяется прямым вычислением (во втором случае с учётом выбора s и мультипликативности символа Якоби). Далее находим число

α=γγ¯.

Представим α в виде α=a+bc. α удовлетворяет условиям, накладываемым в лемме. Действительно, p,q,n,c,d,e удовлетворяют условиям по построению, и

αα¯=γγ¯γ¯γ=1.
2(a+1)=γγ¯+γ¯γ+2=(γ+γ¯)2γ¯γ(modn)

Из последней формулы следует, что

(2(a+1)n)=1.

Получив α, следует его зашифровать возведением в степень e — результат может быть представлен через Xe(α) и Ye(α), которые могут быть[1] быстро (за количество операций порядка loge) найдены с помощью рекуррентных формул. Введём обозначение

E=Xe(α)Ye(α)

Тогда криптотекстом будет являться тройка чисел (E,b1,b2), где b2=amod2.

Расшифрование

Расшифрование проводится проще. Сначала вычисляется

α2e=α2e(αα¯)e=E+cEc,

что может сделать и злоумышленник. Но для окончательного расшифрования необходимо вычислить, как показано в лемме, α2ed — при том, что d держится в секрете.

α2ed=Xd(α2e)+Yd(α2e)c=±α

Число b2, передаваемое в сообщении, укажет, какой из знаков верен — тот, что даёт чётный результат или тот, что даёт нечётный. Число b1 покажет, следует ли умножить результат на (sc)/(s+c). В результате мы получим число

α=w+cwc

И с лёгкостью найдём исходный текст, что и завершит процесс расшифрования.

w=α+1α1c

Безопасность

Как и на RSA, на криптосистему может быть проведена атака на основе подобранного шифротекста. Предположим, что криптоаналитик нашёл некоторый алгоритм, позволяющий с вероятностью δ>0 расшифровать криптотекст. Тогда он может поступить следующим образом:

1. Выбрать число ϕ такое, что символ Якоби (ϕ2cn)=1;
2. Зашифровать ϕ, но таким образом, как будто упомянутый символ Якоби равен +1 и b1=0, получив на выходе криптотекст (E,0,b2);
3. Расшифровать полученный криптотекст, получив некоторый ψϕ.

Тогда с вероятностью δ>0 криптоаналитик может получить

ϕψ=p(modn)

или

ϕψ=q(modn)

Что позволяет произвести факторизацию n и взломать криптосистему.

Быстродействие

После генерации ключа основные вычисления происходят при возведении числа α в степень, а это может быть произведено за O(loge) умножений по модулю, каждое из которых происходит за O(loge) операций сложения, в свою очередь выполняющихся за O(loge) элементарных операций сложения неизменной скорости — то есть за O(log3e), с той же скоростью, что и возведение в степень целого числа по модулю, которое требуется для использования RSA.

Пример

Генерация ключа

Выберем, например, p=11 и q=13, произведением которых является n=143. Так как

(511)=1=11(mod4)

и

(513)=1=13(mod4)

Можно выбрать c=5. Также, если выбрать s=2, получим

(s2cn)=(111)(113)=1

Что удовлетворяет условию теоремы. Далее получим

m=(10144)=35

И, наконец, выберем экспоненты шифрования и расшифрования: так как

2316=18(modm)

Можно выбрать

e=23
d=16

Зашифрование

Пусть исходный текст будет ω=21. Так как

(2125143)=(711)(713)=(1)(1)=1

Имеем b1=0, γ=21+5 и

α=(21+5215)=125+65(mod143)

Так как 125 нечётно, получаем b2=1. После вычисления X23(α)=68 и Y23(α)=125 получаем

E=681251=68135=28(mod143)

Таким образом, шифротекстом является тройка (28,1,1).

Расшифрование

Теперь следует вычислить α2e:

α2e=(282+52825)+2(282825)5=95+1265(mod143)

Так как d=16, вычисляем также

X16(α2e)=18
Y16(α2e)=137

Так как b2=1, то a должно быть нечётным и

α=(18+1375)=125+65(mod143)

Учитывая, что вторая компонента шифротекста b1=0, заключаем, что α=α. В таком случае

ω=126+65124+655=21(mod143).

Таким образом, мы получили ω=21, который и являлся первоначальным открытым текстом.

Примечания

Шаблон:Примечания

Литература

  1. Арто Саломаа — Криптография с открытым ключом, изд. Мир, 1995, ISBN 5-03-001991-X