<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Математика, Криптография, Квант on kenji.blog</title><link>http://kenji.blog/ru/categories/%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0-%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F-%D0%BA%D0%B2%D0%B0%D0%BD%D1%82/</link><description>Recent content in Математика, Криптография, Квант on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ru</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 22:09:22 +0900</lastBuildDate><atom:link href="http://kenji.blog/ru/categories/%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0-%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F-%D0%BA%D0%B2%D0%B0%D0%BD%D1%82/index.xml" rel="self" type="application/rss+xml"/><item><title>【PQC】Полная картина "постквантовой криптографии", криптографии следующего поколения в эпоху квантовых компьютеров</title><link>http://kenji.blog/ru/p/post-quantum-cryptography/</link><pubDate>Sat, 05 Sep 2026 22:09:22 +0900</pubDate><guid>http://kenji.blog/ru/p/post-quantum-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography/post_quantum_cryptography_1788613735417.jpg" alt="Featured image of post 【PQC】Полная картина "постквантовой криптографии", криптографии следующего поколения в эпоху квантовых компьютеров" />&lt;h2 id="введение-угроза-криптографическим-технологиям-со-стороны-квантовых-компьютеров">Введение: «Угроза» криптографическим технологиям со стороны квантовых компьютеров
&lt;/h2>&lt;p>В настоящее время большинство наших повседневных коммуникаций в интернете — онлайн-банкинг, просмотр веб-сайтов (HTTPS), обмен сообщениями в приложениях, а также транзакции блокчейна и криптоактивов — защищены технологией, известной как «криптография с открытым ключом». В частности, такие алгоритмы, как RSA и криптография на эллиптических кривых (ECC), служат основой, обеспечивающей надежность современного цифрового общества.&lt;/p>
&lt;p>Эти методы криптографии основаны на математических проблемах, таких как «факторизация больших простых чисел» и «проблема дискретного логарифма», решение которых на современных классических компьютерах (включая суперкомпьютеры) требует астрономического количества времени. Однако с быстрым развитием &lt;strong>квантовых компьютеров&lt;/strong> в последние годы, этот фундамент будет полностью разрушен, как только они будут внедрены на практике.&lt;/p>
&lt;p>В 1994 году Питер Шор (Peter Shor) опубликовал «Алгоритм Шора», математически доказав, что факторизацию и задачу дискретного логарифмирования можно решить за очень короткое время с помощью достаточно мощного квантового компьютера. Это означает риск того, что все зашифрованные коммуникации, защищающие сегодня интернет, будут расшифрованы в будущем (проблема, известная как Y2Q: Years to Quantum, или Q-Day).&lt;/p>
&lt;p>Еще более серьезной является проблема так называемого «Harvest Now, Decrypt Later (Собери сейчас, расшифруй позже)». Данные, которые необходимо сохранять в тайне десятилетиями, такие как государственные секреты, интеллектуальная собственность компаний и биометрическая информация лиц, уже могут становиться объектами краж с расчетом на их расшифровку в будущем.&lt;/p>
&lt;p>Чтобы противостоять этому беспрецедентному кризису, криптографы и исследовательские институты по всему миру объединяют усилия для разработки криптографических технологий следующего поколения, способных противостоять атакам квантовых компьютеров — &lt;strong>постквантовой криптографии (PQC: Post-Quantum Cryptography)&lt;/strong> . В этой статье мы подробно рассмотрим основы PQC, механизмы работы основных алгоритмов и последние тенденции глобальной стандартизации, продвигаемые Национальным институтом стандартов и технологий США (NIST).&lt;/p>
&lt;hr>
&lt;h2 id="что-такое-постквантовая-криптография-pqc">Что такое постквантовая криптография (PQC)?
&lt;/h2>&lt;p>Постквантовая криптография (Post-Quantum Cryptography, PQC) — это общий термин для криптографических алгоритмов, предназначенных для работы на существующих классических компьютерах, но при этом устойчивых к атакам крупномасштабных квантовых компьютеров в будущем (включая атаки с использованием алгоритма Шора).&lt;/p>
&lt;p>Часто путают такие технологии, как «Квантовая криптография (Quantum Cryptography)» и «Квантовое распределение ключей (QKD)», но это совершенно разные подходы. Квантовая криптография (QKD) — это аппаратная технология, использующая законы квантовой механики (например, изменение состояния при наблюдении) для физического исключения прослушивания в каналах связи. Для этого требуются специальные оптоволоконные линии и оборудование, что связано с высокими затратами на внедрение и ограничениями по расстоянию.&lt;/p>
&lt;p>С другой стороны, &lt;strong>PQC — это программная технология криптографии, основанная исключительно на «математике»&lt;/strong> . Поэтому её можно внедрить в виде обновлений программного обеспечения в существующую интернет-инфраструктуру, серверы, смартфоны, браузеры и т.д., что делает её применение в реальном мире крайне удобным. ИТ-компании и правительственные учреждения по всему миру считают первоочередной задачей замену (миграцию) используемых сегодня алгоритмов RSA и ECC на PQC.&lt;/p>
&lt;hr>
&lt;h2 id="4-основных-математических-подхода-на-которых-базируется-pqc">4 основных математических подхода, на которых базируется PQC
&lt;/h2>&lt;p>Различные алгоритмы PQC основаны на математических задачах, которые сложно эффективно решить даже с помощью квантового компьютера (например, NP-трудные задачи). Здесь мы представляем 4 основные категории, доминирующие в настоящее время.&lt;/p>
&lt;h3 id="основные-подходы-к-постквантовой-криптографии-pqc">Основные подходы к постквантовой криптографии (PQC)
&lt;/h3>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">graph&lt;/span> &lt;span class="n">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">Постквантовая&lt;/span> &lt;span class="err">криптография&lt;/span> &lt;span class="n">PQC&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">Криптография&lt;/span> &lt;span class="err">на&lt;/span> &lt;span class="err">решетках&lt;/span> &lt;span class="n">Lattice&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">Криптография&lt;/span> &lt;span class="err">на&lt;/span> &lt;span class="err">хеш&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="err">функциях&lt;/span> &lt;span class="n">Hash&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">M&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">Многомерная&lt;/span> &lt;span class="err">криптография&lt;/span> &lt;span class="n">Multivariate&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">Криптография&lt;/span> &lt;span class="err">на&lt;/span> &lt;span class="err">кодах&lt;/span> &lt;span class="n">Code&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&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">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">203&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">KEM&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">204&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&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">H&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">205&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">SLH&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&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">style&lt;/span> &lt;span class="n">PQC&lt;/span> &lt;span class="n">fill&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="c1">#f9f,stroke:#333,stroke-width:2px&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="1-криптография-на-решетках-lattice-based-cryptography">1. Криптография на решетках (Lattice-based Cryptography)
&lt;/h3>&lt;p>В настоящее время «криптография на решетках» является наиболее перспективным и основным направлением в области PQC. Эта криптография основывает свою безопасность на проблемах точек, регулярно расположенных в виде решеток в многомерных пространствах. Известные проблемы включают «Проблему кратчайшего вектора (SVP)» и «Обучение с ошибками (LWE)».&lt;/p>
&lt;p>&lt;strong>Краткое описание механизма:&lt;/strong>
Представьте себе бесчисленное множество точек, выстроенных в виде решетки в пространстве с очень высокой размерностью (от сотен до тысяч измерений). Найти определенную точку решетки легко в двух или трех измерениях, но в сотнях измерений до сих пор не существует эффективного алгоритма ни для классических, ни для квантовых компьютеров. В частности, проблема LWE использует свойство, согласно которому «намеренное добавление небольшого &amp;lsquo;шума (ошибки)&amp;rsquo; к системе линейных уравнений делает угадывание исходных переменных чрезвычайно сложным».&lt;/p>
&lt;p>&lt;strong>Преимущества:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Применима как для обмена ключами (KEM), так и для цифровых подписей.&lt;/li>
&lt;li>Очень высокая скорость обработки (иногда быстрее, чем RSA или ECC).&lt;/li>
&lt;li>Сбалансированный размер ключа и шифротекста.&lt;/li>
&lt;/ul>
&lt;p>Большинство алгоритмов, стандартизируемых NIST в настоящее время (такие как ML-KEM и ML-DSA), используют криптографию на решетках.&lt;/p>
&lt;h3 id="2-криптография-на-хеш-функциях-hash-based-cryptography">2. Криптография на хеш-функциях (Hash-based Cryptography)
&lt;/h3>&lt;p>Криптография на хеш-функциях — это алгоритмы PQC, специализирующиеся на цифровых подписях. Их безопасность основана исключительно на устойчивости к коллизиям и односторонности безопасных «криптографических хеш-функций», таких как SHA-2 или SHA-3.&lt;/p>
&lt;p>&lt;strong>Краткое описание механизма:&lt;/strong>
Отправной точкой является схема одноразовой подписи, называемая «Подписью Лэмпорта (Lamport Signature)», которую можно использовать только один раз. Связывая их в древовидную структуру данных под названием «Дерево Меркла (Merkle Tree)», она позволяет использовать один набор ключей для множества подписей.&lt;/p>
&lt;p>&lt;strong>Преимущества:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Исключительно надежная основа безопасности, с сильным доказательством того, что «пока хеш-функция безопасна, алгоритм тоже безопасен».&lt;/li>
&lt;li>Низкий риск обнаружения неожиданных методов взлома из-за слабой зависимости от математических структур.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Недостатки:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Не может использоваться для обмена ключами (KEM), только для цифровых подписей.&lt;/li>
&lt;li>Размер подписи, как правило, большой.&lt;/li>
&lt;li>Существуют версии с сохранением состояния (stateful) и без (stateless). В версиях с сохранением состояния (например, XMSS) сложно управлять ключами, что усложняет их внедрение.&lt;/li>
&lt;/ul>
&lt;p>NIST стандартизировал «SLH-DSA (ранее SPHINCS+)» в качестве стандарта хеш-подписи без сохранения состояния.&lt;/p>
&lt;h3 id="3-многомерная-криптография-multivariate-cryptography">3. Многомерная криптография (Multivariate Cryptography)
&lt;/h3>&lt;p>Многомерная криптография основывает свою безопасность на трудности решения систем квадратных уравнений с множеством переменных (проблема MQ: Multivariate Quadratic problem). Эта проблема известна как NP-трудная.&lt;/p>
&lt;p>&lt;strong>Краткое описание механизма:&lt;/strong>
Отправитель создает шифротекст (подпись), подставляя открытый текст (или хеш-значение) в сложное уравнение с множеством переменных, переданное в качестве открытого ключа. Законный получатель владеет «скрытой информацией (лазейкой), преобразующей структуру уравнения в легко решаемую форму» в качестве секретного ключа, и использует её для расшифровки (или проверки подписи).&lt;/p>
&lt;p>&lt;strong>Преимущества:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Очень маленький размер подписи.&lt;/li>
&lt;li>Чрезвычайно высокая скорость проверки подписи. Подходит для IoT-устройств с ограниченными ресурсами.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Недостатки:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Очень большой размер открытого ключа (может достигать от десятков до сотен килобайт).&lt;/li>
&lt;li>В прошлом некоторые перспективные алгоритмы (например, Rainbow) были взломаны классическими атаками, что делает создание доверия к их безопасности немного сложнее по сравнению с другими методами.&lt;/li>
&lt;/ul>
&lt;h3 id="4-криптография-на-кодах-code-based-cryptography">4. Криптография на кодах (Code-based Cryptography)
&lt;/h3>&lt;p>Криптография на кодах — это применение теории «кодов с исправлением ошибок», используемых для устранения ошибок в каналах связи. Предложенная в 1978 году «Криптосистема Мак-Элиса (McEliece)» является самой известной и одной из старейших в области PQC.&lt;/p>
&lt;p>&lt;strong>Краткое описание механизма:&lt;/strong>
Отправитель кодирует открытый текст, используя открытый ключ получателя (генераторную матрицу кода с исправлением ошибок, скрывающую определенную структуру), и намеренно добавляет ошибки (шум) перед отправкой. Получатель использует секретный ключ для устранения ошибок и извлечения текста. Атакующий должен исправить ошибки в случайном коде, не зная его структуры, что называется «задачей синдромного декодирования», которая является NP-трудной.&lt;/p>
&lt;p>&lt;strong>Преимущества:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Интенсивно изучается на протяжении более 40 лет без нахождения эффективных атак, что гарантирует высокую надежность безопасности.&lt;/li>
&lt;li>Высокая скорость процессов шифрования и дешифрования.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Недостатки:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Очень большой размер открытого ключа (может достигать нескольких мегабайт). Поэтому трудно использовать в средах с ограниченной пропускной способностью или памятью (например, при рукопожатии TLS).&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="последние-тенденции-стандартизации-pqc-в-nist">Последние тенденции стандартизации PQC в NIST
&lt;/h2>&lt;p>Национальный институт стандартов и технологий США (NIST) объявил глобальный конкурс на алгоритмы постквантовой криптографии следующего поколения в 2016 году и провел несколько этапов строгой оценки на протяжении многих лет.&lt;/p>
&lt;p>В 2024 году NIST окончательно утвердил следующие три алгоритма в качестве официальных Федеральных стандартов обработки информации (FIPS). Это создает прочную основу для организаций по всему миру, чтобы начать их внедрение в производственных средах.&lt;/p>
&lt;h3 id="утвержденные-стандарты-fips-2024">Утвержденные стандарты FIPS (2024)
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>FIPS 203: ML-KEM (ранее CRYSTALS-Kyber)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Назначение:&lt;/strong> Механизм инкапсуляции ключей (KEM) / Шифрование и обмен ключами&lt;/li>
&lt;li>&lt;strong>Базовая технология:&lt;/strong> Криптография на решетках (Module-LWE)&lt;/li>
&lt;li>&lt;strong>Особенности:&lt;/strong> Предлагает отличный баланс между размером ключа и скоростью, становясь стандартом по умолчанию для обмена ключами PQC в общих интернет-приложениях, таких как веб-коммуникации (TLS) и защищенные мессенджеры.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 204: ML-DSA (ранее CRYSTALS-Dilithium)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Назначение:&lt;/strong> Цифровая подпись&lt;/li>
&lt;li>&lt;strong>Базовая технология:&lt;/strong> Криптография на решетках (Module-LWE)&lt;/li>
&lt;li>&lt;strong>Особенности:&lt;/strong> Основной стандарт для цифровых подписей. Обеспечивает эффективную обработку и станет новым стандартом для всех сценариев использования электронных подписей, таких как подписание программного обеспечения и аутентификация документов.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 205: SLH-DSA (ранее SPHINCS+)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Назначение:&lt;/strong> Цифровая подпись&lt;/li>
&lt;li>&lt;strong>Базовая технология:&lt;/strong> Криптография на хеш-функциях (без сохранения состояния)&lt;/li>
&lt;li>&lt;strong>Особенности:&lt;/strong> Играет важную роль в качестве резервного варианта на случай обнаружения уязвимостей в криптографии на решетках. Хотя размер подписи больше, это подходит для случаев, когда требуется долгосрочная надежность.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="стремление-к-разнообразию">Стремление к разнообразию
&lt;/h3>&lt;p>Хотя NIST завершил начальный процесс стандартизации, поиск дополнительных алгоритмов продолжается. Учитывая сильный уклон стандартов в сторону «криптографии на решетках», обеспечение &lt;strong>криптографического разнообразия (Crypto Diversity)&lt;/strong> считается крайне важным. Ведется оценка криптографии на кодах и других методов в качестве резервных стандартов для обмена ключами, что укрепит основу PQC в будущем.&lt;/p>
&lt;hr>
&lt;h2 id="сценарии-миграции-на-pqc-и-вызовы-важность-криптографической-гибкости">Сценарии миграции на PQC и вызовы: важность «криптографической гибкости»
&lt;/h2>&lt;p>С выпуском официальных стандартов NIST, правительственные учреждения, финансовые институты и технологические компании по всему миру начнут ускорять переход с существующих RSA/ECC на PQC. Руководства Агентства национальной безопасности США (NSA) также рекомендуют скорейшее завершение миграции.&lt;/p>
&lt;h3 id="внедрение-гибридного-подхода">Внедрение гибридного подхода
&lt;/h3>&lt;p>Поскольку алгоритмы PQC являются новыми, они не прошли проверку временем, как классическая криптография. Учитывая риски скрытых ошибок в реализациях или обнаружения новых методов атак, на переходном этапе рекомендуется &lt;strong>«гибридный подход»&lt;/strong> . Этот метод сочетает проверенную криптографию (например, ECDHE) с новыми PQC (например, ML-KEM) для обмена ключами. В настоящее время браузеры и облачные сервисы активно внедряют этот подход в тестовом режиме.&lt;/p>
&lt;h3 id="достижение-криптографической-гибкости-crypto-agility">Достижение криптографической гибкости (Crypto-Agility)
&lt;/h3>&lt;p>Самое важное для компаний и разработчиков систем — обеспечение &lt;strong>«криптографической гибкости (Crypto-Agility)»&lt;/strong> . Важнейшее значение имеет гибкая архитектура системы, позволяющая быстро обновлять или заменять криптографические алгоритмы без остановки системы в случае обнаружения дефектов или появления новых стандартов.&lt;/p>
&lt;p>Создание криптографического перечня (CBOM: Cryptography Bill of Materials) для точного понимания того, «где», «какая криптография» и «для какой цели» используется в системе, является важным первым шагом на пути к миграции на PQC.&lt;/p>
&lt;hr>
&lt;h2 id="заключение-подготовка-к-грядущему-дню-q-day">Заключение: Подготовка к грядущему дню «Q-Day»
&lt;/h2>&lt;p>Хотя развитие квантовых компьютеров принесет огромную пользу человечеству, это также и величайшая угроза криптографической безопасности — основе нашего цифрового общества. Постквантовая криптография (PQC) больше не является «отдаленной темой исследований будущего». После публикации стандартов FIPS от NIST, PQC вступила в стадию полномасштабного «внедрения и миграции».&lt;/p>
&lt;p>Учитывая угрозу «Собери сейчас, расшифруй позже», миграция на PQC — это первоочередная задача, которую любая организация, работающая с конфиденциальными данными, должна начать решать «прямо сейчас». Давайте безопасно преодолеем эпоху квантовых компьютеров, глубоко понимая криптографические технологии следующего поколения и повышая криптографическую гибкость наших систем.&lt;/p></description></item><item><title>Истинная математическая структура общего метода решета числового поля (GNFS)</title><link>http://kenji.blog/ru/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</link><pubDate>Sat, 05 Sep 2026 02:26:13 +0900</pubDate><guid>http://kenji.blog/ru/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</guid><description>&lt;img src="http://kenji.blog/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/rsa_encryption_break_1788542156523.jpg" alt="Featured image of post Истинная математическая структура общего метода решета числового поля (GNFS)" />&lt;h1 id="истинная-математическая-структура-общего-метода-решета-числового-поля-gnfs">Истинная математическая структура общего метода решета числового поля (GNFS)
&lt;/h1>&lt;p>Конечная цель GNFS — найти $X, Y$ такие, что $X^2 \equiv Y^2 \pmod N$.
Для достижения этого математики построили мост между &lt;strong>&amp;ldquo;миром реальных целых чисел&amp;rdquo;&lt;/strong> и &lt;strong>&amp;ldquo;миром алгебраических полей&amp;rdquo;&lt;/strong>. Этим мостом является «гомоморфизм».&lt;/p>
&lt;h2 id="этап-1-гомоморфизм-homomorphism-соединяющий-миры">Этап 1: «Гомоморфизм» (Homomorphism), соединяющий миры
&lt;/h2>&lt;h3 id="1-выбор-многочлена-и-определение-корня">1. Выбор многочлена и определение корня
&lt;/h3>&lt;p>Для гигантского составного числа $N$ мы выбираем некоторое целое число $m$ и многочлен $f(x)$ так, чтобы $f(m) \equiv 0 \pmod N$.
(Пример: Разложите $N$ по основанию $m$ и постройте $f(x)$ из его коэффициентов. При этом предполагается, что $f(x)$ неприводим над полем рациональных чисел $\mathbb{Q}$).&lt;/p>
&lt;p>Далее, пусть $\alpha$ — один из «комплексных корней» уравнения $f(x) = 0$.
Естественно, $f(\alpha) = 0$. $\alpha$ — это не целое число, а сложное число (алгебраическое число), которое может содержать корни или мнимые единицы.&lt;/p>
&lt;h3 id="2-построение-кольца-ring-и-гомоморфизма">2. Построение кольца (Ring) и гомоморфизма
&lt;/h3>&lt;p>Здесь мы подготавливаем два математических «кольца» (миры, где определены сложение и умножение):&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Мир A: $\mathbb{Z}[\alpha]$&lt;/strong> (Кольцо алгебраических целых чисел, содержащее $\alpha$)
Это мир чисел, выраженных в виде $a + b\alpha + c\alpha^2 + \dots$.&lt;/li>
&lt;li>&lt;strong>Мир B: $\mathbb{Z}/N\mathbb{Z}$&lt;/strong> (Кольцо вычетов по модулю $N$)
Мир сравнений (по модулю), состоящий только из целых чисел от $0$ до $N-1$.&lt;/li>
&lt;/ul>
&lt;p>Здесь мы определяем отображение (mapping) $\phi$ из Мира A в Мир B следующим образом:
&lt;strong>$$\phi : \mathbb{Z}[\alpha] \to \mathbb{Z}/N\mathbb{Z}$$&lt;/strong>
&lt;strong>$$\phi(\alpha) = m \pmod N$$&lt;/strong>&lt;/p>
&lt;p>Это отображение $\phi$ — магическая операция, которая полностью заменяет переменную $\alpha$ в Мире A на целое число $m$ в Мире B.
Это $\phi$ обладает чрезвычайно мощным свойством, называемым &lt;strong>&amp;ldquo;Гомоморфизм колец&amp;rdquo; (Ring Homomorphism)&lt;/strong>.
Гомоморфизм — это свойство &lt;strong>&amp;ldquo;перехода в другой мир без разрушения структуры сложения и умножения&amp;rdquo;&lt;/strong>. То есть выполняются следующие уравнения:&lt;/p>
&lt;ul>
&lt;li>$\phi(X \times Y) = \phi(X) \times \phi(Y)$&lt;/li>
&lt;li>$\phi(X^2) = \phi(X)^2$&lt;/li>
&lt;/ul>
&lt;p>Что все это значит? Если мы сможем создать &lt;strong>&amp;ldquo;полный квадрат&amp;rdquo; ($\gamma^2$)&lt;/strong> из сложного элемента $\gamma$ в &amp;ldquo;Мире A&amp;rdquo; (мире $\alpha$), мы сможем прыгнуть в &amp;ldquo;Мир B&amp;rdquo; (мир остатков) с помощью $\phi$, и &lt;strong>форма квадрата $\phi(\gamma)^2$ будет идеально сохранена&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="этап-2-крах-разложения-на-простые-множители-и-рождение-идеала-ideal">Этап 2: Крах разложения на простые множители и рождение «Идеала» (Ideal)
&lt;/h2>&lt;p>Мы хотим собрать множество подходящих элементов $(a - b\alpha)$ в Мире A ($\mathbb{Z}[\alpha]$) и перемножить их, чтобы получить «полный квадрат» (квадратичный элемент).
Обычно мы могли бы разложить собранные $(a - b\alpha)$ на «простые множители» и объединить их так, чтобы все показатели степеней простых чисел стали четными (решается с помощью матриц), создавая таким образом квадрат.&lt;/p>
&lt;p>&lt;strong>Однако здесь на пути встает стена алгебраического отчаяния.&lt;/strong>
В мире алгебраических полей, таких как $\mathbb{Z}[\alpha]$, &lt;strong>&amp;ldquo;уникальность разложения на простые множители (каждое число может быть представлено как произведение простых чисел только одним способом)&amp;rdquo;&lt;/strong>, которую мы изучали в средней школе, &lt;strong>полностью рушится&lt;/strong>.&lt;/p>
&lt;p>(Пример: В некоторых мирах алгебраических полей $6 = 2 \times 3$, и в то же время $6 = (1+\sqrt{-5}) \times (1-\sqrt{-5})$, что делает невозможным узнать, какие из них являются истинными простыми числами).&lt;/p>
&lt;p>Если разложение на простые множители не уникально, то головоломка &amp;ldquo;подсчета простых чисел до тех пор, пока их не станет четное количество&amp;rdquo; (метод решета) принципиально невыполнима.&lt;/p>
&lt;h3 id="спасение-куммера-и-дедекинда-идеал">Спасение Куммера и Дедекинда: «Идеал»
&lt;/h3>&lt;p>Этот крах был спасен концепцией &lt;strong>&amp;ldquo;Идеала&amp;rdquo; (Ideal: Идеальное число)&lt;/strong>, созданной математиками 19 века.
Вместо того чтобы рассматривать сам элемент, рассматривая &amp;ldquo;множество кратных (идеал)&amp;rdquo;, порожденное этим элементом, разложение на простые множители снова стало возможным.&lt;/p>
&lt;p>В кольце целых чисел алгебраического поля $\mathcal{O}_K$ (более совершенном кольце, включающем $\mathbb{Z}[\alpha]$), даже если элементы не могут быть однозначно разложены на множители, доказано, что &lt;strong>&amp;ldquo;Идеал всегда может быть однозначно разложен на простые множители как произведение &amp;lsquo;простых идеалов&amp;rsquo; ($\mathfrak{p}$)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Поэтому в GNFS вместо разложения самого элемента $(a - b\alpha)$ мы выполняем &lt;strong>разложение на простые идеалы главного идеала $\langle a - b\alpha \rangle$&lt;/strong>, который он порождает.&lt;/p>
&lt;hr>
&lt;h2 id="этап-3-норма-norm-и-два-решета-sieve">Этап 3: Норма (Norm) и два решета (Sieve)
&lt;/h2>&lt;p>Тогда как нам узнать, на какие простые идеалы распадается идеал $\langle a - b\alpha \rangle$?
Здесь мы используем функцию, называемую &lt;strong>&amp;ldquo;Норма&amp;rdquo; (Norm)&lt;/strong>. Норма — это функция, которая преобразует сложные элементы алгебраического поля в &amp;ldquo;обычные целые числа $\mathbb{Z}$&amp;rdquo; реального мира.&lt;/p>
&lt;p>Норма элемента $(a - b\alpha)$ вычисляется с помощью простого многочлена $b^d f(a/b)$ (где $d$ — степень $f(x)$).&lt;/p>
&lt;p>Благодаря алгебраической теореме известно, что &lt;strong>&amp;ldquo;если норма идеала может быть полностью разложена на небольшие простые числа (является гладкой), то исходный идеал также может быть полностью разложен на небольшие простые идеалы&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Поэтому GNFS одновременно вычисляет следующие две вещи для огромного количества пар целых чисел $(a, b)$ и собирает только те пары, где обе являются &amp;ldquo;гладкими числами&amp;rdquo;:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Рациональное решето (Rational Sieve)&lt;/strong>: $a - bm$ (значение в реальном мире)&lt;/li>
&lt;li>&lt;strong>Алгебраическое решето (Algebraic Sieve)&lt;/strong>: $b^d f(a/b)$ (норма в мире алгебраического поля)&lt;/li>
&lt;/ol>
&lt;p>Мы собираем десятки миллионов пар $(a, b)$, обе из которых гладкие, решаем данные о разложении идеалов на простые множители (сколько простых идеалов присутствует) в виде гигантской матрицы (линейная алгебра над GF(2)) и находим множество $S$ пар таких, что &amp;ldquo;при перемножении показатели всех простых идеалов становятся четными&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="этап-4-два-препятствия-и-группа-классов-идеалов">Этап 4: Два «Препятствия» и группа классов идеалов
&lt;/h2>&lt;p>С помощью матричных вычислений мы обнаружили, что умножение всех идеалов $(a - b\alpha)$ во множестве $S$ дает квадрат некоторого идеала $I$.
&lt;/p>
$$\prod_{S} \langle a - b\alpha \rangle = I^2$$
&lt;p>&lt;strong>Но это еще не конец. Самая глубокая и трудная математическая стена в GNFS находится здесь.&lt;/strong>&lt;/p>
&lt;p>В конечном итоге нам нужен не &amp;ldquo;квадрат идеала&amp;rdquo;, а &lt;strong>&amp;ldquo;квадрат элемента&amp;rdquo; ($\gamma^2$)&lt;/strong> для подстановки в отображение $\phi$.
Только потому, что идеал возведен в квадрат, не означает, что сам элемент возведен в квадрат. Здесь существуют &lt;strong>два невероятно сильных математических препятствия (Obstructions)&lt;/strong>.&lt;/p>
&lt;h3 id="препятствие-1-стена-группы-классов-идеалов-ideal-class-group">Препятствие 1: Стена группы классов идеалов (Ideal Class Group)
&lt;/h3>&lt;p>Идеал $I$ не всегда является &amp;ldquo;идеалом, порожденным одним элементом (главным идеалом)&amp;rdquo;.
Невозможно извлечь конкретный элемент $\gamma$ из идеала, который не является главным.&lt;/p>
&lt;p>Здесь появляется концепция &lt;strong>&amp;ldquo;Группы классов идеалов (Class Group, $Cl_K$)&amp;rdquo;&lt;/strong>. Группа классов идеалов — это группа, которая измеряет, &amp;ldquo;сколько неглавных идеалов существует в мире алгебраического поля (насколько разрушена уникальность разложения на простые множители)&amp;rdquo;.
Даже если $\prod \langle a - b\alpha \rangle$ становится $I^2$, если $I$ не является единичным элементом (главным идеалом) в группе классов идеалов, мы не можем вернуть его к квадрату элемента.&lt;/p>
&lt;h3 id="препятствие-2-стена-группы-единиц-unit-group">Препятствие 2: Стена группы единиц (Unit Group)
&lt;/h3>&lt;p>Допустим, нам повезло, и $I$ является главным идеалом $\langle \gamma \rangle$.
Тогда $\prod \langle a - b\alpha \rangle = \langle \gamma^2 \rangle$.
Вы можете подумать: &amp;ldquo;Отлично, элемент тоже в квадрате!&amp;rdquo;, но вы глубоко ошибаетесь.&lt;/p>
&lt;p>Тот факт, что идеалы (множества кратных) равны, не означает, что элементы полностью равны. Всегда будет сдвиг на &lt;strong>&amp;ldquo;Единицу&amp;rdquo; (Unit: число, обратное которому также является целым, например 1 или -1)&lt;/strong>.
Другими словами, фактическое равенство элементов выглядит следующим образом:
&lt;/p>
$$\prod_{S} (a - b\alpha) = u \cdot \gamma^2$$
&lt;p>
(где $u$ — элемент группы единиц $U_K$)&lt;/p>
&lt;p>Если только эта единица $u$ сама не является квадратом чего-либо (квадратичным элементом), левая часть никогда не сможет стать &amp;ldquo;идеальным квадратом элемента&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="этап-5-магия-адлемана-квадратичные-характеры-quadratic-characters">Этап 5: Магия Адлемана «Квадратичные характеры» (Quadratic Characters)
&lt;/h2>&lt;p>Препятствие группы классов идеалов и препятствие группы единиц. Как нам их преодолеть?
Здесь появляется гениальный метод, называемый &lt;strong>&amp;ldquo;Квадратичными характерами&amp;rdquo; (Quadratic Characters)&lt;/strong>, введенный криптографом Леонардом Адлеманом (буква &amp;ldquo;A&amp;rdquo; в RSA) и его коллегами.&lt;/p>
&lt;p>Чтобы определить, &amp;ldquo;является ли элемент полным квадратом в алгебраическом поле&amp;rdquo;, мы используем версию символа Лежандра (квадратичного вычета) для алгебраических полей.
В гигантскую матрицу (головоломку для того, чтобы сделать количество простых идеалов четным) мы тайно добавляем несколько десятков дополнительных условий (столбцов), утверждающих, что &lt;strong>&amp;ldquo;квадратичные характеры для некоторых особых простых идеалов $\mathfrak{q}$ также все становятся равными $1$ (четными)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Когда мы находим множество $S$, удовлетворяющее этим дополнительным условиям с помощью матричных вычислений, глубокая теорема алгебраической теории чисел гарантирует, что &lt;strong>&amp;ldquo;как препятствие группы классов идеалов, так и препятствие группы единиц исчезнут естественным образом с подавляющей вероятностью&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Благодаря этому мы наконец получаем истинное уравнение:
&lt;/p>
$$\prod_{S} (a - b\alpha) = \gamma^2$$
&lt;hr>
&lt;h2 id="финальный-этап-слияние-миров-и-взлом-криптографии">Финальный этап: Слияние миров и взлом криптографии
&lt;/h2>&lt;p>Наконец, все кусочки головоломки на месте.&lt;/p>
&lt;p>&lt;strong>[Элемент в мире алгебраического поля (Мир A)]&lt;/strong>
$\gamma^2 = \prod (a - b\alpha)$
(Используйте алгоритм извлечения квадратного корня, чтобы найти $\gamma$)&lt;/p>
&lt;p>&lt;strong>[Элемент в реальном мире (мир рациональных чисел)]&lt;/strong>
$V^2 = \prod (a - bm)$
(Это просто обычное умножение целых чисел, поэтому квадратный корень $V$ можно найти легко)&lt;/p>
&lt;p>Теперь настало время для работы первого магического моста, который мы создали, &lt;strong>гомоморфизма $\phi$&lt;/strong>.
Мы переносим элемент $\gamma$ из Мира A в Мир B (мир остатков $N$) с помощью $\phi$ (отображения, которое подставляет $m$ вместо $\alpha$).
&lt;/p>
$$Y = \phi(\gamma) \pmod N$$
&lt;p>С другой стороны, мы берем $V$, созданный в реальном мире, прямо в мир остатков и называем его $X$.
&lt;/p>
$$X = V \pmod N$$
&lt;p>Благодаря свойству гомоморфизма &amp;ldquo;сохранять структуру&amp;rdquo;, квадратичное отношение, которое было истинным в Мире A, идеально сохраняется в Мире B (мире по модулю $N$).
Более того, поскольку исходные пары $(a, b)$ были сформированы так, чтобы соответствовать как $a - b\alpha$ и $a - bm$, эти $X$ и $Y$ сталкиваются в мире по модулю $N$ и порождают следующее абсолютное уравнение:&lt;/p>
&lt;p>&lt;strong>$$X^2 \equiv Y^2 \pmod N$$&lt;/strong>&lt;/p>
&lt;p>Теперь остается только молиться, чтобы $X$ и $Y$ не были тривиальными решениями ($X \equiv \pm Y$), а затем мы вычисляем:
&lt;strong>$\gcd(X - Y, N)$&lt;/strong>&lt;/p>
&lt;p>Если это нетривиальное решение, алгоритм Евклида пронесется за 0,001 секунды, и секретные простые числа $p$ и $q$, которые являются сердцем криптографии RSA, будут выведены на экран.&lt;/p>
&lt;hr>
&lt;p>Это и есть полная картина &lt;strong>&amp;ldquo;Общего метода решета числового поля (GNFS)&amp;rdquo;&lt;/strong>, который объединяет в себе суть современной математики.&lt;/p></description></item><item><title>Принцип Керкгоффса</title><link>http://kenji.blog/ru/p/printsip-kerkgofsa/</link><pubDate>Wed, 16 Apr 2025 23:53:08 +0900</pubDate><guid>http://kenji.blog/ru/p/printsip-kerkgofsa/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_2.png" alt="Featured image of post Принцип Керкгоффса" />&lt;h1 id="принцип-керкгоффса">Принцип Керкгоффса
&lt;/h1>&lt;hr>
&lt;p>Всем привет!&lt;/p>
&lt;p>Сегодня я бы хотел поговорить о чем-то довольно интересном и на самом деле очень важном — о «Принципе Керкгоффса».&lt;/p>
&lt;p>Ой, подождите-ка.&lt;br>
Возможно, кто-то из вас подумал: «Я никогда не слышал о Принципе Керкгоффса, и это звучит слишком сложно&amp;hellip;». Не волнуйтесь. Эта статья предназначена именно для вас.&lt;/p>
&lt;hr>
&lt;h2 id="что-значит-безопасная-криптография">Что значит «Безопасная криптография»?
&lt;/h2>&lt;p>Например, кто-то подходит к вам и говорит: «Этот сейф может открыть только тот, кто знает секретный способ».&lt;/p>
&lt;p>На первый взгляд это звучит очень надежно, не так ли?&lt;br>
Но если задуматься, разве это не вызывает легкого беспокойства?&lt;/p>
&lt;p>Типа: «Если этот секрет раскроют, то всему конец, верно?»&lt;/p>
&lt;p>На самом деле, именно поэтому и появился Принцип Керкгоффса.&lt;/p>
&lt;hr>
&lt;h2 id="что-же-такое-принцип-керкгоффса">Что же такое «Принцип Керкгоффса»?
&lt;/h2>&lt;p>Если говорить очень кратко, то это:&lt;/p>
&lt;p>Идея о том, что &lt;strong>«Криптография должна оставаться безопасной, даже если её механизм раскрыт»&lt;/strong> .&lt;/p>
&lt;p>Точнее говоря, «Безопасность должна зависеть только от &amp;ldquo;секретного ключа&amp;rdquo;, и это абсолютно нормально, если сам метод шифрования будет общедоступен!»&lt;/p>
&lt;p>И наоборот, «Система, которая полагается только на секретность своего алгоритма (механизма) шифрования, считается ненадежной».&lt;/p>
&lt;hr>
&lt;h2 id="безопасно-пока-механизм-в-секрете--это-может-быть-немного-опасно">«Безопасно, пока механизм в секрете» — это может быть немного опасно
&lt;/h2>&lt;p>Вот очень распространенный образ мышления:&lt;/p>
&lt;blockquote>
&lt;p>«Я никому не показывал внутренности этого приложения, поэтому с безопасностью всё в порядке».&lt;/p>
&lt;/blockquote>
&lt;p>Я понимаю это чувство.&lt;br>
Но это всё равно что сказать: «Поскольку никто его не видел, никто и не найдет уязвимостей, значит, всё хорошо, так?»&lt;/p>
&lt;p>В действительности, сам факт того, что «его никто не видел», может стать риском.&lt;/p>
&lt;hr>
&lt;h2 id="но-почему-этот-принцип-так-важен">Но почему этот принцип так важен?
&lt;/h2>&lt;p>Причина в том, что если кто-то завладеет механизмом и сможет легко его взломать, то эта криптография потерпит неудачу.&lt;/p>
&lt;p>В качестве аналогии представьте себе дверной замок с очень сложным механизмом, который на самом деле можно открыть дубликатом, сделанным в дешевом магазине.&lt;/p>
&lt;p>Важно не то, что «Это безопасно, потому что ключ является секретом», а то, что «Даже если показать весь механизм, его невозможно открыть без правильного ключа».&lt;/p>
&lt;hr>
&lt;h2 id="чувство-но-разве-это-не-страшно">Чувство «Но разве это не страшно?»
&lt;/h2>&lt;p>В этот момент многие люди чувствуют следующее:&lt;/p>
&lt;blockquote>
&lt;p>«Раскрыть весь механизм — разве это не страшно?»&lt;/p>
&lt;/blockquote>
&lt;p>Я понимаю эту тревогу.&lt;/p>
&lt;p>Ведь вы наверняка подумаете: «Если я всё покажу, разве это не скопируют или не используют во зло?»&lt;/p>
&lt;p>Но именно в этом и заключается суть Принципа Керкгоффса.&lt;br>
«Сила, которая не разрушается, даже если показать внутренности» — вот что такое настоящая безопасность.&lt;/p>
&lt;hr>
&lt;h2 id="тем-не-менее-поначалу-требуется-немного-смелости">Тем не менее, поначалу требуется немного смелости
&lt;/h2>&lt;p>Если поставить себя на место разработчика: «Опубликовать механизм = показать свои слабые стороны», это, безусловно, заставляет нервничать.&lt;/p>
&lt;p>Но подумайте об этом.&lt;/p>
&lt;p>То, что открыто показывает свой механизм и говорит: «Любой может проверить это», в конечном итоге вызывает больше доверия.&lt;/p>
&lt;p>Это ведь похоже на человеческие отношения, не так ли?&lt;/p>
&lt;p>«Человек, который показывает свое истинное лицо и с которым всё равно легко ладить» — это тот, с кем чувствуешь себя спокойнее всего.&lt;/p>
&lt;hr>
&lt;h2 id="вот-и-всё">Вот и всё
&lt;/h2>&lt;p>Принцип Керкгоффса может звучать немного теоретически, но его суть очень проста.&lt;/p>
&lt;p>Всё дело в том, чтобы &lt;strong>«Создать механизм, который не сломается, кто бы на него ни посмотрел»&lt;/strong> .&lt;/p>
&lt;p>Правильный дизайн значит больше, чем поверхностные секреты.&lt;br>
Код, который не стыдно показать, лучше, чем код, который вы не хотели бы показывать никому.&lt;/p>
&lt;p>Возможно, именно такая «сила» будет всё больше востребована в будущем.&lt;/p>
&lt;hr>
&lt;p>Спасибо за прочтение!&lt;/p>
&lt;p>Тема безопасности может быть немного сложной, но в ней есть моменты, которые перекликаются с «человеческими отношениями» и «повседневным чувством безопасности».&lt;br>
Я уверен, что если вы будете изучать её понемногу, не перегружая себя, из этого выйдет что-то хорошее.&lt;/p>
&lt;hr>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img.png"
width="189"
height="282"
srcset="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_hu715032b7fe5224f655ebb7d29b676305_77325_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_hu715032b7fe5224f655ebb7d29b676305_77325_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="Auguste Kerckhoffs"
class="gallery-image"
data-flex-grow="67"
data-flex-basis="160px"
>&lt;/p></description></item><item><title>Парадокс Монти Холла</title><link>http://kenji.blog/ru/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/</link><pubDate>Sun, 31 Mar 2024 23:41:51 +0900</pubDate><guid>http://kenji.blog/ru/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/img_1.png" alt="Featured image of post Парадокс Монти Холла" />&lt;h2 id="что-такое-парадокс-монти-холла">Что такое парадокс Монти Холла
&lt;/h2>&lt;p>Парадокс Монти Холла — это задача, основанная на игре из американского телешоу &amp;ldquo;Let&amp;rsquo;s Make a Deal&amp;rdquo;, которая выглядит следующим образом.&lt;/p>
&lt;p>Исходные условия: за одной из трех дверей находится приз, а за двумя другими — ничего.&lt;/p>
&lt;ol>
&lt;li>Участник выбирает одну из трех дверей.&lt;/li>
&lt;li>Ведущий открывает одну из двух оставшихся дверей (ту, за которой нет приза).&lt;/li>
&lt;li>Участника спрашивают, хочет ли он изменить свой выбор двери.&lt;/li>
&lt;/ol>
&lt;p>Задача состоит в том, чтобы решить, лучше ли участнику изменить свой выбор или нет.&lt;/p>
&lt;h2 id="решение">Решение
&lt;/h2>&lt;p>Решение парадокса Монти Холла выглядит следующим образом.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Если участник не меняет дверь, которую он выбрал изначально&lt;/p>
&lt;ul>
&lt;li>Вероятность выигрыша: 1/3&lt;/li>
&lt;li>Вероятность проигрыша: 2/3&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>После того как ведущий открывает дверь без приза&lt;/p>
&lt;ul>
&lt;li>Если не менять выбор, вероятность выигрыша: 1/3 (остается такой же, как в п. 1)&lt;/li>
&lt;li>Если изменить выбор, вероятность выигрыша: 2/3 (вероятность того, что приз не был выбран изначально)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>Следовательно, у участника больше шансов на выигрыш, если он изменит свой выбор.&lt;/p>
&lt;h2 id="источники">Источники
&lt;/h2>&lt;ul>
&lt;li>Wikipedia &lt;a class="link" href="https://en.wikipedia.org/wiki/Monty_Hall_problem" target="_blank" rel="noopener"
>Monty Hall problem&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Как найти простые числа до 1000 с помощью решета Эратосфена</title><link>http://kenji.blog/ru/p/kak-najti-prostye-chisla-do-1000-s-pomoshchyu-resheta-eratosfena/</link><pubDate>Sun, 09 Apr 2023 12:54:24 +0900</pubDate><guid>http://kenji.blog/ru/p/kak-najti-prostye-chisla-do-1000-s-pomoshchyu-resheta-eratosfena/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Как найти простые числа до 1000 с помощью решета Эратосфена" />&lt;h2 id="что-такое-решето-эратосфена">Что такое решето Эратосфена
&lt;/h2>&lt;p>Решето Эратосфена — это алгоритм для нахождения всех простых чисел до заданного целого числа.
Алгоритм прост и может быть реализован с помощью следующих шагов:&lt;/p>
&lt;ol>
&lt;li>Создайте логический (bool) массив из N элементов и инициализируйте все элементы как true.&lt;/li>
&lt;li>Установите 0-й и 1-й элементы массива как false (так как 0 и 1 не являются простыми числами).&lt;/li>
&lt;li>Если 2-й элемент массива равен true, выведите 2 как простое число.&lt;/li>
&lt;li>Установите все элементы, кратные 2, начиная с $2^2$, в false ※&lt;/li>
&lt;li>Если 3-й элемент массива равен true, выведите 3 как простое число.&lt;/li>
&lt;li>Установите все элементы, кратные 3, начиная с $3^2$, в false.&lt;/li>
&lt;li>Повторите тот же процесс для 4-го, 5-го, &amp;hellip;, N-го элементов.&lt;/li>
&lt;/ol>
&lt;p>※ Причина, по которой мы устанавливаем в false элементы, начиная с квадрата числа, заключается в том, что числа, меньшие квадрата, уже были обработаны (перечисление завершено).&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/Animation_Sieb_des_Eratosthenes.gif"
width="445"
height="369"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/Animation_Sieb_des_Eratosthenes_hua63c6218ac9f9cdba93ccb20db392e0e_206214_480x0_resize_box_1.gif 480w, http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/Animation_Sieb_des_Eratosthenes_hua63c6218ac9f9cdba93ccb20db392e0e_206214_1024x0_resize_box_1.gif 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="120"
data-flex-basis="289px"
>&lt;/p>
&lt;h2 id="реализация-на-rust">Реализация на Rust
&lt;/h2>&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-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fn main() {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let n = 1000;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut is_prime = vec![true; n+1];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[0] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[1] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in 2..=n {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if is_prime[i] {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> println!(&amp;#34;{}&amp;#34;, i);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut j = i * i;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> while j &amp;lt;= n {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[j] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> j += i;
&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&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>Мы реализуем немного более быструю версию, учитывая следующие моменты:&lt;/p>
&lt;ul>
&lt;li>Вместо инициализации массива значением true, инициализируем его значением false (так быстрее).&lt;/li>
&lt;li>Поскольку кратные 2 не являются простыми числами, мы опускаем процесс установки кратных 2 в false.&lt;/li>
&lt;li>Нет необходимости выполнять цикл до n; если найти простые числа до квадратного корня из n, можно найти все простые числа до n.&lt;/li>
&lt;/ul>
&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fn main() {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let n = 1000;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut is_prime = vec![false; n+1];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[2] = true;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in (3..=n).step_by(2) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[i] = true;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in 3..=((n as f64).sqrt() as usize) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if is_prime[i] {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut j = i * i;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> while j &amp;lt;= n {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[j] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> j += i * 2;
&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>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in (2..=n).filter(|&amp;amp;x| is_prime[x]) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> println!(&amp;#34;{}&amp;#34;, i);
&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>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="источники">Источники
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9" target="_blank" rel="noopener"
>Решето Эратосфена&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Как рисовать графики с помощью Python (matplotlib.pyplot)</title><link>http://kenji.blog/ru/p/%D0%BA%D0%B0%D0%BA-%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B8-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-python-matplotlib-pyplot/</link><pubDate>Sun, 09 Apr 2023 01:02:19 +0900</pubDate><guid>http://kenji.blog/ru/p/%D0%BA%D0%B0%D0%BA-%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B8-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-python-matplotlib-pyplot/</guid><description>&lt;img src="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Как рисовать графики с помощью Python (matplotlib.pyplot)" />&lt;p>&lt;img src="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="1200"
height="288"
srcset="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue3f23818eeeec9c43d6452cc0f61fb52_43864_480x0_resize_box_3.png 480w, http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue3f23818eeeec9c43d6452cc0f61fb52_43864_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="416"
data-flex-basis="1000px"
>&lt;/p>
&lt;h1 id="требования">Требования
&lt;/h1>&lt;ul>
&lt;li>Аккаунт Google&lt;/li>
&lt;/ul>
&lt;h1 id="шаги">Шаги
&lt;/h1>&lt;ol>
&lt;li>Перейдите на &lt;a class="link" href="https://colab.research.google.com/" target="_blank" rel="noopener"
>https://colab.research.google.com/&lt;/a>&lt;/li>
&lt;li>Выберите «Файл» → «Создать блокнот»&lt;/li>
&lt;li>Вставьте и выполните следующий код&lt;/li>
&lt;/ol>
&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;/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">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&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 class="n">x&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">linspace&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">2&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">pi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">500&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&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">sin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;sin curve&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">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&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">cos&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;cos curve&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">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">legend&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># отображение легенды&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">show&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;h1 id="результат">Результат
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png"
width="568"
height="413"
srcset="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hucdb24ab588d845f9f7a56ef99be2c709_27745_480x0_resize_box_3.png 480w, http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hucdb24ab588d845f9f7a56ef99be2c709_27745_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="330px"
>&lt;/p>
&lt;h1 id="ссылки">Ссылки
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://matplotlib.org/3.5.3/api/_as_gen/matplotlib.pyplot.html" target="_blank" rel="noopener"
>matplotlib.pyplot — Matplotlib 3.5.3 documentation&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Великие математики</title><link>http://kenji.blog/ru/p/%D0%B2%D0%B5%D0%BB%D0%B8%D0%BA%D0%B8%D0%B5-%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8/</link><pubDate>Thu, 22 Sep 2022 23:06:37 +0900</pubDate><guid>http://kenji.blog/ru/p/%D0%B2%D0%B5%D0%BB%D0%B8%D0%BA%D0%B8%D0%B5-%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/img.png" alt="Featured image of post Великие математики" />&lt;h3 id="ферма-p-de-fermat-1601-1665">Ферма (P. de Fermat, 1601-1665)
&lt;/h3>&lt;p>Выдающийся французский математик 17-го века. Заложил основы аналитической геометрии, теории вероятностей и исчисления. Также является основателем теории чисел.&lt;/p>
&lt;h3 id="диофант-diophantus-ок-207-291">Диофант (Diophantus, ок. 207-291)
&lt;/h3>&lt;p>Греческий математик. Известен введением символики и изучением рациональных решений. Его главный труд — «Арифметика». Область нахождения рациональных решений уравнений называется диофантовым анализом.&lt;/p>
&lt;h3 id="эйлер-l-euler-1707-1783">Эйлер (L. Euler, 1707-1783)
&lt;/h3>&lt;p>Король математики родом из Швейцарии. Добился достижений почти во всех областях математики. Оставил более 700 статей и 45 книг.&lt;/p>
&lt;h3 id="лежандр-a-m-legendre-1752-1833">Лежандр (A. M. Legendre, 1752-1833)
&lt;/h3>&lt;p>Французский математик. Оставил множество достижений в теории чисел, эллиптических интегралах и задачах притяжения. Термин «теория чисел» происходит от его главного труда «Опыт теории чисел».&lt;/p>
&lt;h3 id="куммер-e-e-kummer-1810-1893">Куммер (E. E. Kummer, 1810-1893)
&lt;/h3>&lt;p>Немецкий математик. Добился больших результатов, применив теорию чисел круговых полей к Великой теореме Ферма.&lt;/p>
&lt;h3 id="декарт-r-descartes-1596-1650">Декарт (R. Descartes, 1596-1650)
&lt;/h3>&lt;p>Оригинальный французский философ. Основные труды: «Рассуждение о методе», «Геометрия», «Космология».&lt;/p>
&lt;h3 id="паскаль-b-pascal-1623-1662">Паскаль (B. Pascal, 1623-1662)
&lt;/h3>&lt;p>Французский философ, известный своими исследованиями в области теории вероятностей и механики жидкостей. Позже присоединился к янсенистам и занялся религиозной деятельностью. В это время были написаны его «Мысли».&lt;/p>
&lt;h3 id="баше-c-g-bachet-1581-1638">Баше (C. G. Bachet, 1581-1638)
&lt;/h3>&lt;p>Французский аристократ, увлекавшийся числовыми головоломками. Издал латинский перевод «Арифметики» Диофанта и добавил свои исследования в качестве комментариев.&lt;/p>
&lt;h3 id="валлис-j-wallis-1616-1703">Валлис (J. Wallis, 1616-1703)
&lt;/h3>&lt;p>Английский математик. В своем главном труде «Арифметика бесконечного» придал математическую форму понятию предела и внес вклад в создание основ дифференциального и интегрального исчисления.&lt;/p>
&lt;h3 id="броункер-w-brouncker-1620-1684">Броункер (W. Brouncker, 1620-1684)
&lt;/h3>&lt;p>Ирландский аристократ. Первый президент Лондонского королевского общества. Любитель математики, общался с Валлисом и другими.&lt;/p>
&lt;h3 id="лагранж-j-l-lagrange-1736-1813">Лагранж (J. L. Lagrange, 1736-1813)
&lt;/h3>&lt;p>Французский математик, родившийся в Италии. Сменил Эйлера на посту директора математического отделения Берлинской академии. Добился больших достижений в теории чисел, аналитической механике и др.&lt;/p>
&lt;h3 id="зигель-c-l-siegel-1896-1981">Зигель (C. L. Siegel, 1896-1981)
&lt;/h3>&lt;p>Немецкий специалист по теории чисел. Внес большой вклад в аналитическую теорию чисел.&lt;/p>
&lt;h3 id="фибоначчи-l-fibonacci-ок-1175-1250">Фибоначчи (L. Fibonacci, ок. 1175-1250)
&lt;/h3>&lt;p>Итальянский математик. В своем главном труде «Книга абака» использовал индо-арабские цифры и способствовал их распространению. Также обсуждал конгруэнтные числа в «Книге квадратов».&lt;/p>
&lt;h3 id="бейкер-a-baker-1939-">Бейкер (A. Baker, 1939-)
&lt;/h3>&lt;p>Английский специалист по теории чисел. Был удостоен Филдсовской премии вместе с Хэйсукэ Хиронакой за вклад в теорию трансцендентных чисел.&lt;/p>
&lt;h3 id="пуанкаре-j-poincare-1854-1912">Пуанкаре (J. Poincare, 1854-1912)
&lt;/h3>&lt;p>Французский математик, которого называют последним математиком-универсалом. Оставил выдающиеся труды по теории автоморфных функций, неевклидовой геометрии, дифференциальным уравнениям, небесной механике, электродинамике, а также научно-критические статьи.&lt;/p>
&lt;h3 id="морделл-l-j-mordell-1888-1972">Морделл (L. J. Mordell, 1888-1972)
&lt;/h3>&lt;p>Математик американского происхождения. Его родители — эмигранты из Литвы. Оставил множество статей по теории диофантовых уравнений, но теорема Морделла в теории эллиптических кривых особенно известна. Вейль обобщил ее для случая общих алгебраических кривых, после чего арифметическая алгебраическая геометрия получила бурное развитие.&lt;/p>
&lt;h3 id="вейль-a-weil-1906-">Вейль (A. Weil, 1906-)
&lt;/h3>&lt;p>Французский математик еврейского происхождения. В молодости заинтересовался проблемой Ферма, фундаментально пересмотрел алгебраическую геометрию для применения в теории чисел и заложил ее строгие основы. Также известен своими трудами по истории математики.&lt;/p>
&lt;h3 id="мерсенн-m-mersenne-1588-1648">Мерсенн (M. Mersenne, 1588-1648)
&lt;/h3>&lt;p>Французский священник ордена минимов. Выступал посредником в переписке между математиками разных стран. Числа, названные числами Мерсенна, на самом деле были придуманы Ферма.&lt;/p>
&lt;h3 id="роберваль-g-p-de-roberval-1602-1675">Роберваль (G. P. de Roberval, 1602-1675)
&lt;/h3>&lt;p>Французский математик. Был едва ли не единственным человеком в то время, получившим должность профессора математики, известен исследованиями циклоиды.&lt;/p>
&lt;h3 id="абель-n-h-abel-1802-1829">Абель (N. H. Abel, 1802-1829)
&lt;/h3>&lt;p>Норвежский математик. Добился выдающихся результатов, таких как неразрешимость в радикалах общего уравнения 5-й степени, теория эллиптических функций и теория абелевых интегралов, но умер молодым.&lt;/p>
&lt;h3 id="якоби-k-g-jacob-1804-1851">Якоби (K. G. Jacob, 1804-1851)
&lt;/h3>&lt;p>Немецкий математик еврейского происхождения. Оставил большие достижения в теории эллиптических функций, теории тета-функций, дифференциальных уравнениях и вариационном исчислении. Представил миру достижения Абеля. Известен также тем, что отвергал прагматизм, считая целью науки «честь человеческого духа».&lt;/p>
&lt;h3 id="гаусс-c-f-gauss-1777-1855">Гаусс (C. F. Gauss, 1777-1855)
&lt;/h3>&lt;p>Король математики, родившийся в Германии. Известен исследованиями в теории чисел, неевклидовой геометрии, геодезии, гипергеометрических рядах, теории поверхностей и земном магнетизме. Был перфекционистом и не публиковал результаты, пока они не были доведены до совершенства. Главный труд — «Арифметические исследования».&lt;/p>
&lt;h3 id="ламе-g-lame-1795-1870">Ламе (G. Lame, 1795-1870)
&lt;/h3>&lt;p>Французский математик. Внес вклад в теорию упругости, теорию теплопроводности и др.&lt;/p>
&lt;h3 id="лиувилль-j-liouville-1809-1882">Лиувилль (J. Liouville, 1809-1882)
&lt;/h3>&lt;p>Французский математик. Внес вклад в дифференциальные уравнения, теорию трансцендентных чисел и теорию функций.&lt;/p>
&lt;h3 id="коши-a-l-cauchy-1789-1857">Коши (A. L. Cauchy, 1789-1857)
&lt;/h3>&lt;p>Французский математик. Очень плодовит, имеет множество достижений в теоретической физике и математике. Говорят, что во Франции его уважают так же, как Гаусса.&lt;/p>
&lt;h3 id="галуа-e-galois-1811-1832">Галуа (E. Galois, 1811-1832)
&lt;/h3>&lt;p>Французский математик. Введя понятие группы, объяснил теорему Абеля о том, что уравнения 5-й степени и выше в общем виде неразрешимы в радикалах. Погиб на дуэли в молодом возрасте, и сейчас известно, что причиной стала тривиальная ссора из-за женщины.&lt;/p>
&lt;h3 id="гензель-k-hensel-1861-1941">Гензель (K. Hensel, 1861-1941)
&lt;/h3>&lt;p>Немецкий математик. Ученик Кронекера. Применив методы теории функций, ввел в теорию чисел p-адическую теорию (p-адический анализ).&lt;/p>
&lt;h3 id="хассе-h-hasse-1898-1979">Хассе (H. Hasse, 1898-1979)
&lt;/h3>&lt;p>Немецкий математик. Ученик Гензеля, внес вклад в обоснование p-адического анализа и его применения. Занимался развитием теории полей классов, исследованием L-функций эллиптических кривых и др.&lt;/p>
&lt;h3 id="кронекер-l-kronecker-1823-1891">Кронекер (L. Kronecker, 1823-1891)
&lt;/h3>&lt;p>Немецкий математик еврейского происхождения. Внес вклад в теорию эллиптических функций, теорию чисел и др. Известен тем, что выступал за арифметическое обоснование математики, но его сильный субъективизм, необоснованная критика коллеги по Берлинскому университету Вейерштрасса и препятствование трудоустройству Кантора создали негативный образ его жизни.&lt;/p>
&lt;h3 id="гильберт-d-hilbert-1862-1943">Гильберт (D. Hilbert, 1862-1943)
&lt;/h3>&lt;p>Немецкий математик. Оставил огромный след во всех областях математики, включая теорию инвариантов, алгебраическую теорию чисел и основания математики. 23 проблемы, предложенные им на Международном конгрессе математиков в Париже (1900), оказали большое влияние на развитие математики.&lt;/p>
&lt;h3 id="риман-b-riemann-1826-1866">Риман (B. Riemann, 1826-1866)
&lt;/h3>&lt;p>Немецкий математик. Добился больших результатов, затрагивающих основы математики, таких как понятие римановой поверхности в теории комплексных функций и риманова геометрия.&lt;/p>
&lt;h3 id="фальтингс-g-faltings-1954-">Фальтингс (G. Faltings, 1954-)
&lt;/h3>&lt;p>Немецкий математик. Решил гипотезу Морделла в 1983 году.&lt;/p>
&lt;h3 id="уайлс-a-wiles-1953-">Уайлс (A. Wiles, 1953-)
&lt;/h3>&lt;p>Математик британского происхождения. Ведущий специалист в своей области, внесший большой вклад в исследования, такие как главная гипотеза Ивасавы и гипотеза Бёрча — Свиннертон-Дайера.&lt;/p>
&lt;h3 id="литература">Литература
&lt;/h3>&lt;p>Великая теорема Ферма решена! От Эйлера до доказательства Уайлса (Издательство Коданся)&lt;/p></description></item></channel></rss>