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). Рассмотрим группу порядка p2−p+1, и её подгруппу порядка q, где p — простое число, такое, что другое достаточно большое простое число q является делителем p2−p+1. Группа порядка q называется XTR-подгруппой. Эта циклическая группа ⟨g⟩ является подгруппой GF(p6)∗ и имеет генератор g.

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

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

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

С учетом p ≡ 2 mod 3:

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

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

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

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

Элементами, сопряженными с h∈GF(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⟩ — подгруппа группы порядка p2−p+1, то q∣p2−p+1. Кроме того,

p2=p−1

и

p4=(p−1)2=p2−2p+1=−p.

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

Tr(g)=g+gp2+gp4=g+gp−1+g−p.

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

(x−g) (x−gp−1)(x−g−p)

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

x3−Tr(g) x2+Tr(g)px−1

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

x3−Tr(gn) x2+Tr(gn)px−1

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

Идея алгоритма в том, чтобы заменить gn∈GF(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)=X3−cX2+cpX−1∈GF(p2)[X].

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

cn=h0n+h1n+h2n.

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

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

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

  1. Вычисление c2n=cn2−2cnp требует двух операций произведения в поле GF(p).
  2. Вычисление cn+2=cn+1⋅c−cp⋅cn+cn−1 требует четырёх операций произведения в поле GF(p).
  3. Вычисление c2n−1=cn−1⋅cn−cp⋅cnp+cn+1p требует четырёх операций произведения в поле GF(p).
  4. Вычисление c2n+1=cn+1⋅cn−c⋅cnp+cn−1p требует четырёх операций произведения в поле GF(p).

Определение: Пусть Sn(c)=(cn−1,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,c2−2cp).
  • При n=2, воспользуемся выражениями для cn+2=cn+1⋅c−cp⋅cn+cn−1 и S1(c), чтобы найти c3 и, соответственно, S2(c).
  • При n>2, чтобы вычислить Sn(c), введем
S¯i(c)=S2i+1(c)
и m¯=n если не n нечетно и m¯=n−1 если четно. Положим m¯=2m+1,k=1 и найдем S¯k(c)=S3(c), используя Утверждение, и S2(c). Пусть, в дальнейшем,
m=∑j=0rmj2j
где mj∈0,1 и mr=1. Для j=r−1,r−2,...,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), причем p≡2 mod 3, а q — размер подгруппы и делитель p2−p+1. Обозначим как P и Q размеры p и q в битах. Чтобы достичь уровня безопасности, который обеспечивает, к примеру, RSA с длиной ключа в 1024 бита, требуется выбрать P таким, что 6P>1024, то есть P≈170 а Q может быть около 160. Первый алгоритм, который позволяет вычислить такие простые p и q — Алгоритм А.

Алгоритм А

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

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

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

Алгоритм Б

  1. Выберем простое число q длиной в Q бит, такое, что q≡7 mod 12.
  2. Найдем корни r1 и r2 X2−X+1 mod q.
  3. Найдем k∈ℤ такое, что p=ri+k⋅q, p- простое P-битовое число и при этом p≡2 mod 3 для i∈{1,2}
Корректность Алгоритма Б:
Как только мы выбираем q≡7 mod 12, автоматически выполняется условие q≡1 mod 3 (Так как 7≡1 mod 3 и 3∣12). Из этого утверждения и квадратичного закона взаимности следует, что корни r1 и r2 существуют.
Чтобы проверить, что q∣p2−p+1 снова рассмотрим p2−p+1 для ri∈{1,2} и заметим, что p2−p+1=ri2+2rikq+k2q2−ri−kq+1=ri2−ri+1+q(2rk+k2q−k)=q(2rk+k2q−k).Значит r1 и r2 -корни X2−X+1 и, следовательно, q∣p2−p+1.

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

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

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

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

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

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

Примеры

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

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

  1. Алиса выбирает случайное число a∈ℤ такое, что 1<a<q−2, вычисляет Sa(Tr(g))=(Tr(ga−1),Tr(ga),Tr(ga+1))∈GF(p2)3 и посылает Tr(ga)∈GF(p2) Бобу.
  2. Боб получает Tr(ga) от Алисы, выбирает случайное b∈ℤ такое, что 1<b<q−2, вычисляет Sb(Tr(g))=(Tr(gb−1),Tr(gb),Tr(gb+1))∈GF(p2)3 и посылает Tr(gb)∈GF(p2) Алисе.
  3. Алиса получает Tr(gb) от Боба, вычисляет Sa(Tr(gb))=(Tr(g(a−1)b),Tr(gab),Tr(g(a+1)b))∈GF(p2)3 и получает Tr(gab)∈GF(p2) — закрытый ключ K.
  4. Точно так же, Боб вычисляет Sb(Tr(ga))=(Tr(ga(b−1)),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<q−2 и вычисляет Sb(Tr(g))=(Tr(gb−1),Tr(gb),Tr(gb+1))∈GF(p2)3.
  2. Затем Боб вычисляетSb(Tr(gk))=(Tr(g(b−1)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(k−1)),Tr(gbk),Tr(gb(k+1)))∈GF(p2)3.
  2. Алиса определяет симметричный ключ K основанный на Tr(gbk)∈GF(p2).
  3. Зная, что алгоритм шифрования сообщения — симметричный, Алиса ключом K расшифровывает E, получая исходное сообщение M.

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

Примечания

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

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