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, а p 2 — p + 1 ділиться на досить велике просте q. Оскільки p 21 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 і r2X2X+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, проте спочатку потрібно вибрати cGF(p2), таке, що 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.

Таким чином, повідомлення надіслано.

Примітки

Шаблон:Reflist

Шаблон:Асиметричні криптосистеми