<?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/tags/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 17:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Блокчейн и криптовалюты в постквантовую эру: что изменится?</title><link>http://kenji.blog/ru/p/post-quantum-blockchain-and-crypto/</link><pubDate>Fri, 11 Sep 2026 17:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/post-quantum-blockchain-and-crypto/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-blockchain-and-crypto/img/eyecatch.jpg" alt="Featured image of post Блокчейн и криптовалюты в постквантовую эру: что изменится?" />&lt;h2 id="1-введение-приближение-постквантовой-эры-и-кризис-блокчейна">1. Введение: Приближение постквантовой эры и кризис блокчейна
&lt;/h2>&lt;p>С момента создания Биткоина (Bitcoin) Сатоши Накамото в 2009 году, технология блокчейн выросла в основу финансовых систем и приложений по всему миру как «децентрализованный реестр, устойчивый к фальсификациям». Эта надежная безопасность опирается на современную криптографию: &lt;strong>криптографию с открытым ключом (Public Key Cryptography)&lt;/strong> и &lt;strong>криптографические хеш-функции (Cryptographic Hash Functions)&lt;/strong>.&lt;/p>
&lt;p>Эти криптографические технологии гарантируют безопасность на основе математической «вычислительной сложности», подразумевающей, что классическим компьютерам (ПК и суперкомпьютерам, которые мы используем сегодня) потребовалось бы время, сравнимое с возрастом Вселенной, для их взлома.&lt;/p>
&lt;p>Однако это предположение вот-вот будет фундаментально опровергнуто стремительным развитием и практическим применением &lt;strong>квантовых компьютеров (Quantum Computers)&lt;/strong> — передового рубежа физики и информатики. Используя квантово-механические явления, такие как «суперпозиция (Superposition)» и «квантовая запутанность (Entanglement)», квантовые компьютеры демонстрируют вычислительную мощь, превосходящую традиционные классические компьютеры в определенных математических задачах, что называется «квантовым превосходством (Quantum Supremacy)».&lt;/p>
&lt;p>В этой статье мы глубоко и детально, с технической и математической точек зрения, рассмотрим, с какими конкретными угрозами со стороны квантовых компьютеров сталкивается технология блокчейн, а также новейшие тенденции в области &lt;strong>постквантовой криптографии (PQC: Post-Quantum Cryptography)&lt;/strong> как решения этой проблемы, и сценарии миграции криптовалютных сетей.&lt;/p>
&lt;hr>
&lt;h2 id="2-основы-квантовых-компьютеров-и-две-главные-угрозы-для-блокчейна">2. Основы квантовых компьютеров и две главные угрозы для блокчейна
&lt;/h2>&lt;p>Современные блокчейн-системы в основном состоят из следующих двух криптографических элементов, каждый из которых подвержен различным угрозам со стороны квантовых алгоритмов.&lt;/p>
&lt;div class="mermaid">graph TD
A["Невероятная вычислительная мощность квантовых компьютеров"] --> B["Алгоритм Шора (Shor's Algorithm)"]
A --> C["Алгоритм Гровера (Grover's Algorithm)"]
B --> D["Крах криптографии с открытым ключом (ECDSA/RSA/DSA)"]
C --> E["Влияние на криптографические хеш-функции (SHA-256)"]
D --> F["Определение чужого закрытого ключа и подделка транзакций"]
E --> G["Преимущество в майнинге PoW и атаки на некоторые адреса"]
F --> H["Фатальная и прямая угроза в блокчейне"]
G --> I["Угроза, решаемая настройкой алгоритма (например, увеличением длины ключа)"]
style H fill:#ff9999,stroke:#cc0000,stroke-width:2px;
style I fill:#ffff99,stroke:#cccc00,stroke-width:2px;&lt;/div>
&lt;h3 id="21-основы-криптографии-на-эллиптических-кривых-ecdsa-и-вычислительная-сложность">2.1. Основы криптографии на эллиптических кривых (ECDSA) и вычислительная сложность
&lt;/h3>&lt;p>Многие блокчейны, включая Bitcoin и Ethereum, используют &lt;strong>алгоритм цифровой подписи на эллиптических кривых (ECDSA: Elliptic Curve Digital Signature Algorithm)&lt;/strong> в качестве алгоритма цифровой подписи. В частности, Биткоин использует эллиптическую кривую с параметрами &lt;code>secp256k1&lt;/code>.&lt;/p>
&lt;p>Безопасность криптографии на эллиптических кривых зависит от вычислительной сложности &lt;strong>задачи дискретного логарифмирования на эллиптической кривой (ECDLP: Elliptic Curve Discrete Logarithm Problem)&lt;/strong>.
Эллиптическая кривая определяется уравнением в нормальной форме Вейерштрасса:&lt;/p>
$$
y^2 \equiv x^3 + ax + b \pmod{p}
$$
&lt;p>В &lt;code>secp256k1&lt;/code> Биткоина $a = 0, b = 7$, а $p$ — очень большое простое число.
Пусть базовая точка на этой кривой равна $G$, а закрытый ключ $k$ — это огромное случайно выбранное 256-битное целое число. Тогда открытый ключ $K$ находится путем сложения базовой точки $G$ с самой собой $k$ раз (скалярное умножение).&lt;/p>
$$
K = k \times G = \underbrace{G + G + \dots + G}_{k \text{ раз}}
$$
&lt;p>Использование классического компьютера для обратного вычисления закрытого ключа $k$ (нахождение дискретного логарифма) из известного открытого ключа $K$ и базовой точки $G$ требует экспоненциального времени вычислений $\mathcal{O}(\sqrt{p})$ даже при использовании лучших классических алгоритмов, таких как ро-алгоритм Полларда. Для 256-битного ключа потребуется около $2^{128}$ операций, что является уровнем, который современные суперкомпьютеры не смогли бы решить, даже проработав миллиарды лет.&lt;/p>
&lt;h3 id="22-крах-из-за-алгоритма-шора-shors-algorithm">2.2. Крах из-за алгоритма Шора (Shor&amp;rsquo;s Algorithm)
&lt;/h3>&lt;p>Однако &lt;strong>алгоритм Шора&lt;/strong>, опубликованный Питером Шором в 1994 году, полностью разрушил это предположение. Изначально алгоритм Шора был предложен для решения задачи факторизации (основы криптографии RSA) за полиномиальное время, но он также применим к задаче дискретного логарифмирования и задаче дискретного логарифмирования на эллиптической кривой.&lt;/p>
&lt;p>Суть алгоритма Шора заключается в использовании &lt;strong>квантового преобразования Фурье (QFT: Quantum Fourier Transform)&lt;/strong> для быстрого нахождения «периода (Period)» функции.&lt;/p>
$$
\text{Классическая сложность вычислений} = \mathcal{O}(2^{n/2}) \quad (n\text{ — длина в битах})
$$
$$
\text{Сложность квантового алгоритма} = \mathcal{O}(n^3)
$$
&lt;p>Таким образом, алгоритм Шора радикально сокращает время с экспоненциального до &lt;strong>полиномиального (Polynomial Time)&lt;/strong>. Если будет создан квантовый компьютер с достаточным количеством логических кубитов, он сможет определить закрытый ключ $k$ из опубликованного в сети открытого ключа $K$ за несколько минут или секунд. Это позволит злоумышленникам легко получать закрытые ключи от чужих кошельков и полностью контролировать их средства.&lt;/p>
&lt;h4 id="221-пошаговый-взлом-ecdlp-с-помощью-алгоритма-шора">2.2.1 Пошаговый взлом ECDLP с помощью алгоритма Шора
&lt;/h4>&lt;p>Давайте шаг за шагом рассмотрим внутренний процесс того, как квантовый компьютер решает задачу дискретного логарифмирования на эллиптической кривой (ECDLP).&lt;/p>
&lt;p>Постановка задачи: В $K = k \times G$, где $G$ и $K$ известны, мы хотим найти неизвестное целое число $k$ (закрытый ключ). Пусть порядок эллиптической кривой равен $N$.&lt;/p>
&lt;p>&lt;strong>Шаг 1: Создание состояния суперпозиции&lt;/strong>
Сначала мы подготавливаем два квантовых регистра и применяем к каждому из них вентиль Адамара (Hadamard Gate), чтобы создать состояние суперпозиции всех возможных комбинаций целых чисел.
&lt;/p>
$$
|\psi_1\rangle = \frac{1}{N} \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} |x\rangle |y\rangle |0\rangle
$$
&lt;p>&lt;strong>Шаг 2: Применение квантового оракула (вычисление функции)&lt;/strong>
Затем с помощью квантовой цепи (оракула), которая выполняет сложение точек на эллиптической кривой, мы вычисляем функцию $f(x, y) = x \times G + y \times K$ в третьем регистре.
&lt;/p>
$$
|\psi_2\rangle = \frac{1}{N} \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} |x\rangle |y\rangle |x \times G + y \times K\rangle
$$
&lt;p>
Здесь важно то, что, поскольку $K = k \times G$, это можно переписать как $f(x, y) = (x + y \cdot k) \times G$.&lt;/p>
&lt;p>&lt;strong>Шаг 3: Измерение третьего регистра&lt;/strong>
Когда мы измеряем третий регистр, он коллапсирует в некоторую точку $R$ на эллиптической кривой. В результате первый и второй регистры коллапсируют в состояние суперпозиции пар $(x, y)$, которые удовлетворяют условию $x + y \cdot k \equiv c \pmod{N}$ (где $c$ — константа).
&lt;/p>
$$
|\psi_3\rangle = \frac{1}{\sqrt{N}} \sum_{y=0}^{N-1} |c - y \cdot k \pmod{N}\rangle |y\rangle
$$
&lt;p>&lt;strong>Шаг 4: Применение квантового преобразования Фурье (QFT)&lt;/strong>
Это состояние имеет периодичность, связанную с периодом $k$. Применяя к нему обратное квантовое преобразование Фурье (Inverse QFT), мы вызываем фазовую интерференцию и преобразуем информацию о периоде в амплитуду.&lt;/p>
&lt;p>&lt;strong>Шаг 5: Измерение и классическая постобработка&lt;/strong>
Когда мы измеряем первый и второй регистры, с высокой вероятностью получается значение, содержащее информацию о $k$. Применяя классические теоретико-числовые алгоритмы, такие как разложение в непрерывные дроби (Continued Fractions), к измеренным значениям, можно полностью определить неизвестный закрытый ключ $k$.&lt;/p>
&lt;p>Количество квантовых вентилей, требуемых для всего этого процесса, составляет $\mathcal{O}(\log^3 N)$, что позволяет раскрывать закрытые ключи с молниеносной скоростью по сравнению с классическим поиском компьютера за $\mathcal{O}(\sqrt{N})$.&lt;/p>
&lt;h3 id="23-алгоритм-гровера-grovers-algorithm-и-влияние-на-хеш-функции">2.3. Алгоритм Гровера (Grover&amp;rsquo;s Algorithm) и влияние на хеш-функции
&lt;/h3>&lt;p>Еще одна угроза — &lt;strong>алгоритм Гровера&lt;/strong>, предложенный Ловом Гровером в 1996 году. Он оказывает значительное влияние на хеш-функции (например, SHA-256).&lt;/p>
&lt;p>В блокчейне хеш-функции используются для обеспечения целостности данных, генерации адресов, а также в качестве основы для майнинга &lt;strong>PoW (Proof of Work)&lt;/strong> в Биткоине. Обратное вычисление хеш-функции (нахождение прообраза) можно рассматривать как «задачу поиска в неструктурированной базе данных», где ищется входное значение $x$, для которого $H(x) = y$ при заданном выходном значении $y$.&lt;/p>
&lt;p>На классическом компьютере, чтобы найти правильный ответ из $N$ вариантов, требуется в среднем $\frac{N}{2}$ и в худшем случае $N$ попыток. Иными словами, сложность составляет $\mathcal{O}(N)$.
Однако алгоритм Гровера использует квантовый метод, называемый «усилением амплитуды (Amplitude Amplification)». Итеративно усиливая амплитуду вероятности правильного состояния среди всех возможных состояний в суперпозиции, он сокращает время поиска до квадратного корня.&lt;/p>
$$
\text{Сложность алгоритма Гровера} = \mathcal{O}(\sqrt{N})
$$
&lt;p>Для SHA-256 $N = 2^{256}$, поэтому классический поиск полным перебором требует около $2^{256}$ попыток. Однако при использовании алгоритма Гровера потребуется всего $\sqrt{2^{256}} = 2^{128}$ попыток. Это означает, что для квантового компьютера криптографическая стойкость 256-битной хеш-функции &lt;strong>фактически снижается вдвое, до уровня 128 бит&lt;/strong>.&lt;/p>
&lt;h4 id="231-выживет-ли-sha-256-quantum-supremacy-in-hashing">2.3.1. Выживет ли SHA-256? (Quantum Supremacy in Hashing)
&lt;/h4>&lt;p>Хотя безопасность уменьшается вдвое, «128-битная безопасность» все еще остается чрезвычайно надежной. $2^{128}$ операций — это астрономическое число даже при нынешнем уровне технологий, для выполнения которого потребуется время в масштабах жизни Вселенной.
Поэтому широко распространено мнение, что &lt;strong>«SHA-256 сохранит практическую безопасность даже против квантовых компьютеров»&lt;/strong>. Если в будущем потребуется увеличить запас прочности безопасности, то простое удвоение длины выходного хеша (например, переход от SHA-256 к SHA-512) позволит сохранить 256-битный уровень классической безопасности в квантовом мире.&lt;/p>
&lt;p>В заключение можно сказать, что квантовая угроза для хеш-функций «незначительна и решаема», тогда как угроза для криптографии с открытым ключом (ECDSA) является «фатальной».&lt;/p>
&lt;hr>
&lt;h2 id="3-анализ-конкретного-влияния-на-современные-криптоактивы-bitcoin-ethereum">3. Анализ конкретного влияния на современные криптоактивы (Bitcoin, Ethereum)
&lt;/h2>&lt;p>С какими конкретными уязвимостями столкнутся сети криптовалют в мире, где ECDSA можно будет взломать с помощью квантового компьютера? Здесь мы проведем подробный анализ на примере механизма Биткоина с точки зрения &lt;strong>«момента раскрытия открытого ключа»&lt;/strong>.&lt;/p>
&lt;h3 id="31-генерация-адреса-и-непубличность-открытого-ключа">3.1. Генерация адреса и «непубличность» открытого ключа
&lt;/h3>&lt;p>Адреса Биткоина (P2PKH: Pay-to-Public-Key-Hash или P2WPKH: Pay-to-Witness-Public-Key-Hash) не являются самими открытыми ключами, а представляют собой результат многократного хеширования открытого ключа.&lt;/p>
$$
\text{Bitcoin Address} = \text{Base58Check}(\text{RIPEMD160}(\text{SHA256}(\text{Public Key})))
$$
&lt;p>Как упоминалось ранее, поскольку хеш-функции устойчивы к квантовым атакам (алгоритм Гровера), обратное вычисление исходного «открытого ключа» из хеш-значения («адреса») невозможно даже для квантового компьютера.
То есть, для &lt;strong>«неиспользованных адресов (с которых никогда не отправлялись средства)»&lt;/strong> открытый ключ вообще не представлен в блокчейне, записано только хеш-значение. Таким образом, пока открытый ключ неизвестен, не существует цели для выполнения алгоритма Шора, и закрытый ключ не может быть определен. Кошелек в этом состоянии можно считать квантово-безопасным (Quantum-safe).&lt;/p>
&lt;h3 id="32-фатальная-уязвимость-при-отправке-транзакции-атака-фронтраннинга">3.2. Фатальная уязвимость при отправке транзакции (атака фронтраннинга)
&lt;/h3>&lt;p>Проблема возникает в тот момент, когда пользователь отправляет средства.
При широковещательной рассылке (отправке) транзакции в сеть пользователь должен включить &lt;strong>свой открытый ключ в данные транзакции и опубликовать его для всей сети&lt;/strong> для проверки вместе с цифровой подписью.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant User as "Пользователь (Алиса)"
participant Mempool as "Mempool (Пул неподтвержденных транзакций)"
participant QuantumAttacker as "Квантовый злоумышленник"
participant Miner as "Майнер (Создание блока)"
User->>Mempool: Отправка транзакции (включает открытый ключ + подпись)
Mempool-->>QuantumAttacker: Перехват открытого ключа в сети
note right of QuantumAttacker: Выполнение алгоритма Шора за несколько минут&lt;br/>(Вычисление закрытого ключа из открытого ключа)
QuantumAttacker->>QuantumAttacker: Создание новой подписи с использованием закрытого ключа Алисы
QuantumAttacker->>Mempool: Широковещательная рассылка мошеннической транзакции с более высокой комиссией
Miner->>Miner: Приоритетное включение мошеннической транзакции с высокой комиссией (Gas) в блок
Miner-->>User: Запись в блокчейн (Потеря средств Алисы)&lt;/div>
&lt;p>Как только открытый ключ попадает в Mempool (место ожидания неподтвержденных транзакций), эти данные передаются узлам по всему миру. Если у злоумышленника есть сверхбыстрый квантовый компьютер, он может украсть средства с помощью следующего процесса:&lt;/p>
&lt;ol>
&lt;li>Перехватить транзакцию легитимного пользователя (Алисы) в Mempool и &lt;strong>извлечь открытый ключ&lt;/strong>.&lt;/li>
&lt;li>Выполнить алгоритм Шора и &lt;strong>вычислить закрытый ключ из открытого ключа за несколько минут&lt;/strong> (до того, как блок будет подтвержден).&lt;/li>
&lt;li>Используя полученный закрытый ключ, &lt;strong>создать фальшивую транзакцию&lt;/strong>, которая переводит средства Алисы на адрес злоумышленника.&lt;/li>
&lt;li>Отправить эту фальшивую транзакцию в сеть с &lt;strong>гораздо более высокой комиссией майнеру (Fee)&lt;/strong>, чем у исходной транзакции Алисы.&lt;/li>
&lt;/ol>
&lt;p>Майнеры, следуя экономическим стимулам, будут отдавать приоритет транзакциям с более высокими комиссиями при их включении в блок. В результате мошеннический перевод злоумышленника будет подтвержден (Confirm) первым, а законный перевод Алисы будет отклонен как попытка «двойной траты (Double Spend)».
Эта последовательность действий называется &lt;strong>атакой фронтраннинга (Front-running Attack)&lt;/strong>, и в мире, где квантовые компьютеры станут реальностью, это приведет к ужасающей ситуации, когда средства будут украдены хакерами в ту же секунду, как кто-то нажмет кнопку «отправить».&lt;/p>
&lt;h3 id="33-опасность-повторного-использования-адресов-и-старых-адресов-p2pk">3.3. Опасность повторного использования адресов и старых адресов (P2PK)
&lt;/h3>&lt;p>Еще более серьезная проблема заключается в том, что адреса, которые использовались для перевода средств хотя бы раз в прошлом (например, повторно используемые в качестве адресов для сдачи), уже навсегда сохранили свой открытый ключ в блокчейне. Эти адреса находятся под угрозой того, что их закрытый ключ будет вычислен, а баланс украден в любой момент, даже без ожидания отправки транзакции.&lt;/p>
&lt;p>Кроме того, в формате &lt;strong>P2PK (Pay-to-Public-Key)&lt;/strong>, который был популярен примерно в 2009–2010 годах, открытый ключ напрямую записывался в блокчейн в качестве адреса, а не его хеш. Сюда входят ранние награды Сатоши Накамото за майнинг (более 1 миллиона BTC). Эти огромные запасы «спящих» биткоинов станут самой легкой мишенью для квантовых компьютеров; они могут быть украдены все разом и сброшены на рынок, что приведет к катастрофическому обвалу цен.&lt;/p>
&lt;hr>
&lt;h2 id="4-сценарий-перехода-на-постквантовую-криптографию-pqc-post-quantum-cryptography">4. Сценарий перехода на постквантовую криптографию (PQC: Post-Quantum Cryptography)
&lt;/h2>&lt;p>Чтобы избежать катастрофы «Q-Day» (дня, когда квантовые компьютеры взломают криптографию), криптографическое сообщество и сообщество блокчейна планируют переход на &lt;strong>постквантовую криптографию (PQC)&lt;/strong>, которую трудно взломать даже с помощью квантовых алгоритмов.
Национальный институт стандартов и технологий США (NIST) на протяжении многих лет проводит процесс стандартизации PQC, и после нескольких раундов строгой оценки несколько перспективных схем шифрования были выбраны в качестве окончательных стандартов.&lt;/p>
&lt;p>Ниже приводится подробное описание, включая математические механизмы, основных алгоритмов PQC, которые привлекают внимание как альтернативы цифровым подписям в блокчейне.&lt;/p>
&lt;h3 id="41-подписи-на-основе-хешей-hash-based-signatures">4.1. Подписи на основе хешей (Hash-Based Signatures)
&lt;/h3>&lt;p>Подписи на основе хешей — это криптографическая схема, безопасность которой зависит исключительно от очень простой и надежной основы: «устойчивости хеш-функций к коллизиям». Поскольку устойчивость хеш-функций к квантовым компьютерам уже доказана (как упоминалось ранее, запаса безопасности в 128 бит вполне достаточно), это очень надежный подход.
Типичными примерами являются &lt;strong>подпись Лэмпорта (Lamport Signatures)&lt;/strong>, ее расширение WOTS (Winternitz One-Time Signature), а также кандидат на стандартизацию NIST &lt;strong>SPHINCS+&lt;/strong> (в настоящее время называемый SLH-DSA в рамках FIPS 205).&lt;/p>
&lt;h4 id="411-математические-детали-подписи-лэмпорта-one-time-signature">4.1.1. Математические детали подписи Лэмпорта (One-Time Signature)
&lt;/h4>&lt;p>Давайте подробнее рассмотрим математику подписи Лэмпорта.
Пусть хеш-функция будет $H: \{0, 1\}^* \to \{0, 1\}^{256}$.&lt;/p>
&lt;p>&lt;strong>[Генерация ключей]&lt;/strong>
Алиса (отправитель) использует аппаратный генератор случайных чисел (TRNG) для генерации 256 пар закрытых ключей.
&lt;/p>
$$
\text{sk}_{i,0} \in \{0, 1\}^{256}, \quad \text{sk}_{i,1} \in \{0, 1\}^{256} \quad (1 \le i \le 256)
$$
&lt;p>
В результате закрытый ключ $\text{sk}$ состоит в общей сложности из 512 строк по 256 бит (размер: $512 \times 32 = 16 384$ байта).&lt;/p>
&lt;p>Затем она вычисляет открытый ключ $\text{pk}$. Каждый компонент закрытого ключа хешируется.
&lt;/p>
$$
\text{pk}_{i,0} = H(\text{sk}_{i,0}), \quad \text{pk}_{i,1} = H(\text{sk}_{i,1})
$$
&lt;p>
Размер открытого ключа также составляет $16 384$ байта. Он публикуется в сети блокчейн.&lt;/p>
&lt;p>&lt;strong>[Создание подписи]&lt;/strong>
Чтобы подписать данные транзакции $M$, Алиса сначала вычисляет их хеш-значение.
&lt;/p>
$$
h = H(M) \in \{0, 1\}^{256}
$$
&lt;p>
Обозначим $i$-й бит хеш-значения $h$ как $h_i \in \{0, 1\}$.
Подпись Алисы $\sigma$ представляет собой набор компонентов закрытого ключа, соответствующих каждому биту $h_i$.
&lt;/p>
$$
\sigma = (\text{sk}_{1, h_1}, \text{sk}_{2, h_2}, \dots, \text{sk}_{256, h_{256}})
$$
&lt;p>
То есть, если бит хеша сообщения равен &lt;code>0&lt;/code>, раскрывается $\text{sk}_{i,0}$, а если он равен &lt;code>1&lt;/code>, раскрывается $\text{sk}_{i,1}$. Размер подписи составит $256 \times 32 = 8 192$ байта.&lt;/p>
&lt;p>&lt;strong>[Проверка подписи]&lt;/strong>
Майнер (проверяющий) использует полученную транзакцию $M$, подпись $\sigma = (s_1, s_2, \dots, s_{256})$ и открытый ключ $\text{pk}$ для проверки.
Он заново вычисляет хеш транзакции $h = H(M)$ и проверяет, совпадает ли хеш каждого $s_i$ с соответствующим элементом открытого ключа $\text{pk}_{i, h_i}$.
&lt;/p>
$$
H(s_i) \overset{?}{=} \text{pk}_{i, h_i} \quad (\text{для всех } 1 \le i \le 256)
$$
&lt;p>Этот процесс математически предельно прост, и до тех пор, пока квантовый компьютер не сможет вычислить обратную функцию $H$, подделать подпись невозможно. Однако после однократного подписания половина закрытого ключа раскрывается в сети, и если та же пара ключей будет использована для подписания другого сообщения, комбинация раскрытых закрытых ключей даст злоумышленнику возможность подделать подпись. Отсюда возникает строгое ограничение на использование ключа &lt;strong>только один раз (One-Time)&lt;/strong>.
Для практического применения были разработаны такие технологии, как &lt;strong>XMSS&lt;/strong>, использующая деревья Меркла для объединения множества одноразовых ключей в один корневой открытый ключ, и &lt;strong>SPHINCS+&lt;/strong> без сохранения состояния (stateless), но они имеют недостаток в виде размера подписей, достигающего десятков килобайт.&lt;/p>
&lt;h3 id="42-криптография-на-решетках-lattice-based-cryptography">4.2. Криптография на решетках (Lattice-Based Cryptography)
&lt;/h3>&lt;p>В настоящее время наиболее перспективным направлением PQC, принятым в качестве основного стандарта NIST (FIPS 204: ML-DSA / ранее CRYSTALS-Dilithium, а также Falcon и др.), является &lt;strong>криптография на решетках&lt;/strong>.&lt;/p>
&lt;p>Безопасность криптографии на решетках основана на математически доказанных сложных задачах, таких как «задача о кратчайшем векторе в многомерной решетке (SVP: Shortest Vector Problem)» и «задача обучения с ошибками (LWE: Learning With Errors)». Алгоритмов для эффективного решения задач на решетках не найдено даже для квантовых компьютеров.&lt;/p>
&lt;p>&lt;strong>Математическая модель LWE (Learning With Errors):&lt;/strong>
Основная идея задачи LWE заключается в том, что намеренное добавление «небольшого шума (ошибок)» в систему линейных уравнений делает задачу экспоненциально сложнее.
Пусть секретный вектор $\mathbf{s} \in \mathbb{Z}_q^n$.
Имеется огромная случайно выбранная открытая матрица $\mathbf{A} \in \mathbb{Z}_q^{m \times n}$ и вектор небольшого шума $\mathbf{e} \in \mathbb{Z}_q^m$, который добавляется намеренно.
Открытый ключ $\mathbf{b}$ вычисляется следующим образом:&lt;/p>
$$
\mathbf{b} = \mathbf{A}\mathbf{s} + \mathbf{e} \pmod{q}
$$
&lt;p>Даже если матрица $\mathbf{A}$ и вектор $\mathbf{b}$ (открытый ключ) известны, вычислить из них закрытый ключ $\mathbf{s}$ чрезвычайно сложно из-за наличия шума $\mathbf{e}$. Без шума задачу можно было бы решить простым методом Гаусса, но присутствие шума приводит к взрывному росту пространства поиска во всех измерениях, обеспечивая надежную безопасность как против классических, так и против квантовых компьютеров.
В реальных алгоритмах, используемых в блокчейне (таких как Dilithium), применяется &lt;strong>Ring-LWE (или Module-LWE)&lt;/strong>, развернутая над кольцом многочленов, что позволяет уменьшить размер ключа и ускорить вычисления.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Преимущества&lt;/strong>: По сравнению с подписями на основе хешей размер открытого ключа и подписи относительно невелик (несколько килобайт), а скорость генерации и проверки подписи очень высока (на уровне ECDSA или даже быстрее).&lt;/li>
&lt;li>&lt;strong>Недостатки&lt;/strong>: Математическая структура сложна, и история тестирования относительно коротка, поэтому риск того, что в будущем будет обнаружен новый алгоритм дешифрования, не равен нулю.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="5-технические-трудности-перехода-блокчейна-на-pqc">5. Технические трудности перехода блокчейна на PQC
&lt;/h2>&lt;p>Наличие алгоритмов PQC (таких как Dilithium или SPHINCS+) не означает, что их можно внедрить в Bitcoin или Ethereum прямо завтра. Существует ряд серьезных проблем, характерных для децентрализованных систем.&lt;/p>
&lt;h3 id="51-раздувание-размера-подписей-и-коллапс-масштабируемости">5.1. Раздувание размера подписей и коллапс масштабируемости
&lt;/h3>&lt;p>Самым большим препятствием для внедрения PQC является значительное увеличение размера данных.
В то время как текущий размер подписи ECDSA составляет около 70 байт, подпись Dilithium (ML-DSA) на основе решеток занимает около 2420–4595 байт (в зависимости от уровня безопасности), а размер открытого ключа превышает 1300 байт. Для SPHINCS+ на основе хешей размер только одной подписи достигает десятков тысяч байт.&lt;/p>
&lt;p>Если бы Биткоин внедрил PQC при текущем пределе размера блока (около 4 МБ с учетом SegWit), количество транзакций, которое можно уместить в одном блоке, резко бы сократилось. Пропускная способность сети (TPS: Transactions Per Second) катастрофически упала бы, а задержки при переводе стали бы нормой.
Для решения этой проблемы потребуется значительное увеличение размера блока, но это, в свою очередь, увеличит требования к хранилищу полных узлов (full nodes) и пропускной способности сети, что усложнит запуск узлов для обычных пользователей и, как следствие, приведет к дилемме — &lt;strong>централизации сети&lt;/strong>.&lt;/p>
&lt;div class="mermaid">pie title "Сравнение размеров данных подписи в блокчейне (Концептуальная диаграмма)"
"ECDSA (Около 70 байт)" : 2
"Dilithium ML-DSA (Около 2500 байт)" : 58
"SPHINCS+ (Около 17000 байт)" : 40&lt;/div>
&lt;p>&lt;em>(※ Увеличение размера данных транзакций из-за внедрения PQC станет фатальным узким местом для масштабируемости)&lt;/em>&lt;/p>
&lt;h3 id="52-влияние-на-ethereum-virtual-machine-evm-и-предварительно-скомпилированные-смарт-контракты">5.2. Влияние на Ethereum Virtual Machine (EVM) и предварительно скомпилированные смарт-контракты
&lt;/h3>&lt;p>В таких тьюринг-полных платформах смарт-контрактов, как Ethereum, внедрение PQC потребует фундаментального обновления EVM (виртуальной машины Ethereum).
В текущей версии EVM для проверки подписей ECDSA предусмотрен предварительно скомпилированный контракт (Precompiled Contract) под названием &lt;code>ecrecover&lt;/code> (адрес: &lt;code>0x01&lt;/code>), который оптимизирован для выполнения проверки с очень низкой комиссией (3000 Gas).&lt;/p>
&lt;p>Однако процесс проверки для новых алгоритмов на решетках, таких как Dilithium или Falcon, включает сложные полиномиальные и матричные операции. Если их реализовать только с использованием существующих опкодов (Opcodes) EVM, одна проверка подписи может потреблять от нескольких миллионов до десятков миллионов единиц газа. Это уровень, при котором весь лимит газа блока (около 30 миллионов Gas) исчерпывается одной транзакцией.&lt;/p>
&lt;p>Чтобы избежать этого, необходимо интегрировать новые предварительно скомпилированные контракты для проверки PQC (например, назначив DilithiumVerify на &lt;code>0x10&lt;/code>) непосредственно в саму EVM через хардфорк сети. Это потребует длительного процесса, в ходе которого основные разработчики каждого клиента Ethereum (Geth, Nethermind, Erigon и др.) будут сотрудничать для оптимизации логики проверки криптографии на решетках на таких языках, как C++, Go или Rust, и проведения аудита безопасности.&lt;/p>
&lt;h3 id="53-сложность-достижения-консенсуса-через-хардфорк">5.3. Сложность достижения консенсуса через хардфорк
&lt;/h3>&lt;p>Изменение базового алгоритма подписи требует &lt;strong>хардфорка (Hard Fork)&lt;/strong> — обновления протокола всей сети. Однако в сообществах, которые придают большое значение «неизменности правил и децентрализации», таких как Биткоин, процесс достижения консенсуса очень сложен с политической точки зрения. От момента предложения BIP (Bitcoin Improvement Proposal) о переходе на PQC до его внедрения, вероятно, потребуются годы обсуждений и тестирования.&lt;/p>
&lt;hr>
&lt;h2 id="6-когда-наступит-q-day-дорожная-карта-перехода">6. Когда наступит «Q-Day»? Дорожная карта перехода
&lt;/h2>&lt;p>Когда наступит «день, когда квантовые компьютеры полностью взломают 256-битную криптографию на эллиптических кривых (Q-Day)»?
Хотя мнения исследователей расходятся, многие эксперты прогнозируют, что масштабные квантовые компьютеры с тысячами или десятками тысяч стабильных логических кубитов (с исправлением ошибок и устойчивостью к шуму) появятся в период &lt;strong>«с середины 2030-х до 2040-х годов»&lt;/strong>. Однако, в зависимости от прорывов в архитектуре аппаратного обеспечения или открытия более эффективных квантовых алгоритмов, нельзя исключать, что это может произойти и раньше (около 2030 года).&lt;/p>
&lt;p>Дорожная карта, которой должна следовать экосистема криптоактивов, пока не стало слишком поздно, выглядит следующим образом:&lt;/p>
&lt;h3 id="фаза-1-гибридные-подписи-и-абстракция-аккаунта-от-настоящего-момента-до-2028-года">Фаза 1: Гибридные подписи и абстракция аккаунта (От настоящего момента до ~2028 года)
&lt;/h3>&lt;p>В текущей сфере блокчейна, особенно среди разработчиков Ethereum (таких как Виталик Бутерин), рассматриваются &lt;strong>«гибридные подписи»&lt;/strong>, сочетающие ECDSA и PQC (подписи на основе хешей или на решетках). Это подход, при котором к транзакции прикрепляются как существующая безопасная подпись ECDSA, так и подпись PQC, обеспечивая безопасность, даже если одна из них будет взломана.
Кроме того, благодаря использованию абстракции аккаунта (Account Abstraction, ERC-4337), предпринимаются усилия по внедрению и поддержке подписей PQC в смарт-контрактных кошельках по принципу opt-in (только для желающих пользователей) без ожидания хардфорка на уровне протокола.&lt;/p>
&lt;h3 id="фаза-2-использование-доказательств-с-нулевым-разглашением-zk-rollups-с-2025-года">Фаза 2: Использование доказательств с нулевым разглашением (ZK-Rollups) (С 2025 года)
&lt;/h3>&lt;p>Ожидается, что козырем для решения самой большой слабости PQC — «раздувания данных подписи» — станет использование технологии масштабирования второго уровня (Layer 2) &lt;strong>ZK-Rollups (Доказательства с нулевым разглашением)&lt;/strong>.
Вместо того, чтобы записывать огромные данные подписей PQC непосредственно в Layer 1 (основную цепь), большое количество PQC-транзакций будет проверяться и агрегироваться на Layer 2. Затем с помощью ZK-SNARKs или ZK-STARKs они будут сжиматься в одни крошечные «данные доказательства (Proof)» и записываться в Layer 1.
Поскольку некоторые конфигурации SNARKs (например, Groth16) сами по себе уязвимы к квантовым атакам, ключом станет использование &lt;strong>ZK-STARKs&lt;/strong>, безопасность которых опирается исключительно на хеш-функции, обладающие квантовой устойчивостью.&lt;/p>
&lt;h3 id="фаза-3-хардфорк-на-уровне-протокола-около-2030-года">Фаза 3: Хардфорк на уровне протокола (Около 2030 года)
&lt;/h3>&lt;p>Когда стандартизация PQC от NIST будет полностью закреплена, а отраслевые стандарты библиотек станут доступны и достаточно протестированы, ожидается проведение хардфорков в основных сетях, таких как Bitcoin и Ethereum, для полного перехода на PQC в качестве метода цифровой подписи по умолчанию. В течение этого переходного периода будут проводиться масштабные кампании, призывающие пользователей «перевести свои средства со старых кошельков на новые кошельки с поддержкой PQC».&lt;/p>
&lt;h3 id="примеры-новаторских-проектов">Примеры новаторских проектов
&lt;/h3>&lt;p>Некоторые блокчейн-проекты предвидели эту квантовую угрозу и с самого начала разрабатывались с заявленной квантовой устойчивостью.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>QRL (Quantum Resistant Ledger)&lt;/strong>: Ранний блокчейн, в котором на уровне протокола изначально реализована схема PQC на основе хешей под названием XMSS (eXtended Merkle Signature Scheme).&lt;/li>
&lt;li>&lt;strong>Algorand / Cellframe&lt;/strong>: Проекты с гибкой модульной архитектурой криптографического уровня, которые готовятся к будущим обновлениям PQC и активно изучают возможности интеграции криптографии на решетках.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="7-заключение-будущее-криптоактивов-и-защита-наших-средств">7. Заключение: Будущее криптоактивов и защита наших средств
&lt;/h2>&lt;p>Наступление «постквантовой эры» выходит за рамки научной фантастики и уже стало реальной технической проблемой для современных криптографических систем, стоящей прямо перед нами.&lt;/p>
&lt;p>Два «меча» квантовых вычислений — алгоритмы Шора и Гровера — угрожают основе современных блокчейнов: криптографии с открытым ключом и хеш-функциям соответственно. В частности, уязвимость ECDSA является фатальной, и чтобы избежать риска кражи средств с помощью атак фронтраннинга, переход на постквантовую криптографию (PQC) абсолютно неизбежен.&lt;/p>
&lt;p>Однако технологическая отрасль и блокчейн-сообщество не сидят сложа руки в ожидании краха. Процесс выбора и стандартизации алгоритмов PQC, таких как криптография на решетках и подписи на основе хешей, неуклонно продвигается вперед, и использование доказательств с нулевым разглашением (ZK-STARKs) и технологий масштабирования Layer 2 открывает путь к преодолению самого большого барьера для внедрения PQC — «раздувания размера данных».&lt;/p>
&lt;p>Обычным пользователям криптовалют и инвесторам не нужно паниковать и продавать все свои средства прямо сейчас. Однако важно иметь базовую техническую грамотность и осознавать необходимость самозащиты:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Избегать повторного использования адресов&lt;/strong>: Из соображений не только конфиденциальности, но и безопасности, избегайте длительного хранения средств на «использованных адресах (с которых хотя бы раз отправлялись средства, и чей открытый ключ раскрыт в блокчейне)».&lt;/li>
&lt;li>&lt;strong>Следить за технологическими тенденциями&lt;/strong>: Будьте в курсе обсуждений перехода на PQC, таких как BIP в Биткоине или EIP в Ethereum, а также новостей о хардфорках, чтобы вовремя перевести свои средства на новые кошельки, когда это потребуется.&lt;/li>
&lt;/ul>
&lt;p>История блокчейна — это также история обновлений и устойчивости (resilience) перед лицом новых технологических угроз. Подобно тому, как экосистема преодолела проблемы масштабируемости и экологические проблемы (например, переход от PoW к PoS), она, несомненно, найдет решения и адаптируется к этой беспрецедентной квантовой угрозе.
Остается надеяться на будущее, в котором новая мудрость человечества — квантовые компьютеры — и технология доверия — децентрализованный распределенный реестр — не уничтожат друг друга при столкновении, а сольются в более совершенную и надежную систему на более высоком уровне.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Ссылки и сопутствующие материалы:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>National Institute of Standards and Technology (NIST) - Post-Quantum Cryptography Standardization Project&lt;/li>
&lt;li>Shor, P. W. (1994). Algorithms for quantum computation: discrete logarithms and factoring.&lt;/li>
&lt;li>Grover, L. K. (1996). A fast quantum mechanical algorithm for database search.&lt;/li>
&lt;li>Buterin, V. (2024). How to hard-fork to save most users&amp;rsquo; funds in a quantum emergency.&lt;/li>
&lt;/ul></description></item><item><title>История криптографии: от шифра Цезаря до постквантовой криптографии (PQC)</title><link>http://kenji.blog/ru/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/ru/p/history-of-cryptography-caesar-to-pqc/</guid><description>&lt;img src="http://kenji.blog/p/history-of-cryptography-caesar-to-pqc/img/eyecatch.jpg" alt="Featured image of post История криптографии: от шифра Цезаря до постквантовой криптографии (PQC)" />&lt;h1 id="1-введение-что-такое-криптография">1. Введение: Что такое криптография?
&lt;/h1>&lt;p>Криптография (Cryptography) — это технология сохранения конфиденциальности информации, которая развивалась вместе с историей человечества. От передачи секретных приказов на древних войнах до защиты данных кредитных карт в современном интернете, цель криптографии остается неизменной: &amp;ldquo;Сделать так, чтобы только предполагаемый получатель мог понять информацию, и чтобы третья сторона не смогла ее расшифровать&amp;rdquo;.&lt;/p>
&lt;p>В современной информационной безопасности криптография играет важную роль, не ограничиваясь простой &amp;ldquo;секретностью информации (Конфиденциальность: Confidentiality)&amp;rdquo;, но и обеспечивая &amp;ldquo;целостность (Integrity)&amp;rdquo;, &amp;ldquo;аутентификацию (Authentication)&amp;rdquo; и &amp;ldquo;неотрекаемость (Non-repudiation)&amp;rdquo; данных.&lt;/p>
&lt;p>В этой статье мы подробно рассмотрим историю развития криптографии с технологической и математической точек зрения, начиная с простых древних шифров замены, переходя к механическим шифрам, современной криптографии с симметричным и открытым ключом, и заканчивая эрой &amp;ldquo;постквантовой криптографии (PQC)&amp;rdquo;, которая наступит с практическим применением квантовых компьютеров.&lt;/p>
&lt;hr>
&lt;h1 id="2-эпоха-классической-криптографии-замена-и-перестановка-символов">2. Эпоха классической криптографии: Замена и перестановка символов
&lt;/h1>&lt;p>Происхождение криптографии восходит к временам до нашей эры. Ранние шифры в основном состояли из двух подходов: &amp;ldquo;перестановка&amp;rdquo; и &amp;ldquo;замена&amp;rdquo;.&lt;/p>
&lt;h2 id="шифр-скитала-шифр-перестановки">Шифр Скитала (Шифр перестановки)
&lt;/h2>&lt;p>&amp;ldquo;Скитала&amp;rdquo; (Scytale), использовавшаяся в древней Греции в Спарте в 5 веке до н.э., является одним из старейших криптографических устройств. Длинная полоска пергамента наматывалась на деревянную палочку определенной толщины, и на ней писалось сообщение поперек. Когда пергамент разматывался, буквы оказывались в бессмысленном порядке, но получатель с палочкой такой же толщины мог снова намотать пергамент и прочитать исходное сообщение.&lt;/p>
&lt;h2 id="шифр-цезаря-шифр-простой-замены">Шифр Цезаря (Шифр простой замены)
&lt;/h2>&lt;p>Шифр Цезаря — это шифр, который, как считается, использовал Юлий Цезарь, герой Древнего Рима в 1 веке до н.э. Это шифр моноалфавитной подстановки (Monoalphabetic substitution), который сдвигает алфавит на фиксированное количество позиций (обычно на 3 буквы).&lt;/p>
&lt;p>Математически, если рассматривать буквы как числа от $0$ до $25$, а величину сдвига как $K$, преобразование исходного текста $P$ в зашифрованный текст $C$ выражается следующим уравнением по модулю:&lt;/p>
$$C \equiv P + K \pmod{26}$$
&lt;p>Расшифровка выполняется обратной операцией:&lt;/p>
$$P \equiv C - K \pmod{26}$$
&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;/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="c1"># Пример простой реализации шифра Цезаря на Python&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;encrypt&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="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;decrypt&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="n">shift&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">shift&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="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isalpha&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">)&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">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">26&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">char&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&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">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HELLO WORLD&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;encrypt&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="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">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># KHOOR ZRUOG&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="частотный-анализ-и-шифр-виженера">Частотный анализ и шифр Виженера
&lt;/h2>&lt;p>Шифры моноалфавитной подстановки стали легко взламываться с помощью &amp;ldquo;частотного анализа&amp;rdquo; (Frequency Analysis), изобретенного арабским ученым Аль-Кинди в 9 веке. Он использует статистические особенности языка, например, то, что в английском языке буквы &amp;ldquo;E&amp;rdquo; и &amp;ldquo;T&amp;rdquo; встречаются чаще всего.&lt;/p>
&lt;p>Чтобы противостоять этому, в 16 веке был изобретен &amp;ldquo;шифр Виженера&amp;rdquo; (Vigenère cipher). Это полиалфавитный шифр замены (Polyalphabetic substitution), который циклически переключает несколько сдвигов (ключей), и около 300 лет его называли &amp;ldquo;неразрешимым шифром&amp;rdquo; (Le Chiffre Indéchiffrable).&lt;/p>
&lt;p>Математически $i$-я буква исходного текста $P_i$ и $i$-я буква повторяющегося ключа $K_i$ шифруются следующим образом:&lt;/p>
$$C_i \equiv P_i + K_i \pmod{26}$$
&lt;p>Однако в 19 веке Чарльз Бэббидж и Фридрих Касиски открыли &amp;ldquo;метод Касиски&amp;rdquo; (Kasiski examination), который позволял определить длину ключа по повторяющимся паттернам в зашифрованном тексте, и шифр был взломан.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "Классификация классической криптографии"
A["Классическая криптография"] --> B["Шифр перестановки"]
A --> C["Шифр замены"]
B --> D["Шифр Скитала"]
C --> E["Моноалфавитная замена"]
C --> F["Полиалфавитная замена"]
E --> G["Шифр Цезаря"]
F --> H["Шифр Виженера"]
end&lt;/div>
&lt;hr>
&lt;h1 id="3-механическая-криптография-и-мировые-войны-энигма-и-ее-расшифровка">3. Механическая криптография и мировые войны: Энигма и ее расшифровка
&lt;/h1>&lt;p>В начале 20 века средства связи перешли от писем к телеграфу и радио, что потребовало увеличения скорости и сложности шифрования. В это время появилась &amp;ldquo;механическая криптография&amp;rdquo;, использующая комбинацию роторов (вращающихся дисков).&lt;/p>
&lt;h2 id="угроза-энигмы-enigma">Угроза Энигмы (Enigma)
&lt;/h2>&lt;p>&amp;ldquo;Энигма&amp;rdquo;, использовавшаяся нацистской Германией во время Второй мировой войны, является самой известной шифровальной машиной в истории криптографии. Энигма состояла из нескольких роторов (обычно 3-4), коммутационной панели (Steckerbrett), меняющей проводку букв, и рефлектора (отражающего ротора).&lt;/p>
&lt;p>Каждый раз при вводе буквы с клавиатуры ротор вращался, поэтому даже при последовательном вводе одной и той же буквы выводились разные зашифрованные символы (высшая форма полиалфавитного шифра). Пространство ключей (комбинаций настроек) составляло около $1.58 \times 10^{19}$ вариантов (около 15,8 квинтиллионов), и считалось, что взломать ее полным перебором при технологиях того времени было невозможно.&lt;/p>
&lt;h2 id="алан-тьюринг-и-бомба-bombe">Алан Тьюринг и &amp;ldquo;Бомба&amp;rdquo; (Bombe)
&lt;/h2>&lt;p>Вызов этой неприступной Энигме бросила команда криптоаналитиков из Блетчли-парка в Великобритании, опираясь на ранние результаты польского математика Мариана Реевского и его коллег.&lt;/p>
&lt;p>В частности, Алан Тьюринг (Alan Turing) использовал предположения об исходном тексте, соответствующем части зашифрованного текста (криб: Crib), и разработал электромеханическую машину для расшифровки, названную &amp;ldquo;Бомба&amp;rdquo; (Bombe). &amp;ldquo;Бомба&amp;rdquo; быстро обнаруживала логические противоречия и последовательно исключала невозможные настройки роторов, что позволило успешно расшифровать Энигму. Считается, что это великое достижение приблизило победу союзников на несколько лет.&lt;/p>
&lt;hr>
&lt;h1 id="4-начало-современной-криптографии-криптография-с-симметричным-ключом-des-и-aes">4. Начало современной криптографии: Криптография с симметричным ключом (DES и AES)
&lt;/h1>&lt;p>После войны с появлением компьютеров шифрование претерпело радикальную смену парадигмы: от манипуляций с &amp;ldquo;символами&amp;rdquo; к операциям с &amp;ldquo;битами (0 и 1)&amp;rdquo;.&lt;/p>
&lt;h2 id="клод-шеннон-и-теория-информации">Клод Шеннон и теория информации
&lt;/h2>&lt;p>В 1949 году Клод Шеннон опубликовал работу &amp;ldquo;Теория связи в секретных системах&amp;rdquo;, заложив математические основы современной криптографии. Он предложил &amp;ldquo;запутывание&amp;rdquo; (Confusion) и &amp;ldquo;рассеивание&amp;rdquo; (Diffusion) в качестве принципов безопасного проектирования шифров.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Запутывание (Confusion)&lt;/strong>: Сделать взаимосвязь между ключом и зашифрованным текстом как можно более сложной. (Реализуется через замену / S-блоки)&lt;/li>
&lt;li>&lt;strong>Рассеивание (Diffusion)&lt;/strong>: Сделать так, чтобы изменение одного бита исходного текста влияло на множество битов зашифрованного текста. (Реализуется через перестановку / перемешивание)&lt;/li>
&lt;/ul>
&lt;h2 id="des-data-encryption-standard">DES (Data Encryption Standard)
&lt;/h2>&lt;p>В 1977 году Национальный институт стандартов и технологий США (NIST, тогда NBS) принял &amp;ldquo;DES&amp;rdquo;, основанный на дизайне IBM, в качестве стандартного шифра.
DES использует архитектуру, называемую &amp;ldquo;Сеть Фейстеля&amp;rdquo; (Feistel Network), имеет размер блока 64 бита и длину ключа 56 бит. Это имело преимущество в реализации, так как алгоритмы шифрования и дешифрования имели почти одинаковую структуру.&lt;/p>
&lt;p>Однако по мере роста вычислительных мощностей компьютеров стало ясно, что длины ключа в 56 бит (около $7.2 \times 10^{16}$ вариантов) недостаточно. В 1998 году Electronic Frontier Foundation (EFF) разработал специальную машину &amp;ldquo;Deep Crack&amp;rdquo;, которая смогла взломать DES за несколько дней.&lt;/p>
&lt;h2 id="aes-advanced-encryption-standard">AES (Advanced Encryption Standard)
&lt;/h2>&lt;p>В качестве нового стандарта, пришедшего на смену DES, в 2001 году был принят &amp;ldquo;AES&amp;rdquo;. Был выбран алгоритм &amp;ldquo;Rijndael&amp;rdquo;, разработанный бельгийскими криптографами по итогам открытого конкурса.&lt;/p>
&lt;p>AES использует не Сеть Фейстеля, а &amp;ldquo;SPN-структуру&amp;rdquo; (Substitution-Permutation Network) и применяет математические операции в поле Галуа (конечном поле) $GF(2^8)$. Длину ключа можно выбрать из 128, 192 и 256 бит, и сегодня он широко используется по всему миру как стандартный симметричный алгоритм шифрования.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "1 раунд обработки AES (SPN-структура)"
A["Состояние входа (128-bit)"] --> B("SubBytes (Байтовая замена / S-Box)")
B --> C("ShiftRows (Сдвиг строк)")
C --> D("MixColumns (Смешивание столбцов / Умножение в GF(2^8))")
D --> E("AddRoundKey (XOR с раундовым ключом)")
E --> F["Переход к следующему раунду"]
end&lt;/div>
&lt;hr>
&lt;h1 id="5-революция-криптографии-с-открытым-ключом-от-диффи-хеллмана-к-rsa">5. Революция криптографии с открытым ключом: От Диффи-Хеллмана к RSA
&lt;/h1>&lt;p>Криптография с симметричным ключом имела существенный недостаток. Это &amp;ldquo;проблема распределения ключей&amp;rdquo; (Key Distribution Problem). Проблема заключалась в том, как безопасно разделить &amp;ldquo;общий ключ&amp;rdquo; с удаленным абонентом до начала зашифрованного общения. Эта проблема была решена в 1970-х годах с появлением &amp;ldquo;криптографии с открытым ключом&amp;rdquo;.&lt;/p>
&lt;h2 id="обмен-ключами-диффи-хеллмана">Обмен ключами Диффи-Хеллмана
&lt;/h2>&lt;p>В 1976 году Уитфилд Диффи и Мартин Хеллман опубликовали прорывную статью &amp;ldquo;Новые направления в криптографии&amp;rdquo;. Они предложили метод безопасного совместного использования ключа даже по прослушиваемому каналу связи, используя математическую сложность &amp;ldquo;задачи дискретного логарифмирования&amp;rdquo; (Discrete Logarithm Problem).&lt;/p>
&lt;ol>
&lt;li>Публикуются большое простое число $p$ и генератор $g$.&lt;/li>
&lt;li>Алиса выбирает секретное значение $a$ и отправляет Бобу $A = g^a \pmod{p}$.&lt;/li>
&lt;li>Боб выбирает секретное значение $b$ и отправляет Алисе $B = g^b \pmod{p}$.&lt;/li>
&lt;li>Алиса вычисляет $K = B^a \pmod{p}$, а Боб вычисляет $K = A^b \pmod{p}$.&lt;/li>
&lt;li>По закону степеней $K = (g^b)^a = (g^a)^b = g^{ab} \pmod{p}$, и они успешно разделяют один и тот же ключ $K$.&lt;/li>
&lt;/ol>
&lt;h2 id="алгоритм-rsa">Алгоритм RSA
&lt;/h2>&lt;p>В следующем 1977 году Рон Ривест, Ади Шамир и Леонард Адлеман изобрели &amp;ldquo;алгоритм RSA&amp;rdquo;. Он основан на том свойстве, что &amp;ldquo;разложение огромного составного числа на простые множители является сложным&amp;rdquo;.&lt;/p>
&lt;p>&lt;strong>Математический механизм RSA:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Выбираются два огромных простых числа $p$ и $q$, и вычисляется $n = p \times q$.&lt;/li>
&lt;li>Вычисляется функция Эйлера $\phi(n) = (p-1)(q-1)$.&lt;/li>
&lt;li>Выбирается целое число $e$ (открытый ключ), взаимно простое с $\phi(n)$.&lt;/li>
&lt;li>Вычисляется целое число $d$ (закрытый ключ), такое что $e \times d \equiv 1 \pmod{\phi(n)}$.&lt;/li>
&lt;/ol>
&lt;p>Шифрование: Для исходного текста $M$ вычисляется $C \equiv M^e \pmod{n}$
Дешифрование: Для зашифрованного текста $C$ вычисляется $M \equiv C^d \pmod{n}$&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;/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="c1"># Концептуальный код RSA на Python (не для практического использования)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&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="k">if&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&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="k">def&lt;/span> &lt;span class="nf">rsa_example&lt;/span>&lt;span class="p">():&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">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&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="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="c1"># Значение, взаимно простое с phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">phi&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;Открытый ключ: (e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&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="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Закрытый ключ: (d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&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>&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">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">65&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&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">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; Зашифрованный текст: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; После расшифровки: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rsa_example&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="6-расцвет-криптографии-на-эллиптических-кривых-ecc">6. Расцвет криптографии на эллиптических кривых (ECC)
&lt;/h1>&lt;p>RSA — мощный алгоритм, но по мере роста производительности компьютеров возникла проблема увеличения вычислительных затрат из-за необходимости увеличивать длину ключа для поддержания безопасности (в настоящее время 2048 или 3072 бита).&lt;/p>
&lt;p>Поэтому в 1985 году была предложена &amp;ldquo;криптография на эллиптических кривых&amp;rdquo; (Elliptic Curve Cryptography: ECC). Она использует сложение точек на эллиптической кривой (обычно вида $y^2 = x^3 + ax + b$) над конечным полем.&lt;/p>
&lt;p>Известно, что задачу дискретного логарифмирования на эллиптической кривой (ECDLP) решить еще сложнее, чем задачу факторизации, и &lt;strong>ECC может обеспечить уровень безопасности, эквивалентный 3072 битам RSA, при длине ключа всего 256 бит&lt;/strong>. Это позволило использовать быструю и безопасную зашифрованную связь (например, ECDSA и ECDH) даже в средах с ограниченными вычислительными ресурсами, таких как смартфоны и устройства IoT.&lt;/p>
&lt;hr>
&lt;h1 id="7-угроза-квантовых-компьютеров-и-постквантовая-криптография-pqc">7. Угроза квантовых компьютеров и постквантовая криптография (PQC)
&lt;/h1>&lt;p>Казалось, что криптографические технологии непоколебимы, но алгоритм Шора (Shor&amp;rsquo;s algorithm), опубликованный Питером Шором в 1994 году, вызвал огромный шок.&lt;/p>
&lt;p>Квантовые компьютеры выполняют вычисления, используя такие свойства квантовой механики, как &amp;ldquo;суперпозиция&amp;rdquo; и &amp;ldquo;квантовая запутанность&amp;rdquo;. Было математически доказано, что если выполнить алгоритм Шора на квантовом компьютере достаточной мощности, то задача факторизации и задача дискретного логарифмирования могут быть решены за &amp;ldquo;полиномиальное время&amp;rdquo;. Это означает, что в день появления практичного квантового компьютера (Q-Day) вся используемая сегодня криптография с открытым ключом, такая как RSA и ECC, мгновенно будет сломана.&lt;/p>
&lt;h2 id="появление-pqc-post-quantum-cryptography">Появление PQC (Post-Quantum Cryptography)
&lt;/h2>&lt;p>В ответ на эту беспрецедентную угрозу быстрыми темпами ведутся исследования в области &amp;ldquo;постквантовой криптографии&amp;rdquo; (PQC), основанной на новых математических задачах, которые трудно решить даже на квантовых компьютерах. NIST (Национальный институт стандартов и технологий США) в течение многих лет ведет процесс стандартизации PQC, и в основном рассматриваются следующие математические подходы.&lt;/p>
&lt;h3 id="1-криптография-на-решетках-lattice-based-cryptography">1. Криптография на решетках (Lattice-based Cryptography)
&lt;/h3>&lt;p>В настоящее время это наиболее перспективный подход, который был принят в стандартах алгоритмов NIST (ML-KEM / Kyber, ML-DSA / Dilithium). Он основан на сложности задачи поиска определенной точки в многомерной &amp;ldquo;решетке&amp;rdquo; (Lattice) (например, задача поиска кратчайшего вектора: SVP) и задачи обучения с ошибками (Learning With Errors: LWE).&lt;/p>
&lt;p>Концепция задачи LWE использует то свойство, что если намеренно добавить &amp;ldquo;небольшой шум (ошибку)&amp;rdquo; в систему линейных уравнений, найти решение становится чрезвычайно сложно.
Система уравнений: $\mathbf{A}\mathbf{s} + \mathbf{e} \equiv \mathbf{b} \pmod{q}$
($\mathbf{A}$ и $\mathbf{b}$ публичны, $\mathbf{s}$ — секретный ключ, $\mathbf{e}$ — небольшой шум)&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;/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="c1"># Концептуальный псевдокод задачи LWE (для обучения)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&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="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">256&lt;/span> &lt;span class="c1"># Размерность&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3329&lt;/span> &lt;span class="c1"># Модуль&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">512&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"># Секретный ключ s и небольшая ошибка e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">m&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"># Публичная матрица A и публичный вектор b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">A&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&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"># Считается, что восстановить s из A и b очень сложно даже с использованием квантовых компьютеров&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-криптография-на-основе-хешей-hash-based-cryptography">2. Криптография на основе хешей (Hash-based Cryptography)
&lt;/h3>&lt;p>Это схема цифровой подписи, безопасность которой основывается исключительно на стойкости хеш-функций к коллизиям. Поскольку она не имеет математической структуры, она устойчива к квантовым атакам, но размер подписи, как правило, получается большим (например, SPHINCS+).&lt;/p>
&lt;h3 id="3-криптография-на-основе-кодов-code-based-cryptography">3. Криптография на основе кодов (Code-based Cryptography)
&lt;/h3>&lt;p>Метод шифрования, основанный на теории кодов, исправляющих ошибки. Известным примером является криптосистема Мак-Элиса, предложенная в 1978 году. Она имеет долгую историю и признанную надежность, но ее недостатком является очень большой размер открытого ключа (который может достигать нескольких мегабайт).&lt;/p>
&lt;div class="mermaid">timeline
title "История эволюции криптографии и вычислительных машин"
"Древность - Средние века" : "Шифр Цезаря" : "Шифр Виженера" : "Рождение частотного анализа"
"1930-40-е годы" : "Использование и взлом Энигмы" : "Разработка машин Тьюринга и Бомбы"
"1970-е годы" : "Стандартизация DES (1977)" : "Обмен ключами Диффи-Хеллмана (1976)" : "Создание алгоритма RSA (1977)"
"1980-90-е годы" : "Предложение криптографии на эллиптических кривых (ECC)" : "Публикация алгоритма Шора (1994)"
"2000-е годы" : "Стандартизация AES (2001)"
"С 2010-х по настоящее время" : "Ускорение исследований квантовых компьютеров" : "Начало проекта стандартизации PQC от NIST"
"Ближайшее будущее (Q-Day)" : "Создание крупномасштабного квантового компьютера?" : "Полный переход на PQC (ML-KEM/ML-DSA)"&lt;/div>
&lt;hr>
&lt;h1 id="8-заключение-бесконечная-битва-щита-и-меча">8. Заключение: Бесконечная битва щита и меча
&lt;/h1>&lt;p>История криптографии — это история бесконечной борьбы между изобретением новых методов шифрования (щит) и новых методов взлома (меч).&lt;/p>
&lt;p>Шифр Цезаря пал от частотного анализа, а непобедимая Энигма пала перед гениальным умом Тьюринга и силой машин. И теперь даже мощные криптосистемы, такие как RSA и ECC, которые поддерживают основу современного интернет-общества, находятся под угрозой нового &amp;ldquo;меча&amp;rdquo; — квантового компьютера.&lt;/p>
&lt;p>Однако человечество уже смотрит в будущее и готовит новый &amp;ldquo;щит&amp;rdquo; — постквантовую криптографию (PQC). Сегодня обеспечение перехода от существующей криптографии с открытым ключом к PQC (обеспечение криптографической гибкости - Crypto Agility) является насущной задачей для IT-инфраструктуры во всем мире.&lt;/p>
&lt;p>Криптография — это не просто сложная математическая головоломка, это сильнейший барьер для защиты нашей конфиденциальности, нашего имущества и самой социальной инфраструктуры.&lt;/p></description></item></channel></rss>