XTR (скорочення від ECSTR — «Efficient and Compact Subgroup Trace Representation») — алгоритм шифрування з відкритим ключем, який базується на обчислювальній складності задачі дискретного логарифмування. Перевагами цього алгоритму перед іншими, що використовують цю ідею, є більша швидкість і менший розмір ключа.
Алгоритм використовує генератор
відносно малої підгрупи порядку
(
— просте) підгрупи
. За правильного вибору
, дискретне логарифмування в групі, породженій
, має таку ж обчислювальну складність, що й у
. XTR використовує арифметику
замість
, забезпечуючи таку ж захищеність, але з меншими витратами на обчислення і передавання даних.
Алгоритм працює в скінченному полі
. Розглянемо групу порядку
, і її підгрупу порядку q, де p — просте число, таке, що інше досить велике просте число q є дільником
. Група порядку q називається XTR-підгрупою. Ця циклічна група
є підгрупою
і має генератор g.
Арифметичні операції в ![{\displaystyle GF(p^{2})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f01a0551bbb021377c029ab90875ae4e276ce2c0)
[ред. | ред. код]
Нехай p — просте число, таке, що p ≡ 2 mod 3, а p 2 — p + 1 ділиться на досить велике просте q. Оскільки p 2 ≡ 1 mod 3, p породжує
. Таким чином, коловий многочлен[прояснити]
є таким, що не переводиться в
. Отже, корені
і
утворюють оптимальний нормальний базис
над
і
![{\displaystyle GF(p^{2})\cong \{x_{1}\alpha +x_{2}\alpha ^{p}:x_{1},x_{2}\in GF(p)\}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6f215f65da37bd3c52be9ba6b188371acefd480f)
З урахуванням p ≡ 2 mod 3:
![{\displaystyle GF(p^{2})\cong \{y_{1}\alpha +y_{2}\alpha ^{2}:\alpha ^{2}+\alpha +1=0,y_{1},y_{2}\in GF(p)\}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/3309a0976fe2a0c0d3e1cc06eda98e175ad5d058)
Лема. Вартість арифметичних операцій така:
- Обчислення xp не вимагає множення
- Обчислення x2 вимагає двох операцій множення в
![{\displaystyle GF(p)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/570487c57237d6c85fa7643a9a01b5b5cffae1ec)
- Обчислення xy вимагає трьох операцій множення в
![{\displaystyle GF(p)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/570487c57237d6c85fa7643a9a01b5b5cffae1ec)
- Обчислення xz-yzp вимагає чотирьох операцій множення в
.[1]
Використання слідів в ![{\displaystyle GF(p^{2})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f01a0551bbb021377c029ab90875ae4e276ce2c0)
[ред. | ред. код]
Елементами, сполученими з
в
є: сам
і
, а їх сума — слід
.
![{\displaystyle Tr(h)=h+h^{p^{2}}+h^{p^{4}}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d78393db27d862effe291383dfa5d4053f25e9c1)
Крім того:
![{\displaystyle {\begin{aligned}Tr(h)^{p^{2}}&=h^{p^{2}}+h^{p^{4}}+h^{p^{6}}\\&=h+h^{p^{2}}+h^{p^{4}}\\&=Tr(h)\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cd36cee33196592fafab8e95608174242aec2f1f)
Розглянемо генератор
XTR-групи порядку
, де
— просте число. Оскільки
— підгрупа групи порядку
, то
. Крім того,
![{\displaystyle p^{2}=p-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/fbad0e078c7a76fd9ae1593abf254a32e90bf8c3)
і
.
Таким чином,
![{\displaystyle {\begin{aligned}Tr(g)&=g+g^{p^{2}}+g^{p^{4}}\\&=g+g^{p-1}+g^{-p}.\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9e1bbb755cdf98a3ab717e108109fb785a2cc723)
Відзначимо також, що зв'язаним до елементу
є
, тобто,
має норму рівну 1. Ключовою особливістю XTR є те, що мінімальний многочлен
в
![{\displaystyle (x-g)\!\ (x-g^{p-1})(x-g^{-p})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/af5272bd70ce58a75d43914d14793086597dd514)
спрощується до
![{\displaystyle x^{3}-Tr(g)\!\ x^{2}+Tr(g)^{p}x-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/353b7215dd9b35ffa0dc96b73288a5540a2caf1f)
Іншими словами, пов'язані з
елементи, як корені мінімального многочлена в
, повністю визначаються слідом
. Аналогічні міркування вірні для будь-якого степеня
:
![{\displaystyle x^{3}-Tr(g^{n})\!\ x^{2}+Tr(g^{n})^{p}x-1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7d42f4a2133dd42800f24676f7f0ed0d06becff3)
- цей многочлен визначається слідом
.
Ідея алгоритму в тому, щоб замінити
на
, тобто обчислювати
за
замість
за
. Однак для того, щоб метод був ефективним, потрібен спосіб швидко отримувати
за наявним
.
Алгоритм швидкого обчислення
за
[2]
[ред. | ред. код]
Означення: Для кожного
з
визначимо:
![{\displaystyle F(c,X)=X^{3}-cX^{2}+c^{p}X-1\in GF(p^{2})[X].}](https://wikimedia.org/api/rest_v1/media/math/render/svg/157e63c2e328d04132b970ef97e484c700987881)
Означення: Нехай
— корені
в
, а
. Позначимо:
![{\displaystyle c_{n}=h_{0}^{n}+h_{1}^{n}+h_{2}^{n}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7cbe6613affab8da1fc6033b603e2c4772b1b71e)
Властивості
і
:
![{\displaystyle c=c_{1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/22c82bf20f596eec86e6bc1994adc4356d3d4ff9)
![{\displaystyle c_{-n}=c_{np}=c_{n}^{p}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5631b4cf1bd1a7c94a31a6c03f3bb0b4940d3000)
для ![{\displaystyle n\in \mathbb {Z} }](https://wikimedia.org/api/rest_v1/media/math/render/svg/3c1cf6a513f2062531d95dbb198944936f312982)
для ![{\displaystyle u,v\in \mathbb {Z} }](https://wikimedia.org/api/rest_v1/media/math/render/svg/2e99738d796fdb118d57000246e113d661b71529)
- або всі
мають порядок, який є дільником
і
, або всі
— в полі
. Зокрема,
— є таким, що не переводиться тоді і тільки тоді, коли його корені мають порядок, який є дільником
і
.
звідне в полі
тоді і тільки тоді, коли ![{\displaystyle c_{p+1}\in GF(p)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/acffbe88032e29c8a9483564c7fea0b8e3f3e755)
Лема: Нехай дано
.
- обчислення
вимагає двох операцій множення в полі
.
- обчислення
вимагає чотирьох операцій множення в полі
.
- обчислення
вимагає чотирьох операцій множення в полі
.
- обчислення
вимагає чотирьох операцій множення в полі
.
Визначення: Нехай
.
Алгоритм для обчислення
при заданих
і ![{\displaystyle c}](https://wikimedia.org/api/rest_v1/media/math/render/svg/86a67b81c2de995bd608d5b2df50cd8cd7d92455)
[ред. | ред. код]
- Якщо
, то алгоритм застосовується для
і
, потім використовується властивість 2 для отримання кінцевого результату.
- Якщо
,
.
- Якщо
,
.
- Якщо
, скористаємося виразами для
і
, щоб знайти
і відповідно,
.
- Якщо
, щоб обчислити
, введемо
![{\displaystyle {\bar {S}}_{i}(c)=S_{2i+1}(c)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f38119a765a8c122e6815679a61109c40a1f6e39)
- і
якщо
непарне і
якщо парне. Покладемо
і знайдемо
, використовуючи твердження, і
. Нехай, надалі,
![{\displaystyle m=\sum _{j=0}^{r}m_{j}2^{j}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d0d3c81b03d5f974d02fd3d6671a194559c5d8b8)
- де
і
. Для
послідовно виконаємо таке:
- Якщо
, скористаємося
щоб знайти
.
- Якщо
, скористаємося
щоб знайти
.
- Замінимо
на
.
По завершенні ітерацій,
, а
. Якщо n — парне, скористаємося
щоб знайти
.
Щоб скористатися перевагами подання елементів груп у вигляді їх слідів і забезпечити достатню захищеність даних, необхідно знайти прості
і
, де
— характеристика поля
, причому
, а
— розмір підгрупи і дільник
. Позначимо як
і
розміри
і
в бітах. Щоб досягти рівня безпеки, який надає, наприклад, RSA з довжиною ключа 1024 біти, потрібно вибрати
таким, що
, тобто
а
може бути близько 160. Перший алгоритм, який дозволяє обчислити такі прості
і
— Алгоритм А.
Алгоритм А
- Знайдемо
таке, що число
— просте число довжиною в
біт.
- Знайдемо
таке, що число
— просте довжиною
біт, а також
.
- Коректність Алгоритму А:
- Необхідно перевірити лише те, що
, оскільки всі решта властивостей очевидно виконані через специфіку вибору
і
.
- Неважко помітити, що
, отже
.
Алгоритм А дуже швидкий, однак може бути небезпечним, оскільки вразливий щодо атаки з використанням решета числового поля.
Цього недоліку позбавлений повільніший Алгоритм Б.
Алгоритм Б
- Виберемо просте число
довжиною в
біт, таке, що
.
- Знайдемо корені
і ![{\displaystyle r_{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4cbe9b0b294fdd6fadbf9a7249813f016dcbc44f)
.
- Знайдемо
таке, що
,
— просте
-бітове число і при цьому
для ![{\displaystyle i\in \{1,2\}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5ebe15d55dc04257a7634ea5447371b6f8c1c205)
- Коректність Алгоритму Б:
- Як тільки ми вибираємо
, автоматично виконується умова
(оскільки
і
). З цього твердження і квадратичного закону взаємності випливає, що корені
і
існують.
- Щоб перевірити, що
знову розглянемо
для
і зауважимо, що
. Тобто
і
— корені
і, отже,
.
У попередньому розділі ми знайшли розміри
і
скінченного поля
і мультиплікативної підгрупи в
. Тепер слід знайти підгрупу
в
для деяких
таких, що
. Однак, необов'язково шукати явний елемент
, досить знайти елемент
такий, що
для елемента
порядку
. Але при цьому
, генератор
XTR-групи може бути знайдений шляхом знаходження кореня
. Щоб знайти це
, розглянемо властивість 5
. Знайшовши таке
слід перевірити, чи дійсно воно має порядок
, проте спочатку потрібно вибрати
, таке, що
— незвідне. Найпростіший підхід в тому, щоб вибирати
випадковим чином.
Лема: Для випадково вибраного
ймовірність, що
— є незвідним, більша 1/3.
Базовий алгоритм для пошуку
:
- Виберемо випадкове
.
- Якщо
— звідне, повернемося на перший крок.
- Скористаємося алгоритмом для пошуку
. Знайдемо
.
- Якщо
має порядок не рівний
, повернемося на перший крок.
- Нехай
.
Даний алгоритм обчислює елемент поля
еквівалентний
для деяких
порядку
.[1]
Припустимо, Аліси і Боб мають відкритий XTR-ключ
і вони хочуть згенерувати спільний закритий ключ
.
- Аліса вибирає випадкове число
таке, що
, обчислює
і посилає
Бобу.
- Боб отримує
від Аліси, вибирає випадкове
таке, що
, обчислює
і посилає
Алісі.
- Аліса отримує
від Боба, обчислює
і отримує
— закритий ключ
.
- Так само, Боб обчислює
і отримує
— закритий ключ
.
Припустимо, Аліса має частину публічного ключа XTR:
. Аліса вибирає секретне ціле число
і обчислює і публікує
. Отримавши публічний ключ Аліси
, Боб може зашифрувати повідомлення
, Призначене Алісі, використовуючи такий алгоритм:
- Боб вибирає випадкове
таке, що
і обчислює
.
- Потім Боб обчислює
.
- Боб визначає симетричний ключ
на основі
.
- Боб шифрує повідомлення
ключем
, отримуючи зашифроване повідомлення
.
- Пару
Боб посилає Алісі.
Отримавши пару
, Аліса розшифровує її таким чином:
- Аліса обчислює
.
- Аліса визначає симетричний ключ
на основі
.
- Знаючи, що алгоритм шифрування повідомлення — симетричний, Аліса ключем
розшифровує
, отримуючи початкове повідомлення
.
Таким чином, повідомлення надіслано.
- ↑ а б Lenstra, Arjen K.; Verheul, Eric R. . [{{{archiveurl}}} Архівовано] з джерела 15 квітня 2006. Процитовано 2015-12-18.
- ↑ Lenstra, Arjen K.; Verheul, Eric R. The XTR public key system.