XTR (алгоритм)

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

Шаблон:Значения XTR (сокращение от ECSTR — «Efficient and Compact Subgroup Trace Representation») — алгоритм шифрования с открытым ключом, основывающийся на вычислительной сложности задачи дискретного логарифмирования. Преимущества этого алгоритма перед другими, использующими эту идею, в более высокой скорости и меньшем размере ключа.

Данный алгоритм использует генератор g относительно малой подгруппы порядка q (q — простое) подгруппы GF(p6)*. При правильном выборе q, дискретное логарифмирование в группе, порожденной g, имеет ту же вычислительную сложность, что и в GF(p6)*. XTR использует арифметику GF(p2) вместо GF(p6), обеспечивая ту же защищенность, но с меньшими затратами на вычисления и передачу данных.

Теоретическая основа XTR

Алгоритм работает в конечном поле GF(p6). Рассмотрим группу порядка p2p+1, и её подгруппу порядка q, где p — простое число, такое, что другое достаточно большое простое число q является делителем p2p+1. Группа порядка q называется XTR-подгруппой. Эта циклическая группа g является подгруппой GF(p6)* и имеет генератор g.

Арифметические операции в GF(p2)

Пусть p — простое число, такое, что p2 mod 3, а p2 — p + 1 делится на достаточно большое простое q. Так как p21 mod 3, p порождает (/3)*. Таким образом, круговой многочлен Φ3(x)=x2+x+1 является неприводимым в GF(p). Следовательно, корни α и αp образуют оптимальный нормальный базис GF(p2) над GF(p) и

GF(p2){x1α+x2αp:x1,x2GF(p)}.

С учетом p2 mod 3:

GF(p2){y1α+y2α2:α2+α+1=0,y1,y2GF(p)}.

Таким образом, стоимость арифметических операций следующая:

  • Вычисление xp не требует умножения
  • Вычисление x2 требует двух операций умножения в GF(p)
  • Вычисление xy требует трех операций умножения в GF(p)
  • Вычисление xz-yzp требует четырёх операций умножения в GF(p).:[1]

Использование следов в GF(p2)

Элементами, сопряженными с hGF(p6) в GF(p2) являются: сам h,hp2 и hp4, а их сумма — след h.

Tr(h)=h+hp2+hp4.

Кроме того:

Tr(h)p2=hp2+hp4+hp6=h+hp2+hp4=Tr(h)

Рассмотрим генератор g XTR-группы порядка q, где q — простое число. Так как g — подгруппа группы порядка p2p+1, то qp2p+1. Кроме того,

p2=p1

и

p4=(p1)2=p22p+1=p.

Таким образом,

Tr(g)=g+gp2+gp4=g+gp1+gp.

Отметим также, что сопряженным к элементу g является 1, то есть, g имеет норму равную 1. Ключевой особенностью XTR является то, что минимальный многочлен g в GF(p2)

(xg) (xgp1)(xgp)

упрощается до

x3Tr(g) x2+Tr(g)px1

Иными словами, сопряженные с g элементы, как корни минимального многочлена в GF(p2), полностью определяются следом g. Аналогичные рассуждения верны для любой степени g:

x3Tr(gn) x2+Tr(gn)px1

— этот многочлен определяется следом Tr(gn).

Идея алгоритма в том, чтобы заменить gnGF(p6) на Tr(gn)GF(p2), то есть вычислять Tr(gn) по Tr(g) вместо gn по g Однако для того, чтобы метод был эффективен, необходим способ быстро получать Tr(gn) по имеющемуся Tr(g).

Алгоритм быстрого вычисления Tr(gn) по Tr(g)[2]

Определение: Для каждого c GF(p2) определим:

F(c,X)=X3cX2+cpX1GF(p2)[X].

Определение: Пусть h0, h1,h2 — корни F(c,X) в GF(p6), а n. Обозначим:

cn=h0n+h1n+h2n.

Свойства cn и F(c,X):

  1. c=c1
  2. cn=cnp=cnp
  3. cnGF(p2) для n
  4. cu+v=cucvcvpcuv+cu2v для u,v
  5. Либо все hj имеют порядок, являющийся делителем p2p+1 и >3, либо все hj — в поле GF(p2). В частности, F(c,X) — неприводим тогда и только тогда, когда его корни имеют порядок, являющийся делителем p2p+1 и >3.
  6. F(c,X) приводим в поле GF(p2) тогда и только тогда, когда cp+1GF(p)

Утверждение: Пусть даны c, cn1,cn,cn+1.

  1. Вычисление c2n=cn22cnp требует двух операций произведения в поле GF(p).
  2. Вычисление cn+2=cn+1ccpcn+cn1 требует четырёх операций произведения в поле GF(p).
  3. Вычисление c2n1=cn1cncpcnp+cn+1p требует четырёх операций произведения в поле GF(p).
  4. Вычисление c2n+1=cn+1cnccnp+cn1p требует четырёх операций произведения в поле GF(p).

Определение: Пусть Sn(c)=(cn1,cn,cn+1)GF(p2)3.

Алгоритм для вычисления Sn(c) при заданных n и c

  • При n<0 алгоритм применяется для n и c, затем используется свойство 2 для получения конечного результатаю
  • При n=0, S0(c) =(cp,3,c).
  • При n=1, S1(c) =(3,c,c22cp).
  • При n=2, воспользуемся выражениями для cn+2=cn+1ccpcn+cn1 и S1(c), чтобы найти c3 и, соответственно, S2(c).
  • При n>2, чтобы вычислить Sn(c), введем
S¯i(c)=S2i+1(c)
и m¯=n если не n нечетно и m¯=n1 если четно. Положим m¯=2m+1,k=1 и найдем S¯k(c)=S3(c), используя Утверждение, и S2(c). Пусть, в дальнейшем,
m=j=0rmj2j
где mj0,1 и mr=1. Для j=r1,r2,...,0 последовательно выполним следующее:
  • При mj=0, воспользуемся S¯k(c) чтобы найти S¯2k(c).
  • При mj=1, воспользуемся S¯k(c) чтобы найти S¯2k+1(c).
  • Заменим k на 2k+mj.

По завершении итераций, k=m, а Sm¯(c)=S¯m(c). Если n — четно, воспользуемся Sm¯(c) чтобы найти S¯m+1(c).

Выбор параметров

Выбор поля и размера подгруппы

Чтобы воспользоваться преимуществами представления элементов групп в виде их следов и обеспечить достаточную защищенность данных, необходимо найти простые p и q, где p — характеристика поля GF(p6), причем p2 mod 3, а q — размер подгруппы и делитель p2p+1. Обозначим как P и Q размеры p и q в битах. Чтобы достичь уровня безопасности, который обеспечивает, к примеру, RSA с длиной ключа в 1024 бита, требуется выбрать P таким, что 6P>1024, то есть P170 а Q может быть около 160. Первый алгоритм, который позволяет вычислить такие простые p и q — Алгоритм А.

Алгоритм А

  1. Найдём r такое, что число q=r2r+1 — простое число длиной в Q бит.
  2. Найдем k такое, что число p=r+kq — простое длиной P бит, а также p2 mod 3.
Корректность Алгоритма А:
Необходимо проверить лишь то, что qp2p+1, так как все оставшиеся свойства очевидно выполнены из-за специфики выбора p и q.
Нетрудно заметить, что p2p+1=r2+2rkq+k2q2rkq+1=r2r+1+q(2rk+k2qk)=q(1+2rk+k2qk), значит qp2p+1.

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

От этого недостатка избавлен более медленный Алгоритм Б.

Алгоритм Б

  1. Выберем простое число q длиной в Q бит, такое, что q7 mod 12.
  2. Найдем корни r1 и r2 X2X+1 mod q.
  3. Найдем k такое, что p=ri+kq, p- простое P-битовое число и при этом p2 mod 3 для i{1,2}
Корректность Алгоритма Б:
Как только мы выбираем q7 mod 12, автоматически выполняется условие q1 mod 3 (Так как 71 mod 3 и 312). Из этого утверждения и квадратичного закона взаимности следует, что корни r1 и r2 существуют.
Чтобы проверить, что qp2p+1 снова рассмотрим p2p+1 для ri{1,2} и заметим, что p2p+1=ri2+2rikq+k2q2rikq+1=ri2ri+1+q(2rk+k2qk)=q(2rk+k2qk).Значит r1 и r2 -корни X2X+1 и, следовательно, qp2p+1.

Выбор подгруппы

В предыдущем разделе мы нашли размеры p и q конечного поля GF(p6) и мультипликативной подгруппы в GF(p6)*. Теперь следует найти подгруппу g в GF (p6)* для некоторых gGF(p6) таких, что g=q. Однако, необязательно искать явный элемент gGF(p6), достаточно найти элемент cGF(p2) такой, что c=Tr(g) для элемента gGF(p6) порядка q. Но при данном Tr(g), генератор g XTR-группы может быть найден путём нахождения корня F(Tr(g), X). Чтобы найти это c, рассмотрим свойство 5 F(c, X). Найдя такое c следует проверить, действительно ли оно порядка q, однако сначала нужно выбрать c\in GF(p²), такое, что F(c,\ X) — неприводимо. Простейший подход в том, чтобы выбирать cGF(p2)GF(p) случайным образом.

Утверждение: Для случайно выбранного cGF(p2) вероятность, что F(c, X)=X3cX2+cpX1GF(p2)[X] — неприводимо, больше 1/3.

Базовый алгоритм для поиска Tr(g):

  1. Выберем случайное cGF(p2)GF(p).
  2. Если F(c, X) — приводим, вернемся на первый шаг.
  3. Воспользуемся алгоритмом для поиска Sn(c). Найдем d=c(p2p+1)/q.
  4. Если d имеет порядок не равный q, вернемся на первый шаг.
  5. Пусть Tr(g)=d.

Данный алгоритм вычисляет элемент поля GF(p2) эквивалентный Tr(g) для некоторых gGF(p6) порядка q.[1]

Примеры

Протокол Диффи-Хеллмана

Предположим, у Алисы и Боба есть открытый XTR-ключ (p,q,Tr(g)) и они хотят сгенерировать общий закрытый ключ K.

  1. Алиса выбирает случайное число a такое, что 1<a<q2, вычисляет Sa(Tr(g))=(Tr(ga1),Tr(ga),Tr(ga+1))GF(p2)3 и посылает Tr(ga)GF(p2) Бобу.
  2. Боб получает Tr(ga) от Алисы, выбирает случайное b такое, что 1<b<q2, вычисляет Sb(Tr(g))=(Tr(gb1),Tr(gb),Tr(gb+1))GF(p2)3 и посылает Tr(gb)GF(p2) Алисе.
  3. Алиса получает Tr(gb) от Боба, вычисляет Sa(Tr(gb))=(Tr(g(a1)b),Tr(gab),Tr(g(a+1)b))GF(p2)3 и получает Tr(gab)GF(p2) — закрытый ключ K.
  4. Точно так же, Боб вычисляет Sb(Tr(ga))=(Tr(ga(b1)),Tr(gab),Tr(ga(b+1)))GF(p2)3 и получает Tr(gab)GF(p2) — закрытый ключ K.

Схема Эль-Гамаля

Предположим, у Алисы есть часть публичного ключа XTR: (p,q,Tr(g)). Алиса выбирает секретное целое число k и вычисляет и публикует Tr(gk). Получив публичный ключ Алисы (p,q,Tr(g),Tr(gk)), Боб может зашифровать сообщение M, предназначенное Алисе, используя следующий алгоритм:

  1. Боб выбирает случайное b такое, что 1<b<q2 и вычисляет Sb(Tr(g))=(Tr(gb1),Tr(gb),Tr(gb+1))GF(p2)3.
  2. Затем Боб вычисляетSb(Tr(gk))=(Tr(g(b1)k),Tr(gbk),Tr(g(b+1)k))GF(p2)3.
  3. Боб определяет симметричный ключ K основанный на Tr(gbk)GF(p2).
  4. Боб шифрует сообщение M ключом K, получая зашифрованное сообщение E.
  5. Пару (Tr(gb), E) Боб посылает Алисе.

Получив пару (Tr(gb), E), Алиса расшифровывает её следующим образом:

  1. Алиса вычисляет Sk(Tr(gb))=(Tr(gb(k1)),Tr(gbk),Tr(gb(k+1)))GF(p2)3.
  2. Алиса определяет симметричный ключ K основанный на Tr(gbk)GF(p2).
  3. Зная, что алгоритм шифрования сообщения — симметричный, Алиса ключом K расшифровывает E, получая исходное сообщение M.

Таким образом, сообщение передано.

Примечания

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

Шаблон:Криптосистемы с открытым ключом