<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Homomorphic Encryption on kenji.blog</title><link>http://kenji.blog/ru/tags/homomorphic-encryption/</link><description>Recent content in Homomorphic Encryption on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 11:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/homomorphic-encryption/index.xml" rel="self" type="application/rss+xml"/><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>