Русская Википедия:Round5

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

Round5 — это постквантовая система шифрования с открытым ключом, основанная на общей задаче обучения с округлением (General Learning with Rounding (GLWR))[1]. Данная система является альтернативой для алгоритмов RSA и эллиптических кривых и предназначена для защиты от атак квантовыми компьютерами[2]. Round5 состоит из алгоритмов, предназначенных для реализаций механизма инкапсуляции ключей (key encapsulation mechanism (KEM)) и схемы шифрования с открытым ключом (public-key encryption (PKE)). Данные алгоритмы попадают под категорию криптография на решётках.

Round5 представляет собой слияние двух систем: Round2[3], основанная также на задаче GLWR, и HILA5Шаблон:Sfn, имеющая код исправления ошибок[1].

Введение

Если крупные квантовые компьютеры когда-либо будут построены, то они смогут взломать многие криптосистемы с открытым ключом, используемые в настоящее время. Это серьёзно подорвало бы конфиденциальность и целостность цифровых коммуникаций в Интернете. Целью пост-квантовой криптографии является разработка криптографических систем, которые защищены как от квантовых, так и от классических компьютеров и могут взаимодействовать с существующими протоколами связи и сетями[4].

Обозначения

  • Пусть <math>a

</math> — целое положительное число, тогда за <math>\mathbb{Z}_a

</math> обозначим набор чисел <math>\{0, 1, \cdots, a-1\}


</math>. Для набора <math>A

</math> через <math>a \xleftarrow[]{\$} A


</math> обозначим случайный и равновероятный выбор <math>a

</math> из <math>A

</math>.

  • Пусть <math>n+1

</math> — простое число. <math>\mathit{\Phi}_{n+1}(x)

</math> — циклотомический полином равный <math>x^n+x^{n-1}+\cdots+x+1 </math>. Многочлен <math>N_{n+1}(x)

</math> равен <math>x^{n+1}-1=

</math><math>\mathit{\Phi}_{n+1}(x)

</math><math>(x-1)

</math>.

</math> обозначим <math>\mathcal{R}_n </math>. <math>\mathcal{R}_{n,a}

</math> — это набор многочленов таких, что их степень меньше <math>n

</math> и их коэффициенты лежат в <math>\mathbb{Z}_a

</math>, а <math>\mathcal{R}_{n,a}^{b}

</math> — это множество таких векторов размерности <math> b

</math> (<math> b

</math> — положительное целое число), что каждая компонента любого вектора принадлежит <math>\mathcal{R}_{n,a}

</math>.

  • <math>\mathcal{R}_n

</math> называется троичным, если все его коэффициенты равны <math>0, 1</math> или <math>-1</math>.

  • Для любого элемента <math>\upsilon \in \mathcal{R}_n


</math> вес Хемминга определяется как число ненулевых коэффициентов. <math>\mathcal{H}_n(h)

</math> определяется как множество троичных полиномов степени меньше <math>n

</math> с весом Хемминга <math>h

</math>. В Round5 такие многочлены к тому же ещё являются сбалансированными и разреженными, то есть имеют ровно <math>h/2 </math> коэффициентов равных <math>+1</math> и столько же равных <math>-1</math> (сбалансированные), и при этом <math>h

</math> принимает фиксированное значение (разреженные).

  • <math>\{0,1\}^k</math> — это множество всех таких наборов длины <math>k</math>, состоящие из нулей и единиц.
  • Для рационального числа <math>x

</math> обозначим: <math>\lfloor x\rfloor

</math>— округление вниз до целого, а <math>\lfloor x \rceil

</math> — округление до ближайшего целого. Взятие остатка от деления обозначим как <math>\langle x\rangle_a</math>, то есть <math>\langle x\rangle_a = x\bmod a</math>[1][2].

Задача GLWR

Пусть <math>d, n, p, q</math> — положительные целые числа, такие что <math>q \geq p \geq 2 </math> и <math>n

</math> равняется <math>1</math> или <math>d</math>. <math>D_s

</math> является распределением вероятности по <math>\mathcal{R}_{n,q}^{d/n}

</math>. Выбор элемента <math>\mathbf s</math> из <math>\mathcal{R}_{n,q}^{d/n}

</math> в соответствии с распределением <math>D_s

</math> обозначим как <math>\mathbf s \leftarrow D_s</math>[1].

Версия поиска

Имеется <math>m</math> примеров формы <math>\left \langle \left \lfloor \frac{p}{q}\langle \mathbf a_i^T\mathbf s\rangle _{\mathit{\Phi}_{n+1}(x)} \right \rfloor \right \rangle_p </math>, где <math>\mathbf a_i \in \mathcal{R}_{n,q}^{d/n}</math> и <math>\mathbf s \leftarrow D_s</math> фиксирован, требуется найти <math>\mathbf s</math>[1].

Версия решения

Сложность данной версии заключается в различении равномерного распределения по <math>\mathcal{R}_{n,q}^{d/n}\times \mathcal{R}_{n,p}</math> и распределения <math>(\mathbf a_i, b_i) </math>, где <math>\mathbf a_i \xleftarrow[]{\$} \mathcal{R}_{n,q}^{d/n}

</math>, <math>\mathbf s \leftarrow D_s</math> фиксирован и <math>b_i = \left \langle \left \lfloor \frac{p}{q}\langle \mathbf a_i^T\mathbf s\rangle _{\mathit{\Phi}_{n+1}(x)} \right \rfloor \right \rangle_p

</math>[1].

Виды задачи GLWR

Ключевой особенностью Round5 является то, что её можно реализовать на основе таких задач как обучение с округлением (Learning with Rounding (LWR)), так и кольцевое обучение с округлением (Ring Learning with Rounding (RLWR)) единым способом, что приводит к уменьшению затрат на анализ и обслуживание кода[1].

Каждая из этих задач получается из задачи GLWR. Чтобы поставить задачу LWR, в GLWR нужно <math>n

</math> принять равной <math>1</math>, а RLWR — <math>n

</math> принять равной <math>d</math>[1].

Алгоритмы на основе LWR требуются в средах, где производительность не так важна по сравнению с безопасностью[1].

Напротив, по сравнению с LWR, в алгоритмах на основе RLWR вычисления более просты и эффективны. К тому же эти алгоритмы менее требовательны к полосе пропускания, поэтому они лучше подходят для тех сред, где накладываются более строгие требования к каналам передачи информации, например, там, где могут возникнуть трудности с фрагментацией сообщений или MTU слишком мал[1].

Основа Round5

Схема шифрования

Основой Round5 является схема шифрования r5_cpa_pke, надёжная в смысле IND-CPA. r5_cpa_pke похожа на схему шифрования Эль-Гамаля с шумом. Здесь приведены алгоритмы для задачи GLWR. Для того, чтобы получить алгоритмы для задач LWR или RLWR, нужно выбрать <math>n

</math> равной <math>1</math> или <math>d</math> соответственно[2][1].

Параметры схемы шифрования r5_cpa_pke: <math>n, d, h, p, q, t, b, \bar{n}, \bar{m}, \mu, f, \tau

</math> — целые положительные числа, <math>k</math> — параметр безопасности (длина сообщения в битах), <math>m(x)</math> — многочлен, коэффициенты которого являются сообщением и равны <math>0</math> или <math>1</math> (<math>m(x) = m_0 + m_1x + \cdots + m_{k-1}x^{k-1}</math>). <math>\bar{n} , \bar{m}</math> — число столбцов в секретных матрицах. Модули <math>p, q, t, b</math> являются степенями двойки, так что <math>b</math> делит <math>t</math>, <math>t</math> делит <math>p</math> и <math>p</math> делит <math>q</math>. Требуется, чтобы <math>\mu\leq n\cdot \bar{n} \cdot \bar{m} </math> и <math>\mu\geq k \cdot \log_2(b)</math>. <math>h

</math> — вес Хемминга многочленов, являющихся секретными. <math> \xi(x)</math> — многочлен <math>\mathit{\Phi}_{n+1}(x)

</math> или <math>N_{n+1}(x)

</math>. <math>\boldsymbol{J}</math> — это матрица, вся заполненная <math>1</math>[1][2].

Алгоритм создания ключа


Algorithm 1: r5_cpa_pke_keygen()
1. <math>\sigma \xleftarrow[]{\$} \{0,1\}^k

</math>

2. <math>\boldsymbol{A} = f_{d,n}^{(\tau)}(\sigma)


</math>

3. <math>sk \xleftarrow[]{\$} \{0,1\}^k

</math>

4. <math>\boldsymbol{S} = f_{S}(sk)

</math>

5. <math>\boldsymbol{B} = \left \langle \left \lfloor \frac{p}{q}(\langle \boldsymbol{A}\boldsymbol{S}\rangle _{\mathit{\Phi}_{n+1}(x)} + h_1\boldsymbol{J}) \right \rfloor \right \rangle_p

</math>

6. <math>pk = (\sigma, \boldsymbol{B})

</math>

7. return <math>(pk, sk)</math>
  1. <math>\sigma</math> равновероятно выбирается из множества <math>\{0,1\}^k</math>.
  2. На основе <math>\sigma</math> вычисляется открытая квадратная матрица <math>\boldsymbol{A}</math> размера <math>d/n\times d/n</math>, элементы которой принадлежат множеству <math>\mathcal{R}_{n,q}

</math> (в случае RLWR (<math>n=d</math>) это один многочлен, если LWR (<math>n=1

</math>) — матрица из элементов, лежащих в <math>\mathbb{Z}_q

</math>). Для этого применяется функция <math>f_{d,n}^{(\tau)}(\sigma)</math>, использующая детерминированный генератор случайных битов[5] и перестановки, определяемые параметром <math>\tau

</math>.

  1. Как и <math>\sigma</math>, секретный ключ <math>sk

</math> выбирается случайно из <math>\{0,1\}^k</math>.

  1. На основе <math>sk

</math> вычисляется секретная матрица <math>\boldsymbol{S}</math> размера <math>d/n\times \bar{n}</math>, элементы которой принадлежат множеству <math>\mathcal{H}_n(h)

</math> (в случае RLWR (<math>n=d</math>) это вектор, состоящий из троичных многочленов, если LWR (<math>n=1

</math>) — матрица, состоящая из <math>0, 1</math> и <math>-1</math>). Для этого используется функция <math>f_{S}(sk)</math>, использующая также детерминированный генератор случайных битов.

  1. Вычисляется матрица <math>\boldsymbol{B}</math> размера <math>d/n\times \bar{n}</math>, состоящая из элементов <math>\mathcal{R}_{n,p}

</math>, следующим образом:

    1. Элементы матрицы, равной произведению <math>\boldsymbol{A}</math> на <math>\boldsymbol{S}</math>, вычисляются по модулю <math>\mathit{\Phi}_{n+1}(x)

</math>. Затем к каждому элементу прибавляется постоянная округления <math>h_1=\frac{q}{2p}</math>.

    1. Каждый элемент умножается на дробь <math>\frac{p}{q}</math>.
    2. Коэффициенты всех многочленов полученной матрицы округляются в меньшую сторону до ближайшего целого и берутся по модулю <math>p</math>.
  1. Открытый ключ представляет собой набор из <math>\sigma</math> и <math>\boldsymbol{B}</math>[1][2].

Алгоритм шифрования


Algorithm 2: r5_cpa_pke_encrypt<math>(pk, m)</math>
1. <math>\boldsymbol{A} = f_{d,n}^{(\tau)}(\sigma)


</math>

2. <math>\boldsymbol{R} = f_{R}(\rho)

</math>

3. <math>\boldsymbol{U} = \left \langle \left \lfloor \frac{p}{q}(\langle \boldsymbol{A}^T\boldsymbol{R}\rangle _{\mathit{\Phi}_{n+1}(x)} + h_2\boldsymbol{J}) \right \rfloor \right \rangle_p

</math>

4. <math>\tilde{\boldsymbol{U}} = \boldsymbol{U}^T

</math>

5. <math>\boldsymbol{\upsilon} = \left \langle \left \lfloor \frac{t}{p}(\text{Sample}_\mu\langle \boldsymbol{B}^T\boldsymbol{R}\rangle _{\xi(x)} + h_2\boldsymbol{J}) \right \rfloor + \frac{t}{b}\text{xef}\_\text{compute}_{k,f}(m)\right \rangle_t

</math>

6. <math>ct = (\tilde{\boldsymbol{U}}, \boldsymbol{v})

</math>

7. return <math>ct

</math>

  1. Так же, как и при вычислении ключей, находится матрица <math>\boldsymbol{A}</math>.
  2. Вводится элемент множества <math>\{0,1\}^k</math> — <math>\rho</math>. На его основе при помощи функции <math>f_R(\rho)</math> вычисляется секретная матрица <math>\boldsymbol{R}</math> размера <math>d/n\times \bar{m}</math>, элементы которой принадлежат множеству <math>\mathcal{H}_n(h)

</math> (в случае RLWR (<math>n=d</math>) это вектор, состоящий из троичных многочленов, если LWR (<math>n=1

</math>) — матрица, состоящая из <math>0, 1</math> и <math>-1</math>).

  1. Используя матрицы <math>\boldsymbol{A}</math>, <math>\boldsymbol{R}</math> и постоянную округления <math>h_2 = \frac{q}{2z}</math> (<math>z = \max(p, \tfrac{tq}{p})</math>), вычисляется матрица <math>\boldsymbol{U}</math> аналогично как в алгоритме создания ключей.
  2. Транспонированная <math>\boldsymbol{U}</math> есть первая компонента шифротекста.
  3. Вторая компонента шифротекста — вектор <math>\boldsymbol{v}</math>, элементы которого лежат в <math>\mathbb{Z}_t

</math>. Поскольку не все компоненты <math>\boldsymbol{v}</math> необходимы для шифрования <math>k</math>-битового сообщения <math>m</math>, используется функция <math>\text{Sample}_\mu

</math>.

    1. Если <math>n=d</math>, то <math>\langle \boldsymbol{B}^T\boldsymbol{R}\rangle _{\xi(x)}

</math> — это многочлен и <math>\text{Sample}_\mu

</math> принимает его на вход, а на выходе выдаёт набор всех коэффициентов, соответствующих членам со степенью меньших <math>\mu</math> : <math>c_0 + c_1x + \cdots + c_{\mu-1}x^{\mu-1} + c_{\mu}x^{\mu} + \cdots + c_nx^n \rightarrow (c_0, c_1, \cdots ,c_{\mu -1})</math>.

    1. Если <math>n=1

</math>, то <math>\langle \boldsymbol{B}^T\boldsymbol{R}\rangle _{\xi(x)}

</math> — это матрица <math>M

</math>, состоящая из целых чисел и <math>\text{Sample}_\mu

</math> выдаёт первые <math>\mu</math> чисел этой матрицы:<math> \overbrace{\underbrace{ M_{0,0}, M_{0,1}, \cdots, M_{0,\bar{n}-1}}_{\text{нулевая строка}} ,\cdots, \underbrace{ M_{i-1,0}, M_{i-1,1}, \cdots, M_{i-1,j-1}}_{i-1\text{-ая строка}}}^{\mu \, \text {коэффициентов}}

</math>, где <math>\mu = i\bar{n} + j

</math>.

    1. Получаем, что <math>\boldsymbol{v}</math> содержит только <math>\mu</math> компонент.
  1. Таким образом, получаем шифротекст <math>ct = (\tilde{\boldsymbol{U}}, \boldsymbol{v})

</math>[1][2].

Использование <math>\text{Sample}_\mu

</math> делает шифрование и дешифрование более эффективными, поскольку в зашифрованном тексте необходимо вычислять только коэффициенты <math>\mu</math> вместо всех <math>n

</math>[1][2].

Так же для уменьшение вероятности ошибок применяются функции кодирования <math>\text{xef}\_\text{compute}_{k,f}(m(x))

</math> при шифровании и декодирования<math>\text{xef}\_\text{correct}_{k,f}

</math> при дешифровании . Функция <math>\text{xef}\_\text{compute}_{k,f}(m(x))

</math> преобразует многочлен <math>m(x)</math> в набор двоичных коэффициентов размера <math>\mu</math>. Затем этот набор складывается с набором ошибок <math>e = (e_0, \cdots, e_{\mu-1}) </math>, где каждый <math>e_i</math> равен <math>0</math> или <math>1</math>, причём количество единиц в наборе ошибок не должно быть больше чем <math>f</math> для однозначного декодирования[1][2].

<math>\text{xef}\_\text{correct}_{k,f}(\text{xef}\_\text{compute}_{k,f}(m(x)) + e) = m

</math>[1][2].

Алгоритм дешифрования

Algorithm 2: r5_cpa_pke_decrypt<math>(sk, ct)</math>
1. <math>

\boldsymbol{v}_p =\frac{p}{t}\boldsymbol{v} </math>

2. <math>\boldsymbol{S} = f_{S}(sk)

</math>

3. <math>

\boldsymbol{U} = \tilde{\boldsymbol{U}}^T

</math>

4. <math>\boldsymbol{y} = \left \langle \left \lfloor \frac{b}{p}(\boldsymbol{v}_p - \text{Sample}_\mu\langle \boldsymbol{S}^T(\boldsymbol{U} + h_4\boldsymbol{J})\rangle _{\xi(x)} + h_3\boldsymbol{J}) \right \rfloor \right

\rangle_{b}

</math>

5. <math>\hat{m} = \text{xef}\_ \text{correct}_{k,f}(\boldsymbol{y})



</math>

6. return <math>\hat{m}


</math>

  1. Вычисляется вектор <math>\boldsymbol{v}_p



</math>.

  1. На основе закрытого ключа находится секретная матрица <math>\boldsymbol{S}</math> такая же, как в алгоритме создания ключей.
  2. Транспонированием <math>\boldsymbol{\tilde{U}}

</math> находится матрица <math>\boldsymbol{U}</math>, вычисленная в алгоритме шифрования.

  1. Происходит дешифрование сообщения. <math>h_3 = \frac{p}{2t} + \frac{p}{4} - \frac{q}{2p}

</math>, <math>h_4 = \frac{q}{2p} - \frac{q}{2z}

</math>.

  1. Исправляются ошибки. Таким образом получаем исходное сообщение <math>\hat{m}

</math>[1][2].

Достоинства Round5

Округление позволяет избежать дополнительного создания случайных величин — шума. Генерация шума может быть уязвимостью для атак по побочным каналам. Таким образом, отсутствие необходимости создания шума является дополнительным преимуществом[1].

Так как секретные ключи в Round5 являются разреженными, троичными и сбалансированными, снижается вероятность ошибок при расшифровки и ускоряются вычисления. Последнему факту также помогает то, что ненулевые коэффициенты многочленов равны либо +1, либо −1, что подразумевает, что умножения могут быть выполнены с использованием только сложений и вычитаний[2].

Благодаря тому, что модули <math>p, q, t, b</math> являются степенями двойки, упрощается реализация функции округления, поскольку её можно реализовать, отбрасывая младшие биты. Аналогично, модульные вычисления могут быть реализованы путём отбрасывания старших битов[1].

Возможное применение

Спектр применения системы Round5 широк. Она может быть использована как в сфере интернет вещей, так и для систем с высоким уровнем секретности. Это достигается тем, что для неё можно легко и точно выбрать параметры, например <math>n </math>, <math>\tau

</math>, <math>f </math> и <math> \xi(x)</math>[2].

Примечания

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

Литература

Ссылки