<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on kenji.blog</title><link>http://kenji.blog/ru/categories/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 21:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Математическая интуиция криптографии на решетках (Lattice-based cryptography)</title><link>http://kenji.blog/ru/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post Математическая интуиция криптографии на решетках (Lattice-based cryptography)" />&lt;h1 id="1-введение-рассвет-постквантовой-криптографии-pqc-и-расцвет-криптографии-на-решетках">1. Введение: Рассвет постквантовой криптографии (PQC) и расцвет криптографии на решетках
&lt;/h1>&lt;p>Цифровая инфраструктура современного общества опирается на технологии криптографии с открытым ключом, такие как RSA и криптография на эллиптических кривых (ECC). Эти методы шифрования основывают свою безопасность на математической сложности таких задач, как &amp;ldquo;факторизация целых чисел&amp;rdquo; и &amp;ldquo;проблема дискретного логарифма&amp;rdquo;, которые, как считается, не могут быть эффективно решены (требуют экспоненциального времени) классическими компьютерами.&lt;/p>
&lt;p>Однако &amp;ldquo;алгоритм Шора&amp;rdquo;, опубликованный Питером Шором (Peter Shor) в 1994 году, потряс криптографический мир. Этот алгоритм математически доказал, что когда будут созданы крупномасштабные квантовые компьютеры, они смогут решать проблемы факторизации и дискретного логарифма за полиномиальное время. Это означает, что широко используемая сегодня криптография с открытым ключом в будущем станет полностью уязвимой для расшифровки.&lt;/p>
&lt;p>Чтобы противостоять этой &amp;ldquo;квантовой угрозе&amp;rdquo; (Quantum Threat), возникла острая необходимость в исследовании новых методов шифрования, которые трудно взломать даже с помощью квантовых компьютеров. Эта область называется &amp;ldquo;постквантовой криптографией&amp;rdquo; (Post-Quantum Cryptography: PQC).&lt;/p>
&lt;p>В PQC существует несколько перспективных кандидатов, таких как криптография на основе хешей, криптография на основе кодов, многомерная полиномиальная криптография и криптография на основе изогений. Однако &amp;ldquo;криптография на решетках&amp;rdquo; (Lattice-based cryptography) в настоящее время привлекает наибольшее внимание и является центральным элементом процесса стандартизации PQC Национальным институтом стандартов и технологий США (NIST). По сравнению с другими методами, криптография на решетках обладает чрезвычайно высокой скоростью шифрования и дешифрования, а также выдающейся особенностью: она имеет очень сильное доказательство безопасности в криптографии — сведение от &amp;ldquo;сложности в худшем случае&amp;rdquo; (Worst-case complexity) к &amp;ldquo;сложности в среднем случае&amp;rdquo; (Average-case complexity).&lt;/p>
&lt;p>В этой статье мы подробно рассмотрим криптографию на решетках, начиная с математического определения &amp;ldquo;решетки&amp;rdquo; (Lattice), которая является ее основой. Мы обсудим сложные задачи на решетках, такие как SVP (задача поиска кратчайшего вектора) и CVP (задача поиска ближайшего вектора), а также проблему &amp;ldquo;LWE (Learning With Errors)&amp;rdquo;, которая является сердцем современной криптографии на решетках. Будут представлены математические формулы, геометрическая интуиция и конкретные числовые примеры.&lt;/p>
&lt;h1 id="2-математическое-определение-решетки-lattice-и-геометрическая-интуиция">2. Математическое определение решетки (Lattice) и геометрическая интуиция
&lt;/h1>&lt;h2 id="21-векторные-пространства-и-решетки">2.1 Векторные пространства и решетки
&lt;/h2>&lt;p>В математике &amp;ldquo;решетка&amp;rdquo; (Lattice) — это множество дискретных точек, регулярно расположенных в $n$-мерном действительном векторном пространстве $\mathbb{R}^n$. Оно похоже на векторное пространство (Vector Space), изучаемое в линейной алгебре, но есть одно решающее отличие. В то время как векторное пространство — это непрерывное пространство, представленное линейными комбинациями базисных векторов с &amp;ldquo;действительными коэффициентами&amp;rdquo;, решетка — это дискретное пространство, представленное линейными комбинациями базисных векторов с &amp;ldquo;целыми коэффициентами&amp;rdquo;.&lt;/p>
&lt;p>Дадим строгое математическое определение. Рассмотрим $n$ ($n \le m$) линейно независимых векторов $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ в $m$-мерном действительном векторном пространстве $\mathbb{R}^m$. Пусть матрица, содержащая эти векторы в качестве столбцов, будет $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$. Эта матрица $B$ называется &amp;ldquo;базисом&amp;rdquo; (Basis) решетки.&lt;/p>
&lt;p>Решетка $\mathcal{L}(B)$, порожденная этим базисом $B$, определяется следующим образом:&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>Важно отметить, что коэффициенты $x_i$ ограничены целыми числами $\mathbb{Z}$, а не действительными числами $\mathbb{R}$. В результате образуется &amp;ldquo;множество дискретных точек&amp;rdquo;, подобных равномерно расположенным перекресткам, а не непрерывное пространство с бесконечным множеством точек.&lt;/p>
&lt;h2 id="22-геометрический-образ">2.2 Геометрический образ
&lt;/h2>&lt;p>Рассмотрим пример в двумерной плоскости $\mathbb{R}^2$. Если мы выберем в качестве базисных векторов $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ и $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$, то порожденная ими решетка будет представлять собой множество всех целочисленных координат $(x, y) \in \mathbb{Z}^2$ на координатной плоскости. Это самая простая &amp;ldquo;квадратная решетка&amp;rdquo;.&lt;/p>
&lt;p>Однако решетки не всегда ортогональны. Например, если мы рассмотрим базис $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ и $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$, то порожденные точки будут напоминать пересечения диагонально искаженной сетки.&lt;/p>
&lt;h2 id="23-неоднозначность-базиса-и-унимодулярные-преобразования">2.3 Неоднозначность базиса и унимодулярные преобразования
&lt;/h2>&lt;p>Существует важное свойство, касающееся основы безопасности криптографии на решетках: &amp;ldquo;Существует бесконечное количество базисов, порождающих одну и ту же решетку&amp;rdquo;.&lt;/p>
&lt;p>Например, базис $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$, упомянутый ранее, порождает решетку $\mathbb{Z}^2$. Базис $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$ порождает абсолютно ту же самую решетку $\mathbb{Z}^2$.&lt;/p>
&lt;p>Необходимым и достаточным условием того, что базис $B$ и другой базис $B'$ порождают одну и ту же решетку, является существование матрицы с целочисленными элементами $U \in \mathbb{Z}^{n \times n}$, определитель которой $\det(U) = \pm 1$, так что:
&lt;/p>
$$ B' = B U $$
&lt;p>
Такая матрица $U$ называется &amp;ldquo;унимодулярной матрицей&amp;rdquo; (Unimodular matrix).&lt;/p>
&lt;p>Основная идея применения в криптографии состоит в том, чтобы использовать &amp;ldquo;хороший базис&amp;rdquo; (почти ортогональный, состоящий из коротких векторов) в качестве секретного ключа, и &amp;ldquo;плохой базис&amp;rdquo; (состоящий из очень длинных векторов, сильно скошенных друг относительно друга) в качестве открытого ключа. Вычислить хороший базис из плохого становится крайне сложно по мере увеличения размерности. В этом заключается базовая интуиция криптографии на решетках.&lt;/p>
&lt;h1 id="3-вычислительно-сложные-задачи-на-решетках">3. Вычислительно сложные задачи на решетках
&lt;/h1>&lt;p>Безопасность криптографии на решетках зависит от сложности решения определенных математических задач на решетках. Здесь мы представим две самые фундаментальные и известные проблемы.&lt;/p>
&lt;h2 id="31-задача-поиска-кратчайшего-вектора-shortest-vector-problem-svp">3.1 Задача поиска кратчайшего вектора (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>SVP — это самая классическая и известная задача в теории решеток.&lt;/p>
&lt;p>&lt;strong>Определение (SVP):&lt;/strong>
Дан произвольный базис решетки $B$. Найдите в решетке $\mathcal{L}(B)$ ненулевой вектор $\mathbf{v}$, евклидова норма (длина) которого минимальна.&lt;/p>
&lt;p>Математически это задача поиска вектора $\mathbf{v}$, такого что достигается минимум $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$. Эта минимальная длина обозначается как $\lambda_1(\mathcal{L})$ и называется &amp;ldquo;первым последовательным минимумом решетки&amp;rdquo;.&lt;/p>
&lt;p>В низких измерениях, таких как 2D или 3D, можно нарисовать график и визуально найти самый короткий вектор, или эффективно решить задачу с помощью алгоритма редукции решетки Гаусса. Однако известно, что когда размерность $n$ достигает сотен или тысяч, точное решение SVP является NP-трудным.&lt;/p>
&lt;p>В реальной криптографии используется приближенная SVP ($\gamma$-SVP), которая находит &amp;ldquo;приближенно короткий вектор&amp;rdquo;, а не строго кратчайший вектор. Когда коэффициент аппроксимации $\gamma$ полиномиального размера, эта проблема все еще считается чрезвычайно сложной.&lt;/p>
&lt;h2 id="32-задача-поиска-ближайшего-вектора-closest-vector-problem-cvp">3.2 Задача поиска ближайшего вектора (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>CVP также является чрезвычайно важной задачей в криптографии на решетках.&lt;/p>
&lt;p>&lt;strong>Определение (CVP):&lt;/strong>
Дан произвольный базис решетки $B$ и любой целевой вектор $\mathbf{t} \in \mathbb{R}^m$ в пространстве (не обязательно являющийся точкой решетки). Найдите точку решетки $\mathbf{v} \in \mathcal{L}(B)$, ближайшую к $\mathbf{t}$.&lt;/p>
&lt;p>Математически это задача поиска точки решетки $\mathbf{v}$, такой что достигается минимум $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$.&lt;/p>
&lt;p>Как и SVP, CVP является NP-трудной в высоких измерениях. С точки зрения применения в криптографии, проблема LWE, которая будет обсуждаться позже, тесно связана с особым вариантом этой CVP (Bounded Distance Decoding: BDD).&lt;/p>
&lt;h2 id="33-почему-это-не-решается-в-высоких-размерностях-пределы-lll-и-bkz">3.3 Почему это не решается в высоких размерностях? (Пределы LLL и BKZ)
&lt;/h2>&lt;p>Известным алгоритмом для решения задач на решетках высокой размерности является алгоритм LLL (алгоритм Ленстры-Ленстры-Ловаса). Алгоритм LLL работает за полиномиальное время и может в некоторой степени &amp;ldquo;редуцировать&amp;rdquo; базис решетки до &amp;ldquo;хорошего базиса&amp;rdquo;. Однако кратчайший вектор, который может найти алгоритм LLL, имеет коэффициент аппроксимации, который экспоненциально зависит от размерности ($2^{\mathcal{O}(n)}$) по сравнению с истинным кратчайшим вектором, что недостаточно для нарушения безопасности криптографии.&lt;/p>
&lt;p>С помощью более мощных алгоритмов редукции базиса, таких как алгоритм BKZ (Block Korkine-Zolotarev), который является улучшением LLL, можно найти более короткие векторы, но вычислительная сложность возрастает экспоненциально в зависимости от размера блока. В криптографии на решетках безопасные параметры (например, значение размерности $n$) определяются путем оценки времени выполнения этого алгоритма BKZ. В текущих стандартных параметрах PQC размерность $n$ выбирается от 500 до 1000 и более, и считается, что для взлома потребуется время, превышающее возраст Вселенной, даже при использовании суперкомпьютеров или будущих квантовых компьютеров.&lt;/p>
&lt;h1 id="4-математическая-формулировка-проблемы-lwe-learning-with-errors">4. Математическая формулировка проблемы LWE (Learning With Errors)
&lt;/h1>&lt;p>Большая часть современной криптографии на решетках основана на проблеме &amp;ldquo;LWE (Learning With Errors)&amp;rdquo;, предложенной Одедом Регевом (Oded Regev) в 2005 году. Красота проблемы LWE заключается в простоте ее формулировки и мощном математическом доказательстве &amp;ldquo;сведения от сложности в худшем случае к сложности в среднем случае&amp;rdquo;.&lt;/p>
&lt;h2 id="41-система-линейных-уравнений-без-шума">4.1 Система линейных уравнений без шума
&lt;/h2>&lt;p>Чтобы понять проблему LWE, давайте сначала рассмотрим простую систему линейных уравнений без шума.
Предположим, у нас есть неизвестный секретный вектор $\mathbf{s} \in \mathbb{Z}_q^n$ (где каждая компонента - целое число от $0$ до $q-1$). Здесь $q$ - простое число.&lt;/p>
&lt;p>Мы выбираем случайные векторы коэффициентов $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$ и вычисляем их скалярное произведение с секретным вектором $\mathbf{s}$ по модулю $q$.
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>Учитывая достаточное количество (не менее $n$) пар $(\mathbf{a}_i, b_i)$, мы можем легко восстановить секретный вектор $\mathbf{s}$, используя &amp;ldquo;метод исключения Гаусса&amp;rdquo; из линейной алгебры. Эту задачу легко решить за полиномиальное время.&lt;/p>
&lt;h2 id="42-определение-проблемы-lwe-добавление-шума">4.2 Определение проблемы LWE: Добавление шума
&lt;/h2>&lt;p>Что произойдет, если мы добавим немного &amp;ldquo;шума (ошибки)&amp;rdquo; в эту задачу?
В этом суть проблемы LWE.&lt;/p>
&lt;p>Для неизвестного секретного вектора $\mathbf{s} \in \mathbb{Z}_q^n$, мы добавляем небольшую ошибку $e_i \in \mathbb{Z}_q$ к результату каждого уравнения.
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>Здесь $e_i$ - небольшое целое число со средним значением 0 и относительно небольшим стандартным отклонением (например, выбранное из дискретного распределения Гаусса).
Предоставляемая информация представляет собой список пар случайных векторов $\mathbf{a}_i$ и $b_i$, вычисленных с добавлением этой ошибки.
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>Это можно очень элегантно выразить в матричной форме.
Используя случайную матрицу $A \in \mathbb{Z}_q^{m \times n}$, секретный вектор $\mathbf{s} \in \mathbb{Z}_q^n$ и вектор ошибки $\mathbf{e} \in \mathbb{Z}_q^m$, мы можем записать:
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
Нам даны только $A$ и $\mathbf{b}$. Процесс поиска $\mathbf{s}$ на их основе называется &amp;ldquo;проблемой поиска LWE&amp;rdquo; (Search LWE problem).&lt;/p>
&lt;p>Поскольку в ней присутствует ошибка $e_i$, попытка использовать метод исключения Гаусса приведет к экспоненциальному росту ошибки в процессе сложения и вычитания уравнений, делая невозможным получение правильного ответа. На первый взгляд это выглядит как простая система линейных уравнений, но добавление этого небольшого шума повышает уровень сложности задачи до NP-трудной.&lt;/p>
&lt;h2 id="43-проблема-решения-lwe-decision-lwe">4.3 Проблема решения LWE (Decision LWE)
&lt;/h2>&lt;p>В криптографических доказательствах часто используется вариация задачи поиска LWE, называемая &amp;ldquo;проблемой решения LWE&amp;rdquo; (Decision LWE problem).&lt;/p>
&lt;p>Задача решения LWE состоит в том, чтобы, получив список образцов из следующих двух распределений, определить, из какого распределения они получены:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Распределение LWE&lt;/strong>: Намеренно вычисленное $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$&lt;/li>
&lt;li>&lt;strong>Равномерное случайное распределение&lt;/strong>: $(A, \mathbf{u})$, состоящее из совершенно случайно выбранной матрицы $A$ и вектора $\mathbf{u}$&lt;/li>
&lt;/ol>
&lt;p>Удивительно, но если параметры проблемы LWE выбраны правильно, пары, полученные из распределения LWE, становятся &amp;ldquo;вычислительно неразличимыми&amp;rdquo; (Computationally Indistinguishable) от полностью случайных пар данных. Это свойство является основой того, что криптография на базе LWE может генерировать &amp;ldquo;шифротексты, неотличимые от случайных чисел&amp;rdquo;.&lt;/p>
&lt;h2 id="44-сведение-от-сложности-в-худшем-случае-к-сложности-в-среднем-случае-теорема-регева">4.4 Сведение от сложности в худшем случае к сложности в среднем случае (Теорема Регева)
&lt;/h2>&lt;p>Величайшим достижением Одеда Регева было математическое связывание сложности этой проблемы LWE со сложностью вышеупомянутых задач на решетках (SVP и CVP).&lt;/p>
&lt;p>Используя квантовое сведение (Quantum reduction), он доказал, что: &amp;ldquo;Если существует алгоритм полиномиального времени, который может решить проблему LWE в среднем (для случайно выбранных $A$ и $\mathbf{e}$), то существует квантовый алгоритм полиномиального времени, который может решить Gap-SVP в худшем случае (самый сложный случай) для любой решетки&amp;rdquo;. (Позже Пейкерт (Peikert) и другие также продемонстрировали классическое сведение).&lt;/p>
&lt;p>Это свойство, похожее на мечту в криптографии. Причина в том, что оно устраняет опасение: &amp;ldquo;Шифр может быть взломан, потому что мы случайно выбрали слабый ключ (часть среднего случая)&amp;rdquo;, и дает сильную гарантию: &amp;ldquo;Если мы можем решить LWE в среднем, то мы можем решить все сложные задачи на решетках (поэтому LWE абсолютно сложна)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["Худший случай задач на решетках (Gap-SVP, SIVP)"] -->|Квантовое/Классическое сведение| B["Проблема LWE в среднем случае"]
B -->|Криптографическая конструкция| C["Криптосистемы на основе LWE (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-построение-криптографии-с-открытым-ключом-с-использованием-lwe-криптосистема-регева">5. Построение криптографии с открытым ключом с использованием LWE (Криптосистема Регева)
&lt;/h1>&lt;p>Поняв сложность проблемы LWE, давайте посмотрим на базовую криптосистему с открытым ключом, предложенную Одедом Регевом, чтобы увидеть, как с ее помощью выполняются шифрование и дешифрование. Здесь мы объясним самый основной механизм шифрования 1-битного сообщения $M \in \{0, 1\}$.&lt;/p>
&lt;h2 id="51-генерация-ключей-key-generation">5.1 Генерация ключей (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>Определяются системные параметры: простое число $q$, размерность $n$ и количество уравнений $m$ ($m > n \log q$).&lt;/li>
&lt;li>В качестве секретного ключа случайно выбирается вектор $\mathbf{s} \in \mathbb{Z}_q^n$.&lt;/li>
&lt;li>Генерируется случайная матрица $A \in \mathbb{Z}_q^{m \times n}$.&lt;/li>
&lt;li>Малый вектор ошибки $\mathbf{e} \in \mathbb{Z}_q^m$ выбирается из распределения ошибок, например, дискретного гауссовского.&lt;/li>
&lt;li>Вычисляется вектор $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$.&lt;/li>
&lt;li>Открытый ключ (Public Key) — это $(A, \mathbf{b})$.&lt;/li>
&lt;li>Секретный ключ (Secret Key) — это $\mathbf{s}$.&lt;/li>
&lt;/ol>
&lt;p>Открытый ключ - это буквально &amp;ldquo;экземпляр проблемы LWE&amp;rdquo;. Поиск секретного ключа $\mathbf{s}$ по открытому ключу $(A, \mathbf{b})$ эквивалентен решению задачи поиска LWE, поэтому безопасность гарантирована.&lt;/p>
&lt;h2 id="52-шифрование-encryption">5.2 Шифрование (Encryption)
&lt;/h2>&lt;p>Алиса использует открытый ключ Боба $(A, \mathbf{b})$ для шифрования 1-битного сообщения $M \in \{0, 1\}$.&lt;/p>
&lt;ol>
&lt;li>Выбирается случайный бинарный вектор (с компонентами 0 или 1) $\mathbf{r} \in \{0, 1\}^m$.&lt;/li>
&lt;li>В качестве первой части шифротекста вычисляется вектор $\mathbf{u} = A^T \mathbf{r} \pmod q$. ($A^T$ - транспонированная матрица $A$. Это означает, что мы суммируем те строки $A$, для которых компоненты $\mathbf{r}$ равны 1).&lt;/li>
&lt;li>В качестве второй части шифротекста вычисляется скаляр $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$.
(Если сообщение $M$ равно 0, ничего не добавляется; если $1$, добавляется ровно половина значения $q$, то есть $\lfloor \frac{q}{2} \rfloor$).&lt;/li>
&lt;li>Шифротекст (Ciphertext) представляет собой $(\mathbf{u}, v)$.&lt;/li>
&lt;/ol>
&lt;p>Интуитивный смысл шифрования заключается во взятии &amp;ldquo;суммы случайного подмножества&amp;rdquo; для матрицы открытого ключа $A$ и вектора $\mathbf{b}$. Из-за сложности проблемы решения LWE этот шифротекст $(\mathbf{u}, v)$ выглядит неотличимым от полностью случайного вектора и равномерного случайного числа (семантическая безопасность: Semantic Security).&lt;/p>
&lt;div class="mermaid">flowchart LR
M["Сообщение M в {0,1}"] --> Enc
PK["Открытый ключ (A, b)"] --> Enc
r["Случайный бинарный вектор r"] --> Enc
subgraph Enc ["Процесс шифрования"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["Шифротекст (u, v)"]&lt;/div>
&lt;h2 id="53-дешифрование-decryption">5.3 Дешифрование (Decryption)
&lt;/h2>&lt;p>Боб расшифровывает шифротекст $(\mathbf{u}, v)$, используя свой секретный ключ $\mathbf{s}$.&lt;/p>
&lt;ol>
&lt;li>Он вычисляет следующее значение: $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>Если вычисленный результат ближе к $0$, выводится $M=0$; если он ближе к $\lfloor \frac{q}{2} \rfloor$, выводится $M=1$.&lt;/li>
&lt;/ol>
&lt;p>Давайте математически раскроем это, чтобы понять, почему оно может быть расшифровано.
Вспомните, что $\mathbf{b} = A \mathbf{s} + \mathbf{e}$.&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>Здесь $\mathbf{s}^T A^T \mathbf{r}$ аккуратно компенсируется и исчезает из уравнения!
Остается только $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$.&lt;/p>
&lt;p>$\mathbf{e}$ - это вектор шума с очень маленькими компонентами, а $\mathbf{r}$ - бинарный вектор с компонентами 0 или 1. Следовательно, их скалярное произведение $\mathbf{e}^T \mathbf{r}$ также останется относительно небольшим значением (если параметры выбраны правильно).&lt;/p>
&lt;ul>
&lt;li>Если $M=0$, то результат будет равен $\mathbf{e}^T \mathbf{r}$, что является малым значением, близким к $0$.&lt;/li>
&lt;li>Если $M=1$, то результат будет равен $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$, что будет расположено вокруг половины значения $q$, то есть $\lfloor \frac{q}{2} \rfloor$.&lt;/li>
&lt;/ul>
&lt;p>Если параметры спроектированы так, что абсолютное значение ошибки $\mathbf{e}^T \mathbf{r}$ находится в пределах $\frac{q}{4}$, Боб может точно определить (расшифровать) сообщение $M$, просто посмотрев, к чему ближе результат вычислений: к $0$ или к $\lfloor \frac{q}{2} \rfloor$. Это прекрасный механизм, благодаря которому работает криптография на базе LWE.&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["Шифротекст (u, v)"] --> Dec
SK["Секретный ключ s"] --> Dec
subgraph Dec ["Процесс дешифрования"]
direction TB
calc["Вычислить D = v - s^T * u mod q"]
check["Проверить, ближе ли D к 0 или q/2"]
end
calc --> check
Dec --> M_out["Восстановленное сообщение M"]&lt;/div>
&lt;h1 id="6-игрушечный-пример-lwe-шифрования-с-конкретными-числами">6. Игрушечный пример LWE-шифрования с конкретными числами
&lt;/h1>&lt;p>Я думаю, что трудно прочувствовать это только с помощью ряда формул, поэтому давайте фактически проследим вычисления от шифрования до дешифрования, установив очень маленькие числовые параметры.
(&lt;em>В реальных криптографических системах для обеспечения безопасности используются значения $n$ от 500 и выше, и $q$ от нескольких тысяч и выше&lt;/em>)&lt;/p>
&lt;p>&lt;strong>[Установка параметров]&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Модуль $q = 17$ (Простое число. Таким образом, значения принимаются в диапазоне от $0$ до $16$)&lt;/li>
&lt;li>Размерность $n = 2$&lt;/li>
&lt;li>Количество уравнений $m = 4$&lt;/li>
&lt;li>Предположим, мы шифруем сообщение $M = 1$.&lt;/li>
&lt;li>Величина сдвига сообщения: $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>[1. Фаза генерации ключей]&lt;/strong>
Боб случайным образом выбирает секретный ключ $\mathbf{s}$, матрицу $A$ и вектор ошибки $\mathbf{e}$.
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>Далее вычисляется открытый ключ $\mathbf{b}$.
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
Мы вычисляем это по модулю 17. (Например, $66 = 17 \times 3 + 15$)
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
Мы прибавляем вектор ошибки $\mathbf{e}$.
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>Открытый ключ состоит из $A$ и $\mathbf{b} = (16, 0, 11, 1)^T$.&lt;/p>
&lt;p>&lt;strong>[2. Фаза шифрования]&lt;/strong>
Алиса шифрует сообщение $M = 1$.
Она выбирает случайный вектор $\mathbf{r}$. Пусть $\mathbf{r} = (1, 0, 1, 0)^T$.&lt;/p>
&lt;p>Вычисляется $\mathbf{u}$.
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>Вычисляется $v$.
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
Прибавляется значение, соответствующее сообщению $M=1$: $\lfloor 17/2 \rfloor = 8$.
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>Алиса отправляет Бобу шифротекст $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$.&lt;/p>
&lt;p>&lt;strong>[3. Фаза дешифрования]&lt;/strong>
Боб, получивший шифротекст, расшифровывает его с помощью секретного ключа $\mathbf{s} = (3, 4)^T$.
Он вычисляет формулу процесса дешифрования: $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$.&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>Здесь, в мире по модулю 17, $-8$ равно $9$ ($-8 + 17 = 9$).
Полученное значение $D = 9$ проверяется, к чему оно ближе: к $0$ или к $8$ ($\lfloor 17/2 \rfloor$).
Поскольку $9$ явно ближе к $8$, чем к $0$, Боб смог правильно восстановить $M = 1$!&lt;/p>
&lt;p>Почему получилось $9$? Давайте вспомним доказательство, приведенное ранее.
Часть ошибки равна $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$.
Следовательно, результат вычислений равен $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$, и мы убедились, что теоретическое значение было вычислено правильно.&lt;/p>
&lt;h1 id="7-эволюция-к-практическому-применению-ring-lwe-и-module-lwe">7. Эволюция к практическому применению: Ring-LWE и Module-LWE
&lt;/h1>&lt;p>Стандартная проблема LWE (Standard LWE), которую мы объясняли до сих пор, имеет очень сильное доказательство безопасности, но на практике у нее есть фатальные недостатки: &amp;ldquo;огромный размер ключа&amp;rdquo; и &amp;ldquo;высокая вычислительная стоимость&amp;rdquo;.&lt;/p>
&lt;p>В Standard LWE открытый ключ включает огромную матрицу $A \in \mathbb{Z}_q^{m \times n}$. Когда параметр $n$ достигает сотен или тысяч, размер этой матрицы достигает нескольких мегабайт, что слишком тяжело для передачи и приема каждый раз в интернет-протоколах связи (таких как TLS). Кроме того, умножение матрицы на вектор требует сложности вычислений $\mathcal{O}(n^2)$.&lt;/p>
&lt;p>Для решения этой проблемы были внедрены &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; и &amp;ldquo;Module-LWE (MLWE)&amp;rdquo;, которые включают алгебраическую структуру, называемую кольцами многочленов (Polynomial rings), в решетку.&lt;/p>
&lt;h2 id="71-интуиция-ring-lwe">7.1 Интуиция Ring-LWE
&lt;/h2>&lt;p>В Ring-LWE векторы и матрицы заменяются на элементы (многочлены) над кольцом многочленов $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$. (Здесь $n$ выбирается как степень двойки).&lt;/p>
&lt;p>В то время как открытым ключом в Standard LWE была матрица $A$, Ring-LWE использует один многочлен $a(x)$. Секретный ключ $s(x)$ и ошибка $e(x)$ также становятся многочленами.
Уравнение выглядит следующим образом:
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Поскольку это умножение многочленов, за счет использования &amp;ldquo;теоретико-числового преобразования (Number Theoretic Transform: NTT)&amp;rdquo;, аналогичного быстрому преобразованию Фурье (FFT), вычислительная сложность может быть резко снижена до $\mathcal{O}(n \log n)$. Кроме того, поскольку размер открытого ключа уменьшается с матрицы до одного многочлена, размер данных сокращается до $\mathcal{O}(n)$. Это дает подавляющее преимущество в пропускной способности связи.&lt;/p>
&lt;p>С математической точки зрения Ring-LWE сводится к задаче на решетке с особой симметрией, называемой &amp;ldquo;идеальной решеткой&amp;rdquo; (Ideal Lattice), а не на общей решетке.&lt;/p>
&lt;h2 id="72-module-lwe-и-стандартизация-nist-kyber--ml-kem">7.2 Module-LWE и стандартизация NIST (Kyber / ML-KEM)
&lt;/h2>&lt;p>Хотя Ring-LWE эффективен, существовало некоторое опасение, что специальная алгебраическая структура идеальных решеток может стать отправной точкой для будущих атак. Поэтому &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; был создан, чтобы взять &amp;ldquo;лучшее из обоих миров&amp;rdquo;: консервативную безопасность Standard LWE и эффективность Ring-LWE.&lt;/p>
&lt;p>В Module-LWE мы рассматриваем небольшие матрицы и векторы, элементами которых являются многочлены. Другими словами, мы работаем с модулями над кольцом.
В настоящее время &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (название стандарта: ML-KEM), выбранный NIST в качестве стандарта алгоритма инкапсуляции ключей (KEM) для PQC, построен именно на сложности этой проблемы Module-LWE.&lt;/p>
&lt;h1 id="8-почему-это-безопасно-против-квантовых-компьютеров">8. Почему это безопасно против квантовых компьютеров?
&lt;/h1>&lt;p>Наконец, мы коснемся сути вопроса: &amp;ldquo;Почему считается, что криптография на решетках не может быть взломана даже с помощью квантовых компьютеров?&amp;rdquo;&lt;/p>
&lt;p>Алгоритм Шора, с помощью которого квантовые компьютеры взламывают шифрование RSA и криптографию на эллиптических кривых, по сути, является алгоритмом для решения &amp;ldquo;проблемы скрытой подгруппы (Hidden Subgroup Problem: HSP)&amp;rdquo;. Математическая структура (конечные абелевы группы), лежащая в основе RSA и ECC, обладает периодичностью, и эта периодичность (скрытая подгруппа) может быть извлечена за один шаг путем использования специальной операции квантового алгоритма, называемой квантовым преобразованием Фурье (QFT).&lt;/p>
&lt;p>Однако задачи на решетках в корне отличаются. Решетки также имеют периодичность, но то, что ищется в SVP и CVP, — это геометрические нелинейные свойства, такие как &amp;ldquo;кратчайшее расстояние&amp;rdquo; и &amp;ldquo;удаление шума&amp;rdquo;. Даже если применить &amp;ldquo;квантовое преобразование Фурье на абелевой группе&amp;rdquo;, подобно алгоритму Шора, непосредственно к задачам на решетках, полезную информацию для их решения нельзя эффективно извлечь. На сегодняшний день не было найдено квантовых алгоритмов, способных решить SVP или LWE за полиномиальное время. Широко распространено мнение, что даже с мощью параллельных вычислений квантовых компьютеров единственным эффективным средством является поиск, близкий к полному перебору (ускорение в виде квадратного корня с помощью алгоритма Гровера).&lt;/p>
&lt;h1 id="9-заключение">9. Заключение
&lt;/h1>&lt;p>В этой статье мы подробно рассмотрели математическую интуицию криптографии на решетках, начиная с геометрического определения решеток, переходя к формулировке проблемы LWE и заканчивая построением криптографии с открытым ключом.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Решетка (Lattice)&lt;/strong> — это дискретное пространство, представленное линейными комбинациями базисных векторов с целыми коэффициентами, и в высоких измерениях становится трудно найти &amp;ldquo;хороший базис&amp;rdquo;, близкий к ортогональному (SVP).&lt;/li>
&lt;li>&lt;strong>Проблема LWE (Learning With Errors)&lt;/strong> — это проблема решения систем линейных уравнений с шумом. Поскольку она связана со сложностью задач на решетках в худшем случае, это обеспечивает сильное доказательство безопасности.&lt;/li>
&lt;li>Используя проблему LWE, шифрование и дешифрование (&lt;strong>Криптосистема Регева&lt;/strong>) реализуются с помощью хитроумного механизма намеренного добавления или удаления шума.&lt;/li>
&lt;li>В реальных протоколах для повышения эффективности связи и скорости вычислений используются &lt;strong>Ring-LWE&lt;/strong> и &lt;strong>Module-LWE&lt;/strong> с кольцами многочленов, которые служат основой для стандарта NIST &lt;strong>ML-KEM&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;p>В условиях надвигающегося беспрецедентного сдвига вычислительной парадигмы в виде квантовых компьютеров весьма романтично думать, что &amp;ldquo;криптография на решетках&amp;rdquo;, родившаяся из глубин классической линейной алгебры и теории чисел, сформирует основу будущей интернет-безопасности. Математика, лежащая в основе криптографии на решетках, не является чрезмерно сложной, и ее красивую структуру можно полностью понять, обладая базовыми знаниями в области линейной алгебры и теории вероятностей. Мы надеемся, что эта статья поможет вам понять криптографию на решетках, которая является ядром PQC.&lt;/p></description></item><item><title>Механизм доказательства с нулевым разглашением (ZKP) и его последние применения в Web3 и безопасности</title><link>http://kenji.blog/ru/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post Механизм доказательства с нулевым разглашением (ZKP) и его последние применения в Web3 и безопасности" />&lt;h2 id="введение">Введение
&lt;/h2>&lt;p>В современном цифровом обществе конфиденциальность данных и масштабируемость стали двумя наиболее важными проблемами. По мере роста риска утечек и несанкционированного использования личной информации, возникает острая необходимость в технологии, позволяющей «доказать, что вы обладаете определенной информацией, не раскрывая саму эту информацию другой стороне». Именно это и реализует &lt;strong>доказательство с нулевым разглашением (Zero-Knowledge Proof: ZKP)&lt;/strong>.&lt;/p>
&lt;p>Доказательство с нулевым разглашением — это криптографическая концепция, впервые предложенная в 1980-х годах Шафи Гольдвассер, Сильвио Микали и Чарльзом Ракоффом, однако долгое время она оставалась лишь предметом теоретических исследований. Но с появлением технологии блокчейн и Web3 ситуация кардинально изменилась. ZKP оказалось в центре внимания как «волшебная палочка», способная одновременно решить проблему масштабируемости (ограничения пропускной способности) и проблему конфиденциальности (все транзакции публичны), с которыми сталкиваются публичные блокчейны, такие как Ethereum.&lt;/p>
&lt;p>В этой статье мы подробно и глубоко с технической точки зрения рассмотрим основные концепции доказательства с нулевым разглашением, глубокие математические и криптографические механизмы &lt;strong>zk-SNARKs&lt;/strong> и &lt;strong>zk-STARKs&lt;/strong>, которые в настоящее время являются основными, а также последние примеры их применения в Web3 и сфере безопасности, такие как ZK-Rollups и децентрализованная идентификация (DID).&lt;/p>
&lt;hr>
&lt;h2 id="что-такое-доказательство-с-нулевым-разглашением-zkp">Что такое доказательство с нулевым разглашением (ZKP)?
&lt;/h2>&lt;p>Доказательство с нулевым разглашением (ZKP) означает протокол, при котором доказывающий (Prover) доказывает проверяющему (Verifier), что некое утверждение истинно, но при этом «не передает абсолютно никакой информации, кроме самого факта истинности этого утверждения».&lt;/p>
&lt;h3 id="3-требования-которым-должно-удовлетворять-zkp">3 требования, которым должно удовлетворять ZKP
&lt;/h3>&lt;p>Чтобы считаться ZKP, протокол должен строго выполнять следующие три свойства:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Полнота (Completeness)&lt;/strong>
Если утверждение истинно, и доказывающий с проверяющим добросовестно следуют протоколу, проверяющий должен принять доказательство (Accept) с подавляющей вероятностью.&lt;/li>
&lt;li>&lt;strong>Корректность (Soundness)&lt;/strong>
Если утверждение ложно, то никакой доказывающий-злоумышленник, какими бы вычислительными мощностями он ни обладал, не сможет обмануть проверяющего и заставить его принять доказательство (за исключением пренебрежимо малой вероятности).&lt;/li>
&lt;li>&lt;strong>Нулевое разглашение (Zero-Knowledge)&lt;/strong>
Если утверждение истинно, проверяющий не может получить из процесса доказательства никакой другой информации, кроме того факта, что «утверждение истинно». С точки зрения проверяющего, это доказывается математическим определением того, что процесс доказательства можно смоделировать (существует симулятор).&lt;/li>
&lt;/ol>
&lt;h3 id="интерактивные-и-неинтерактивные-доказательства">Интерактивные и неинтерактивные доказательства
&lt;/h3>&lt;p>ZKP делится на два типа: &lt;strong>интерактивное доказательство&lt;/strong>, при котором доказывающий и проверяющий обмениваются сообщениями несколько раз, и &lt;strong>неинтерактивное доказательство&lt;/strong>, при котором доказывающий отправляет данные доказательства только один раз.&lt;/p>
&lt;h4 id="интерактивное-доказательство-interactive-zkp">Интерактивное доказательство (Interactive ZKP)
&lt;/h4>&lt;p>Ранние ZKP разрабатывались как интерактивные протоколы. Известная притча о «пещере Али-Бабы» является примером такого подхода. Основной поток протокола выглядит следующим образом:&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "Prover (Доказывающий)"
participant Verifier as "Verifier (Проверяющий)"
Note over Prover, Verifier: "Основной процесс интерактивного доказательства"
Prover->>Verifier: "1. Отправить обязательство (Commitment)"
Verifier->>Prover: "2. Отправить случайный вызов (Challenge)"
Prover->>Verifier: "3. Вычислить и отправить ответ (Response)"
Note over Verifier: "Проверить ответ (Verification)"
Verifier-->>Prover: "4. Принять или отклонить (Accept / Reject)"
Note over Prover, Verifier: "※Для повышения достоверности это повторяется десятки раз"&lt;/div>
&lt;p>Этот метод эффективен, но требует, чтобы проверяющий находился онлайн, что делает его неудобным для применения в асинхронных распределенных системах, таких как блокчейн. В блокчейне любой желающий должен иметь возможность в любое время проверить прошлые доказательства.&lt;/p>
&lt;h4 id="эвристика-фиата-шамира-fiat-shamir-heuristic-и-переход-к-неинтерактивности">Эвристика Фиата-Шамира (Fiat-Shamir Heuristic) и переход к неинтерактивности
&lt;/h4>&lt;p>Революционным методом преобразования интерактивных доказательств в неинтерактивные (Non-Interactive Zero-Knowledge Proof: NIZK) является &lt;strong>преобразование (эвристика) Фиата-Шамира&lt;/strong>.&lt;/p>
&lt;p>Вместо «случайного вызова», отправляемого проверяющим, доказывающий самостоятельно генерирует «псевдослучайный вызов», используя собственное обязательство (commitment) и хеш-значение публичной информации. При условии, что криптографическая хеш-функция (например, SHA-256 или Keccak) работает как случайный оракул (Random Oracle), доказывающий не может заранее предсказать или манипулировать вызовом. Таким образом, доказательство завершается одной отправкой сообщения с сохранением безопасности, эквивалентной интерактивному доказательству.&lt;/p>
&lt;hr>
&lt;h2 id="технические-подробности-zk-snarks">Технические подробности zk-SNARKs
&lt;/h2>&lt;p>В настоящее время наиболее широко используемым видом ZKP является &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge). Как следует из названия, это аргумент знания (Argument of Knowledge), который обладает нулевым разглашением (zk), имеет очень маленький размер доказательства и быстро проверяется (Succinct), а также является неинтерактивным (Non-Interactive).&lt;/p>
&lt;p>В основе zk-SNARKs лежит передовая алгебраическая геометрия и криптография. Они преобразуют выполнение программ и вычисления в проверку уравнений определенных многочленов.&lt;/p>
&lt;h3 id="1-арифметические-схемы-и-преобразование-в-r1cs-rank-1-constraint-system">1. Арифметические схемы и преобразование в R1CS (Rank-1 Constraint System)
&lt;/h3>&lt;p>Сначала любое вычисление, которое необходимо доказать (алгоритм или логика смарт-контракта), преобразуется в &lt;strong>арифметическую схему (Arithmetic Circuit)&lt;/strong>, состоящую из вентилей сложения и умножения.&lt;/p>
&lt;p>Затем эта арифметическая схема преобразуется в набор матричных уравнений, называемый &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong>. R1CS — это задача поиска матриц $A, B, C$, удовлетворяющих следующему ограничению для вектора переменных $x$:&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>Здесь $\circ$ обозначает произведение Адамара (поэлементное умножение). Это ограничение гарантирует, что все логические вентили в схеме (особенно вентили умножения) вычислены правильно.&lt;/p>
&lt;h3 id="2-преобразование-в-qap-quadratic-arithmetic-program">2. Преобразование в QAP (Quadratic Arithmetic Program)
&lt;/h3>&lt;p>Поскольку матричных ограничений R1CS существует огромное количество, проверять их по отдельности крайне неэффективно. Поэтому с помощью интерполяции Лагранжа эти ограничения сжимаются в единое полиномиальное уравнение. Это называется &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong>.&lt;/p>
&lt;p>За счет преобразования в QAP задача, которую необходимо доказать, сводится к вопросу: «Делится ли определенный многочлен $P(x)$ на другой известный многочлен $Z(x)$?»&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>Здесь $L(x), R(x), O(x)$ — многочлены, составленные из соответствующих строк матриц $A, B, C$. Если доказывающий знает правильное решение (Witness), значение $P(x)$ будет равно 0 в каждом корне (точке оценки), поэтому $P(x)$ будет иметь целевой многочлен $Z(x)$ в качестве множителя. То есть существует некоторый многочлен $H(x)$, для которого выполняется:&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>Проверяющий может мгновенно проверить правильность выполнения всего вычисления, просто проверив, выполняется ли это уравнение $P(s) = H(s) \cdot Z(s)$ в некоторой случайной секретной точке $s$. В этом заключается секрет «Succinct» (краткости).&lt;/p>
&lt;h3 id="3-эллиптическая-криптография-и-спаривание-bilinear-pairings">3. Эллиптическая криптография и спаривание (Bilinear Pairings)
&lt;/h3>&lt;p>Однако, если бы проверяющий знал секретную точку $s$, доказывающий мог бы подделать ложный многочлен для удовлетворения уравнения (нарушение корректности). Поэтому вычисления необходимо проводить, пока $s$ остается зашифрованным от всех (с использованием гомоморфного шифрования).&lt;/p>
&lt;p>Это достигается с помощью &lt;strong>эллиптического спаривания (Bilinear Pairings)&lt;/strong>.
Спаривание $e$ — это специальная функция, которая из двух зашифрованных значений позволяет вычислить значение, эквивалентное шифрованию их произведения.&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>Доказывающий, не зная самой $s$, использует зашифрованные значения степеней $s$ (это называется CRS: Common Reference String) для вычисления зашифрованных значений многочленов $P(s)$ и $H(s)$. Проверяющий использует функцию спаривания, чтобы проверить выполнение отношения $P(s) = H(s) \cdot Z(s)$, оперируя при этом зашифрованными значениями.&lt;/p>
&lt;h3 id="4-доверенная-установка-trusted-setup">4. Доверенная установка (Trusted Setup)
&lt;/h3>&lt;p>Главной слабостью zk-SNARKs (особенно ранних версий, таких как Groth16) является необходимость процесса генерации секретной точки $s$, так называемой &lt;strong>доверенной установки (Trusted Setup)&lt;/strong>. Если создатель $s$ сохранит это значение вместо того, чтобы уничтожить его, он сможет сгенерировать любые ложные доказательства (проблема Toxic Waste).&lt;/p>
&lt;p>Для предотвращения этого проводится ритуал, называемый «Ceremony», с использованием многосторонних вычислений (Multi-Party Computation, MPC). В нем участвует множество участников, предоставляя случайные данные. Если хотя бы один участник честно уничтожит свое случайное значение, безопасность всей системы будет сохранена. Тем не менее, исследования по устранению этой зависимости продолжались долгие годы.&lt;/p>
&lt;hr>
&lt;h2 id="технические-подробности-zk-starks">Технические подробности zk-STARKs
&lt;/h2>&lt;p>В качестве ответа на зависимость от доверенной установки и риск взлома эллиптической криптографии квантовыми компьютерами появились &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge).&lt;/p>
&lt;p>Разработанные Эли Бен-Сассоном (Eli Ben-Sasson) и его коллегами, STARKs обладают характеристиками, отраженными в их названии: они «прозрачны» (Transparent) и вообще не требуют доверенной установки, а также «масштабируемы» (Scalable), поскольку размер доказательства и время проверки остаются эффективными даже при увеличении объема вычислений.&lt;/p>
&lt;h3 id="1-полиномиальные-обязательства-и-протокол-fri">1. Полиномиальные обязательства и протокол FRI
&lt;/h3>&lt;p>В отличие от zk-SNARKs, zk-STARKs не используют эллиптическую криптографию, а основывают свою безопасность &lt;strong>исключительно на хеш-функциях&lt;/strong>. Благодаря этому они обладают свойствами постквантовой криптографии (Post-Quantum Cryptography).&lt;/p>
&lt;p>Проверка вычислений выполняется после их преобразования в формат под названием AIR (Algebraic Intermediate Representation) с использованием свойств одномерных или многомерных полиномов. Сердцем STARKs является протокол &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong>.&lt;/p>
&lt;p>Протокол FRI — это технология проверки того, «насколько близка определенная функция к полиному определенной степени» (Proximity). Доказывающий фиксирует значения полинома в качестве листьев дерева Меркла (Merkle Tree) (это называется полиномиальным обязательством).&lt;/p>
&lt;div class="mermaid">graph TD
Root["Корень Меркла (Обязательство)"] --> Node0["Узел 0"]
Root --> Node1["Узел 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>Проверяющий запрашивает раскрытие нескольких случайных точек и использует доказательства Меркла (Merkle proof), чтобы подтвердить, что они включены в обязательство. Рекурсивно повторяя этот процесс, он с подавляющей вероятностью гарантирует, что степень исходного многочлена действительно низкая.&lt;/p>
&lt;h3 id="сравнение-zk-snarks-и-zk-starks">Сравнение zk-SNARKs и zk-STARKs
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Характеристика&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Криптографические предположения&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Эллиптические кривые, спаривание&lt;/td>
&lt;td style="text-align:left">Криптографические хеш-функции, устойчивые к коллизиям&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Доверенная установка&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Требуется (в Plonk и др. — универсальная)&lt;/td>
&lt;td style="text-align:left">Не требуется (Transparent)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Квантовая устойчивость&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Нет&lt;/td>
&lt;td style="text-align:left">Есть&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Размер доказательства&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Очень маленький (~200 байт)&lt;/td>
&lt;td style="text-align:left">Довольно большой (десятки КБ)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Вычислительные затраты на создание доказательства&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Высокие&lt;/td>
&lt;td style="text-align:left">Относительно ниже, чем у SNARKs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Затраты на проверку (Gas)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Очень низкие (постоянные)&lt;/td>
&lt;td style="text-align:left">Низкие (логарифмический рост)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>В последние годы появились SNARKs, такие как Plonk и Halo2, которым «не требуется доверенная установка или она нужна только один раз», поэтому граница между SNARKs и STARKs постепенно стирается, но принципиальная разница в математическом подходе остается важной.&lt;/p>
&lt;hr>
&lt;h2 id="новейшие-применения-доказательства-с-нулевым-разглашением-в-web3-и-безопасности">Новейшие применения доказательства с нулевым разглашением в Web3 и безопасности
&lt;/h2>&lt;p>Перейдя от теории к практике, ZKP в настоящее время производит революцию на переднем крае Web3 и кибербезопасности.&lt;/p>
&lt;h3 id="1-максимальное-масштабирование-ethereum-с-помощью-zk-rollups">1. Максимальное масштабирование Ethereum с помощью ZK-Rollups
&lt;/h3>&lt;p>Блокчейны уровня 1 (L1), такие как Ethereum, придают большое значение децентрализации и безопасности, но из-за этого имеют серьезные ограничения масштабируемости (трилемма). Окончательным решением уровня 2 (L2), устраняющим эту проблему, являются &lt;strong>ZK-Rollups&lt;/strong>.&lt;/p>
&lt;p>В ZK-Rollup тысячи транзакций выполняются и обрабатываются вне сети (L2), и генерируется «одно ZKP (Validity Proof)», подтверждающее правильность их выполнения. Смарт-контракту в блокчейне L1 остается только проверить это доказательство.&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["Пользователи (Отправка Tx)"] --> Sequencer["Секвенсор (Сбор и выполнение Tx)"]
Sequencer --> Prover["Доказывающий (Генерация ZKP)"]
Sequencer --> L1Contract["L1 Смарт-контракт (Публикация данных Tx)"]
Prover --> L1Contract["Предоставление ZKP (Доказательства)"]
L1Contract --> Verify["Проверка и обновление состояния"]&lt;/div>
&lt;p>Главным преимуществом ZK-Rollups, в отличие от Optimistic Rollups (например, Arbitrum или Optimism), является отсутствие необходимости в периоде оспаривания (challenge period, обычно 7 дней) для доказательства мошенничества (Fraud Proof). Поскольку правильность криптографически гарантирована, как только доказательство проверено, вывод средств (Finality) на L1 завершается мгновенно. В настоящее время такие проекты, как zkSync, Starknet, Scroll и Polygon zkEVM, ведут ожесточенную конкуренцию в разработке, и реализация &lt;strong>zkEVM&lt;/strong>, совместимой с EVM (виртуальной машиной Ethereum), способствует быстрому росту экосистемы.&lt;/p>
&lt;h3 id="2-идентификация-с-сохранением-конфиденциальности-zkp-for-identity">2. Идентификация с сохранением конфиденциальности (ZKP for Identity)
&lt;/h3>&lt;p>ZKP также в корне меняет способы личной аутентификации в цифровом мире.
Например, на вопрос «Вам больше 18 лет?» в традиционных системах мы показываем водительские права или паспорт, передавая собеседнику ненужную личную информацию, такую как имя или адрес.&lt;/p>
&lt;p>Используя ZKP, на основе цифрового сертификата (Verifiable Credential), выданного государственным органом, можно &lt;strong>математически доказать только тот факт&lt;/strong>, что «согласно моей дате рождения, на текущую дату мне больше 18 лет». Проверяющему достаточно проверить подпись сертификата и ZKP, и он не сможет узнать вашу дату рождения или личность.&lt;/p>
&lt;p>Проекты «доказательства личности» (Proof of Personhood), такие как Worldcoin, также не хранят и не передают данные радужной оболочки глаза напрямую. Вместо этого они используют ZKP, чтобы доказать только то, что «вы — уникальный человек».&lt;/p>
&lt;h3 id="3-конфиденциальные-смарт-контракты-и-корпоративное-использование">3. Конфиденциальные смарт-контракты и корпоративное использование
&lt;/h3>&lt;p>Свойство публичных блокчейнов, при котором «все данные открыты», было серьезным препятствием для компаний при работе с конфиденциальными транзакциями или информацией о цепочках поставок в блокчейне.&lt;/p>
&lt;p>Используя технологии ZKP (например, сети, ориентированные на конфиденциальность, такие как Aleo или Aztec), можно записывать в публичный блокчейн только подтверждение правильности обновления состояния, оставляя входные и выходные значения транзакций и даже саму логику выполняемого смарт-контракта в зашифрованном виде. Это позволяет предотвратить фронтраннинг (MEV) в DeFi (децентрализованных финансах) и создать конфиденциальные сети консорциумов между компаниями, наслаждаясь при этом высокой безопасностью публичных блокчейнов.&lt;/p>
&lt;hr>
&lt;h2 id="будущие-проблемы-и-перспективы-zkp">Будущие проблемы и перспективы ZKP
&lt;/h2>&lt;p>ZKP, несомненно, является фундаментальной технологией следующего поколения, но остаются и некоторые проблемы.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Вычислительные затраты на генерацию доказательств и аппаратное ускорение&lt;/strong>
Генерация ZKP требует огромного количества полиномиальных операций, быстрого преобразования Фурье (FFT) и мультискалярного умножения (MSM). В настоящее время быстро продвигаются исследования в области разработки специализированного аппаратного обеспечения (FPGA или ASIC) для ускорения генерации доказательств, так называемый &lt;strong>майнинг ZKP&lt;/strong> (Prover Network).&lt;/li>
&lt;li>&lt;strong>Стандартизация и улучшение опыта разработчиков (DX)&lt;/strong>
Появилось множество специализированных языков для написания схем ZKP, таких как Circom, Cairo, Noir, Leo и другие. Зрелость компиляторов, которые автоматически генерируют схемы ZKP из существующих языков, таких как Rust или C++, и единые стандарты, объединяющие их, станут ключом к внедрению ZKP обычными инженерами-программистами.&lt;/li>
&lt;/ol>
&lt;h2 id="заключение">Заключение
&lt;/h2>&lt;p>Доказательство с нулевым разглашением (ZKP) превратилось из просто «технологии повышения анонимности криптовалют» в «универсальную технологию, переопределяющую доверие во всем интернете». Небольшие доказательства, вычисленные в глубинах формул и криптографии, станут щитом, который бесконечно расширяет масштабируемость блокчейна и надежно защищает нашу конфиденциальность.&lt;/p>
&lt;p>На пути к истинному массовому внедрению Web3 и созданию безопасного и приватного интернета следующего поколения, доказательство с нулевым разглашением будет продолжать играть роль важнейшего элемента. Мы должны внимательно следить за дальнейшей эволюцией технологий ZKP.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Источники и полезные ссылки&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Vitalik Buterin&amp;rsquo;s blog on zk-SNARKs and zk-STARKs&lt;/li>
&lt;/ul></description></item><item><title>Что такое полностью гомоморфное шифрование (FHE)? Объяснение основы безопасности следующего поколения</title><link>http://kenji.blog/ru/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post Что такое полностью гомоморфное шифрование (FHE)? Объяснение основы безопасности следующего поколения" />&lt;p>В условиях, когда облачные вычисления и технологии ИИ становятся основой общества, компромисс между «конфиденциальностью данных» и «использованием данных» является одной из важнейших проблем. Растет спрос на использование ИИ в облаке для анализа высококонфиденциальных данных, таких как медицинские данные, финансовая информация и личная биометрическая информация, но многие компании не решаются передавать данные наружу из-за соображений безопасности.&lt;/p>
&lt;p>Традиционные технологии шифрования (такие как AES и RSA) отлично справляются с защитой данных, хранящихся в хранилище (Data at Rest) и передаваемых по сети (Data in Transit). Однако при &lt;strong>выполнении обработки (вычислений) на стороне сервера, например, поиска или машинного обучения над данными (Data in Use), необходимо сначала расшифровать их и вернуть в виде открытого текста&lt;/strong>. Если сервер будет взломан в момент расшифровки, или если злонамеренный внутренний администратор заглянет в данные, это приведет к прямой утечке информации.&lt;/p>
&lt;p>Технология мечты, которая преодолевает эту фундаментальную слабость «расшифровки во время обработки», — это &lt;strong>полностью гомоморфное шифрование (Fully Homomorphic Encryption: FHE)&lt;/strong>. Использование FHE позволяет выполнять вычислительную обработку данных, оставляя их зашифрованными без какой-либо расшифровки, и возвращать клиенту только зашифрованный результат.&lt;/p>
&lt;p>В этой статье мы глубоко и детально рассмотрим FHE, основу безопасности следующего поколения, начиная от концепции и истории, новаторского прорыва Крейга Джентри, математических основ (таких как Ring-LWE), до самой большой проблемы — «шума» — и ее решения (bootstrapping, начальная загрузка/загрузка), а также новейших библиотек реализаций.&lt;/p>
&lt;hr>
&lt;h2 id="1-что-такое-гомоморфное-шифрование-основные-концепции">1. Что такое гомоморфное шифрование? Основные концепции
&lt;/h2>&lt;p>«Гомоморфный» — это алгебраический термин, который относится к свойству отображения между множествами с определенной структурой, при котором сохраняется структура операций. «Гомоморфизм» в теории криптографии означает свойство, при котором &lt;strong>операции в пространстве открытого текста соответствуют операциям в пространстве шифротекста&lt;/strong>.&lt;/p>
&lt;p>Выражаясь простой математической формулой, пусть $E(\cdot)$ будет функцией шифрования, а $D(\cdot)$ — функцией дешифрования для открытых текстов $m_1$ и $m_2$. Если операция над открытым текстом (например, сложение или умножение) обозначается как $\circ$, а операция над шифротекстом — как $\diamond$, то выполняется следующее соотношение:&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>Другими словами, расшифровка результата применения какой-либо операции $\diamond$ к шифротекстам $E(m_1)$ и $E(m_2)$ совпадает с результатом применения операции $\circ$ к исходным открытым текстам.&lt;/p>
&lt;h3 id="поток-данных-в-облачных-вычислениях">Поток данных в облачных вычислениях
&lt;/h3>&lt;p>Архитектура облачной обработки с использованием FHE полностью отличается от традиционной. На следующем рисунке показан поток безопасной обработки данных с использованием FHE.&lt;/p>
&lt;div class="mermaid">graph TD
A["Клиент (хранит закрытый ключ)"] -->|1. Шифрует открытый текст x: E(x)| B["Облачный сервер (только зашифрованные данные)"]
B -->|2. Применяет функцию f к шифротексту: E(f(x))| B
B -->|3. Зашифрованный результат вычислений E(y)| A
A -->|4. Расшифровывает закрытым ключом: y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>Сервер получает зашифрованные данные $E(x)$, но, поскольку у него нет закрытого ключа, он абсолютно не может знать содержимое данных. Однако, используя свойства FHE, можно применить функцию $f$ (например, модель машинного обучения) к шифротексту и сгенерировать $E(f(x))$. Клиент получает это и расшифровывает с помощью своего собственного закрытого ключа, получая таким образом желаемый результат $y = f(x)$.&lt;/p>
&lt;hr>
&lt;h2 id="2-история-эволюции-гомоморфного-шифрования-phe-she-fhe">2. История эволюции гомоморфного шифрования: PHE, SHE, FHE
&lt;/h2>&lt;p>Гомоморфное шифрование не сразу приняло свою нынешнюю «полную» форму. Оно широко подразделяется на три этапа в зависимости от типов и количества операций, которые могут быть выполнены.&lt;/p>
&lt;h3 id="partially-homomorphic-encryption-phe-частично-гомоморфное-шифрование">Partially Homomorphic Encryption (PHE: Частично гомоморфное шифрование)
&lt;/h3>&lt;p>PHE — это схема шифрования, которая может выполнять &lt;strong>только одну&lt;/strong> операцию, либо сложение, либо умножение, неограниченное количество раз. На самом деле, шифры с таким свойством существуют с давних времен.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Шифрование RSA (гомоморфизм по умножению)&lt;/strong>
Шифрование RSA непреднамеренно обладало гомоморфизмом по умножению. Пусть открытые тексты равны $m_1, m_2$, а открытый ключ — $(e, N)$:
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
Если перемножить их, то получится:
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
Таким образом, умножение шифротекстов соответствует умножению открытых текстов.&lt;/li>
&lt;li>&lt;strong>Шифрование Пэйе (гомоморфизм по сложению)&lt;/strong>
Шифрование Пэйе (Paillier), изобретенное в 1999 году, обладает гомоморфизмом по сложению. Оно применяется на практике, например, в электронном голосовании (подсчет зашифрованных голосов и расшифровка только конечного результата).&lt;/li>
&lt;/ul>
&lt;h3 id="somewhat-homomorphic-encryption-she-ограниченно-гомоморфное-шифрование">Somewhat Homomorphic Encryption (SHE: Ограниченно гомоморфное шифрование)
&lt;/h3>&lt;p>Это схема, которая может выполнять &lt;strong>обе&lt;/strong> операции, сложение и умножение, но имеет &lt;strong>ограничение на количество выполняемых операций (глубину схемы)&lt;/strong>. Из-за накопления «шума», о котором будет рассказано позже, дешифрование становится невозможным после определенного количества умножений. К этой категории относится шифр BGN (Boneh-Goh-Nissim) 2005 года, но у него были ограничения для выполнения практических сложных вычислений (таких как глубокое обучение).&lt;/p>
&lt;h3 id="fully-homomorphic-encryption-fhe-полностью-гомоморфное-шифрование">Fully Homomorphic Encryption (FHE: Полностью гомоморфное шифрование)
&lt;/h3>&lt;p>Это схема шифрования, которая позволяет выполнять как сложение, так и умножение &lt;strong>неограниченное количество раз&lt;/strong>. Подобно полноте по Тьюрингу в теории информации, если сложение (соответствует XOR) и умножение (соответствует AND) можно комбинировать бесконечно, это означает, что в принципе любая вычислимая функция или алгоритм могут быть выполнены в зашифрованном виде.&lt;/p>
&lt;p>FHE долгое время называли «Святым Граалем криптографии» и считали невозможным. Однако в 2009 году &lt;strong>Крейг Джентри&lt;/strong>, в то время аспирант Стэнфордского университета, предложил первую схему FHE с использованием идеальных решеток (Ideal Lattices), что потрясло мир.&lt;/p>
&lt;hr>
&lt;h2 id="3-математические-основы-fhe-задача-lwe-и-ring-lwe">3. Математические основы FHE: Задача LWE и Ring-LWE
&lt;/h2>&lt;p>Многие из современных господствующих схем FHE основаны на &lt;strong>задаче LWE (Обучение с ошибками, Learning With Errors)&lt;/strong>, сложной математической проблеме в «криптографии на решетках (Lattice-based Cryptography)», которая также известна как постквантовая криптография.&lt;/p>
&lt;h3 id="интуитивное-понимание-задачи-lwe">Интуитивное понимание задачи LWE
&lt;/h3>&lt;p>Решение системы линейных уравнений является простой задачей, если использовать такие методы, как метод исключения Гаусса.&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Но что произойдет, если к результатам этих уравнений добавить крошечную «случайную ошибку (шум)» $e$?&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Добавление только этой ошибки $e$ превращает задачу нахождения секретного вектора переменных $\vec{s}$ в NP-трудную задачу, которую трудно взломать даже с помощью современных суперкомпьютеров или квантовых компьютеров. Это и есть задача LWE.&lt;/p>
&lt;h3 id="задача-ring-lwe-rlwe">Задача Ring-LWE (RLWE)
&lt;/h3>&lt;p>Стандартная задача LWE включает в себя матричные операции, поэтому она имела проблему огромных размеров ключей (которые могли достигать гигабайт) и низкой вычислительной эффективности. Для решения этой проблемы была введена &lt;strong>задача Ring-LWE (RLWE)&lt;/strong>, которая использует операции над кольцами многочленов.&lt;/p>
&lt;p>В RLWE элементы принадлежат кольцу многочленов $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ (где $N$ — степень двойки, а $q$ — простое число, выступающее в качестве модуля).
Если закрытый ключ является многочленом $s(x)$, а случайный многочлен — $a(x)$, и небольшой многочлен шума — $e(x)$, то открытый ключ будет представлять собой следующую пару:&lt;/p>
$$ (a(x), b(x)) \quad \text{where} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>При шифровании открытый текст $m(x)$ кодируется с использованием свойств этого многочлена для генерации шифротекста.&lt;/p>
&lt;hr>
&lt;h2 id="4-самое-большое-препятствие-шум-и-bootstrapping-джентри">4. Самое большое препятствие «Шум» и Bootstrapping Джентри
&lt;/h2>&lt;p>Самая важная концепция в понимании FHE — это &lt;strong>«управление шумом»&lt;/strong>.&lt;/p>
&lt;p>Шифры на основе LWE/RLWE преднамеренно включают небольшой «шум (ошибку)» для обеспечения безопасности.
Процесс дешифрования шифротекста $c$ открытого текста $m$, грубо говоря, выражается следующей формулой:&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>При дешифровании этот &lt;code>noise&lt;/code> (шум) удаляется посредством округления, в результате чего получается правильный открытый текст $m$. Однако при выполнении гомоморфных операций (особенно умножения) между шифротекстами этот шум резко возрастает.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Гомоморфное сложение&lt;/strong>: Шум увеличивается аддитивно ($e_1 + e_2$). Это относительно постепенное увеличение.&lt;/li>
&lt;li>&lt;strong>Математическое выражение гомоморфизма посредством гомоморфного сложения&lt;/strong>:
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>Гомоморфное умножение&lt;/strong>: Шум возрастает мультипликативно взрывным образом (поскольку он включает $e_1 \times e_2$ и т. д.). После всего нескольких умножений шум превышает порог $q/2$, в результате чего невозможно выполнить правильное округление, и дешифрование завершается неудачей.&lt;/li>
&lt;li>&lt;strong>Математическое выражение гомоморфизма посредством гомоморфного умножения&lt;/strong>:
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>Именно поэтому FHE долгое время не удавалось реализовать, и все ограничивалось SHE (с ограничением количества операций).&lt;/p>
&lt;h3 id="магия-bootstrapping-перезагрузки">Магия Bootstrapping (перезагрузки)
&lt;/h3>&lt;p>Гениальный вклад Крейга Джентри заключается в изобретении метода снижения шума, называемого &lt;strong>«bootstrapping»&lt;/strong>. Это был сдвиг парадигмы в криптографии.&lt;/p>
&lt;p>Интуитивно это операция: «прежде чем шифротекст будет поврежден, наполнившись шумом, &amp;lsquo;расшифровать&amp;rsquo; его, оставаясь в зашифрованном состоянии, очистить его и поместить в новый шифротекст».&lt;/p>
&lt;ol>
&lt;li>Допустим, есть шифротекст с высоким уровнем шума $C_{noisy}$.&lt;/li>
&lt;li>Клиент заранее передает серверу «зашифрованный с помощью открытого ключа» закрытый ключ $sk$, $E_{pk}(sk)$ (называемый ключом bootstrapping).&lt;/li>
&lt;li>Сервер гомоморфно выполняет &lt;strong>схему дешифрования (Decryption Circuit)&lt;/strong> над $C_{noisy}$.&lt;/li>
&lt;li>В частности, он выполняет «дешифрование в зашифрованном пространстве» для $E_{pk}(C_{noisy})$ с использованием $E_{pk}(sk)$.&lt;/li>
&lt;li>Поскольку сама эта схема дешифрования также является гомоморфной операцией, она генерирует новый шум, но шум результирующего нового шифротекста $C_{fresh}$ сбрасывается до определенного «фиксированного уровня».&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Шифротекст с высоким шумом C_noisy"] --> B["Гомоморфная схема дешифрования (Eval_Dec)"]
C["Зашифрованный закрытый ключ E(sk)"] --> B
B --> D["Шифротекст с низким шумом C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>Периодически выполняя этот bootstrapping в процессе вычислений, теоретически стало возможным вычислять схемы бесконечной глубины (достижение FHE). Однако в первоначальном методе Джентри эта операция bootstrapping занимала от нескольких десятков минут до нескольких часов на один раз, что было катастрофически затратно в вычислительном плане.&lt;/p>
&lt;hr>
&lt;h2 id="5-поколения-fhe-и-эволюция-основных-схем">5. Поколения FHE и эволюция основных схем
&lt;/h2>&lt;p>В целях практического применения FHE криптографы со всего мира соревновались в совершенствовании алгоритмов. В настоящее время FHE классифицируется в основном на четыре поколения/семейства.&lt;/p>
&lt;h3 id="второе-поколение-точные-операции-над-целыми-числами-bgv-bfv">Второе поколение: Точные операции над целыми числами (BGV, BFV)
&lt;/h3>&lt;p>Схемы &lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> и &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong> появились в 2011–2012 годах. Они основаны на RLWE и подходят для модульных арифметических операций над целыми числами (точные вычисления).
Они поддерживают методы пакетирования (Batching), такие как SIMD (Single Instruction, Multiple Data), и характеризуются способностью упаковывать тысячи слотов данных в один огромный полиномиальный шифротекст и вычислять их параллельно за один раз.&lt;/p>
&lt;h3 id="третье-поколение-ускорение-bootstrapping-gsw-fhew-tfhe">Третье поколение: Ускорение Bootstrapping (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>Схема &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> 2013 года упростила структуру FHE. Ее развитием является &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong>, одно из современных основных направлений.
Особенностью TFHE является чрезвычайно быстрый bootstrapping (в миллисекундах). Он эффективен при выполнении операций на уровне логических вентилей (логические схемы, такие как AND, XOR) и имеет относительно небольшой размер шифротекста, что делает его подходящим для быстрой оценки любых логических схем.&lt;/p>
&lt;h3 id="четвертое-поколение-специализация-на-приближенных-вычислениях-и-машинном-обучении-ckks">Четвертое поколение: Специализация на приближенных вычислениях и машинном обучении (CKKS)
&lt;/h3>&lt;p>Схема &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong>, предложенная Cheon и соавторами в 2017 году, может считаться окончательной технологией для защиты конфиденциальности в современном ИИ и машинном обучении.
В то время как предыдущие FHE фокусировались на «точных целочисленных вычислениях», CKKS поддерживает &lt;strong>«приближенные вычисления чисел с плавающей запятой»&lt;/strong> в зашифрованном виде. Он демонстрирует невероятную производительность в вычислениях над вещественными числами, где допускаются небольшие ошибки, таких как обучение и логический вывод нейронных сетей.&lt;/p>
&lt;p>В следующей таблице обобщено, как выбрать схему в зависимости от цели.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Имя схемы&lt;/th>
&lt;th style="text-align:left">Подходящий тип данных&lt;/th>
&lt;th style="text-align:left">Рекомендуемые варианты использования&lt;/th>
&lt;th style="text-align:left">Особенности&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Целые числа (Integer)&lt;/td>
&lt;td style="text-align:left">Точные статистические расчеты, агрегация финансовых данных, поиск в БД&lt;/td>
&lt;td style="text-align:left">Высокая пропускная способность за счет пакетирования SIMD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Вещественные числа (Real/Complex)&lt;/td>
&lt;td style="text-align:left">Машинное обучение (DNN, логистическая регрессия), обработка сигналов&lt;/td>
&lt;td style="text-align:left">Ускорение за счет приближенных вычислений, масштабирование (rescaling)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Булевы значения (Boolean)&lt;/td>
&lt;td style="text-align:left">Любые логические схемы, поиск по строкам, оценка нелинейных функций&lt;/td>
&lt;td style="text-align:left">Сверхбыстрый bootstrapping (на уровне миллисекунд)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-практика-библиотеки-fhe-и-концептуальный-код">6. Практика: Библиотеки FHE и концептуальный код
&lt;/h2>&lt;p>В настоящее время доступно множество библиотек с открытым исходным кодом, которые позволяют использовать FHE без глубоких знаний криптографии.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong>: Библиотека C++, поддерживающая BFV, BGV и CKKS. Один из отраслевых стандартов. Ее привязка для Python, &lt;strong>TenSEAL&lt;/strong>, популярна среди инженеров ИИ.&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong>: Фреймворк на базе TFHE. Может быть написан на Rust/Python, предоставляет функциональность (Concrete ML) для компиляции существующих моделей PyTorch для работы поверх FHE.&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong>: Преемник PALISADE, комплексная библиотека C++, поддерживающая все основные схемы.&lt;/li>
&lt;/ul>
&lt;h3 id="пример-программирования-fhe-на-python-tenseal">Пример программирования FHE на Python (TenSEAL)
&lt;/h3>&lt;p>Здесь показан концептуальный пример кода на Python, использующий схему CKKS для сложения и умножения векторов вещественных чисел в зашифрованном виде.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. Настройка контекста (включая генерацию ключей)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Использование схемы CKKS и установка степени полинома 8192&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="c1"># Коэффициент масштабирования для вещественных чисел&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. Сторона клиента: Шифрование данных&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Преобразование векторов открытого текста в шифротекст (Обычно выполняется на стороне клиента)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. Сторона сервера: Операции в зашифрованном виде (Защита Data in Use)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Сервер не знает открытого текста, но может выполнять сложение и умножение&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. Сторона клиента: Дешифрование результатов&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Только клиент с закрытым ключом может видеть результат&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Расшифрованный результат сложения: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Пример вывода: [3.5000001, 5.5000001, 7.5000002] (Включает небольшие ошибки из-за приближенных вычислений)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Расшифрованный результат умножения: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Пример вывода: [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Как видно из приведенного выше кода, можно интуитивно описывать вычисления между шифротекстами путем перегрузки обычных операторов Python, например, &lt;code>enc_v1 + enc_v2&lt;/code>. На стороне сервера векторные операции завершаются без знания содержимого векторов.&lt;/p>
&lt;hr>
&lt;h2 id="7-проблемы-fhe-производительность-и-аппаратное-ускорение">7. Проблемы FHE: Производительность и аппаратное ускорение
&lt;/h2>&lt;p>Хотя FHE обеспечивает теоретически идеальную безопасность, самой большой проблемой на пути к практическому применению являются &lt;strong>«накладные расходы на производительность»&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Вычислительные накладные расходы&lt;/strong>: По сравнению с вычислениями с открытым текстом вычисления с шифротекстом на CPU медленнее в тысячи и десятки тысяч раз. Умножение полиномов и bootstrapping требуют огромных вычислений БПФ (быстрого преобразования Фурье) и NTT (теоретико-числового преобразования).&lt;/li>
&lt;li>&lt;strong>Увеличение размера данных (Ciphertext Expansion)&lt;/strong>: Несколько байтов открытого текста при шифровании могут превратиться в несколько мегабайтов. Это создает большую нагрузку на пропускную способность памяти и сети.&lt;/li>
&lt;/ol>
&lt;h3 id="подходы-к-аппаратному-решению">Подходы к аппаратному решению
&lt;/h3>&lt;p>Чтобы преодолеть эти накладные расходы, по всему миру разрабатываются аппаратные ускорители (соответствующие ASIC, FPGA, GPU), специально предназначенные для FHE.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Ускорение на GPU&lt;/strong>: Ведутся работы по распараллеливанию вычислений NTT и bootstrapping с использованием мощных графических процессоров, таких как от NVIDIA, и сообщается об ускорении в десятки раз по сравнению с программными реализациями (например, 100x.ai, TFHE-rs CUDA backend от Zama).&lt;/li>
&lt;li>&lt;strong>Проект DARPA DPRIVE&lt;/strong>: Агентство передовых исследований проектов обороны США (DARPA) продвигает проект разработки специализированного аппаратного обеспечения «DPRIVE (Data Protection in Virtual Environments)», чтобы повысить скорость вычислений FHE до уровня скорости обработки открытого текста (с накладными расходами в пределах 10-кратного увеличения), в котором участвуют Intel, Microsoft, Intellectual Ventures и другие.&lt;/li>
&lt;li>&lt;strong>Появление FPU (FHE Processing Unit)&lt;/strong>: Стартапы, такие как Cornami и Optalysys, приступили к разработке специализированных чипов для FHE с использованием оптических вычислений и специальной кремниевой архитектуры.&lt;/li>
&lt;/ul>
&lt;p>Возможно, в ближайшем будущем наступит эпоха, когда «FPU» будут стандартно устанавливаться в серверах и облачной инфраструктуре, подобно NPU (Neural Processing Unit) в ИИ.&lt;/p>
&lt;hr>
&lt;h2 id="8-ожидаемые-варианты-использования">8. Ожидаемые варианты использования
&lt;/h2>&lt;p>Теперь, когда FHE приближается к практической скорости, ожидаются прорывные инновации в следующих областях.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Защита конфиденциальности в медицинском и геномном анализе&lt;/strong>:
Обучая ИИ в облаке на медицинских картах пациентов или данных ДНК из нескольких больниц в зашифрованном с помощью FHE виде, можно разрабатывать высокоточные модели диагностики рака или новые лекарства без нарушения законов о конфиденциальности (HIPAA или GDPR).&lt;/li>
&lt;li>&lt;strong>Выявление мошенничества и борьба с отмыванием денег (AML) в финансовых учреждениях&lt;/strong>:
Конкурирующие банки могут сверять данные друг друга в зашифрованном состоянии, не раскрывая информацию о счетах клиентов или историю транзакций, обеспечивая межбанковский анализ для выявления огромных сетей мошеннических переводов.&lt;/li>
&lt;li>&lt;strong>Безопасный API вывода ИИ (MaaS: Model as a Service)&lt;/strong>:
Пользователи шифруют свой голос, изображения лиц или промпты и отправляют их в сервисы ИИ (такие как LLM, например, ChatGPT). Провайдер ИИ генерирует ответ, не зная ввода пользователя, и возвращает его в виде шифротекста. Это полностью устраняет опасения, что «ИИ может изучить или украсть личную информацию».&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-заключение-будущее-криптографии-лежит-в-невидимых-вычислениях">9. Заключение: Будущее криптографии лежит в «Невидимых вычислениях»
&lt;/h2>&lt;p>Точно так же, как изобретение криптографии с открытым ключом (RSA) в 1970-х годах сделало возможной безопасную связь в Интернете (например, HTTPS), изобретение FHE Крейгом Джентри является одной из самых важных вех в истории криптографии.&lt;/p>
&lt;p>Сегодня полностью гомоморфное шифрование (FHE) вышло из лабораторной теории, и Microsoft, IBM, Intel, Google и множество стартапов вступили в стадию жесткой конкуренции за его практическое применение. Проблемы с вычислительными затратами и размером данных по-прежнему существуют, но благодаря совершенствованию алгоритмов и эволюции аппаратных ускорителей производительность продолжает улучшаться темпами, превышающими закон Мура.&lt;/p>
&lt;p>Через несколько лет «вычисление зашифрованных данных» больше не будет чем-то особенным, а станет стандартной передовой практикой защиты данных в облачных сервисах. FHE — это основа безопасности следующего поколения, которая реализует &lt;strong>окончательную совместимость конфиденциальности и использования данных&lt;/strong> в обществе, управляемом данными.&lt;/p></description></item></channel></rss>