<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@u_dorozhkina</title><generator>teletype.in</generator><description><![CDATA[Crypto enthusiast! :)
MY DISCORD: useless_dorozhkina#1394]]></description><image><url>https://img3.teletype.in/files/2e/7f/2e7ff87c-0c32-4176-9962-352cbe0dc86f.png</url><title>@u_dorozhkina</title><link>https://teletype.in/@u_dorozhkina</link></image><link>https://teletype.in/@u_dorozhkina?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/u_dorozhkina?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/u_dorozhkina?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 24 Jun 2026 00:11:54 GMT</pubDate><lastBuildDate>Wed, 24 Jun 2026 00:11:54 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/ca72Fj0RERX</guid><link>https://teletype.in/@u_dorozhkina/ca72Fj0RERX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/ca72Fj0RERX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Понятие доказательств с нулевым разглашением: Искусство доказывать, не раскрывая</title><pubDate>Tue, 04 Apr 2023 06:30:35 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/3c/a6/3ca6ab23-9fc1-4f17-a8e5-d8433e32195d.png"></media:content><description><![CDATA[<img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/641383ba828efbefb402826f_Image%203-16-23%20at%202.01%20PM.jpeg"></img>Ссылка на оригинал статьи: https://www.leo.app/blog/understanding-zero-knowledge-proofs-the-art-of-proving-without-revealing
Мой Discord: useless_dorozhkina#1394]]></description><content:encoded><![CDATA[
  <blockquote id="TXnt"><em>Ссылка на оригинал статьи: <a href="https://www.leo.app/blog/understanding-zero-knowledge-proofs-the-art-of-proving-without-revealing" target="_blank">https://www.leo.app/blog/understanding-zero-knowledge-proofs-the-art-of-proving-without-revealing</a><br />Мой Discord: useless_dorozhkina#1394</em></blockquote>
  <figure id="u2Vf" class="m_column">
    <img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/641383ba828efbefb402826f_Image%203-16-23%20at%202.01%20PM.jpeg" width="2536" />
  </figure>
  <h2 id="fiCw">Введение</h2>
  <p id="RSVn">В мире криптографии и конфиденциальности доказательства с нулевым разглашением (ZKPs) стали мощным инструментом для подтверждения подлинности информации без раскрытия лежащих в ее основе данных. В этой статье исследуются концепция доказательств с нулевым разглашением, их применение и то, как они работают. К концу этой статьи у вас будет четкое представление о том, что такое ZKPs, и почему они являются важным компонентом современной криптографии.</p>
  <h2 id="TEPH">Раздел 1: Краткая история доказательств с нулевым разглашением</h2>
  <p id="05K6">Концепция доказательств с нулевым разглашением восходит к 1980-м годам, когда <a href="https://ru.wikipedia.org/wiki/%D0%93%D0%BE%D0%BB%D1%8C%D0%B4%D0%B2%D0%B0%D1%81%D1%81%D0%B5%D1%80,_%D0%A8%D0%B0%D1%84%D0%B8" target="_blank">Шафи Голдвассер</a>, <a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D0%B0%D0%BB%D0%B8,_%D0%A1%D0%B8%D0%BB%D1%8C%D0%B2%D0%B8%D0%BE" target="_blank">Сильвио Микали</a> и <a href="https://ru.frwiki.wiki/wiki/Charles_Rackoff" target="_blank">Чарльз Ракофф</a> представили эту идею в исследовательской работе. Этот прорыв в криптографии с тех пор нашел применение в различных областях, таких как безопасное голосование, криптовалюта, улучшения <a href="https://ru.wikipedia.org/wiki/ReCAPTCHA" target="_blank">recaptcha</a> и обмен данными с сохранением конфиденциальности.</p>
  <h2 id="Jn3h">Раздел 2: Что такое доказательства с нулевым разглашением?</h2>
  <p id="TupW">Доказательство с нулевым разглашением — это криптографический метод, который позволяет одной стороне, известной как доказывающий, продемонстрировать другой стороне, известной как проверяющий, что они обладают определенным знанием, не раскрывая никакой информации о самом знании. Другими словами, ZKPs позволяют доказать правильность утверждения, не раскрывая его содержание.</p>
  <p id="nwho">Представьте себе сценарий, в котором вы хотите доказать, что знаете пароль к защищенной системе, фактически не раскрывая его. Доказательство с нулевым разглашением позволит вам доказать, что вы знаете пароль, никогда не раскрывая сам пароль. Это криптографическое новшество обеспечивает более безопасный способ взаимодействия между сторонами.</p>
  <h2 id="RvTq">Раздел 3: Типы доказательств с нулевым разглашением</h2>
  <p id="Zc4j">Существует два основных типа доказательств с нулевым разглашением:</p>
  <p id="UqNS">Интерактивные ZKPs: В интерактивных ZKPs доказывающий и проверяющий участвуют в серии взаимных обменов или &quot;раундов&quot; общения. Во время этих раундов проверяющий задает доказывающему ряд вопросов, и доказывающий отвечает необходимой информацией, чтобы убедить проверяющего в достоверности доказательства, не раскрывая лежащего в его основе секрета.</p>
  <p id="hAvb">Неинтерактивные ZKPs: Неинтерактивные ZKPs не требуют какого-либо взаимодействия между проверяющим и верификатором. Если вы слышали о <a href="https://teletype.in/@u_dorozhkina/7bZpNZVOEpE" target="_blank">zk-SNARK</a>, то это краткие неинтерактивные аргументы знаний с нулевым разглашением, которые попадают в эту категорию ZKPs. Доказывающий генерирует единственное доказательство, которое проверяющий может проверить независимо. Неинтерактивные ZKPs более практичны в определенных приложениях, поскольку они снижают затраты на связь между вовлеченными сторонами.</p>
  <h2 id="JgOC">Раздел 4: Как работают доказательства с нулевым разглашением</h2>
  <p id="cViK">Чтобы понять, как работают доказательства с нулевым разглашением, давайте рассмотрим простой пример, известный как аналогия с <a href="https://agryaznov.com/crypto-tech/2018/08/13/ZK-Proof-for-kids/" target="_blank">&quot;пещерой Али-Бабы&quot;</a>.</p>
  <p id="h3zp">Представьте себе пещеру, которая имеет единственный вход и разделяется на два пути, образуя круг с массивной дверью, блокирующей соединение между двумя путями. Дверь можно открыть только с помощью секретного пароля. Пегги, доказывающий, хочет доказать Виктору, проверяющему, что она знает секретный пароль, не раскрывая его.</p>
  <p id="HgpP">Вот как работает этот процесс:</p>
  <ol id="5DeG">
    <li id="R1M7">Пегги идет в пещеру, выбирая наугад один из двух путей (A или B), в то время как Виктор ждет снаружи.</li>
    <li id="I5R1">Виктор кричит Пегги, чтобы она возвращалась из пути А или В, также выбранного наугад.</li>
    <li id="JwrI">Пегги возвращается из пути, указанного Виктором. Если она знает секретный пароль, она может открыть дверь, чтобы выйти из любого пути.</li>
    <li id="gDfd">Этот процесс повторяется несколько раз. Если Пегги знает секретный пароль, она всегда может вернуться из пути, указанного Виктором. Если она не знает пароль, у нее есть 50%-ная вероятность каждый раз угадывать правильный путь.</li>
    <li id="NHIy">После нескольких повторений Виктор становится все более уверенным в том, что Пегги знает секретный пароль. Однако он никогда не узнает сам пароль, поскольку Пегги лишь демонстрирует свою способность возвращаться из указанного пути, не раскрывая, как она открыла дверь.</li>
  </ol>
  <h2 id="VNR2">Раздел 5: Применение доказательств с нулевым разглашением</h2>
  <p id="Z4RM">Доказательства с нулевым разглашением имеют множество применений в различных отраслях и областях. Некоторые из наиболее заметных из них:</p>
  <p id="B1Mj">Криптовалюта: ZKPs играют значительную роль в повышении конфиденциальности и безопасности криптовалют. Например, <a href="https://ru.wikipedia.org/wiki/Zcash" target="_blank">Zcash</a>, криптовалюта, ориентированная на конфиденциальность, использует тип доказательства с нулевым разглашением, называемый zk-SNARKs (краткий неинтерактивный аргумент знания с нулевым разглашением), чтобы скрыть детали транзакции, такие как отправитель, получатель и сумма транзакции.</p>
  <p id="Lm2d">Безопасное голосование: Доказательства с нулевым разглашением могут быть использованы для создания безопасных систем электронного голосования. Избиратели могут подтвердить свое право голоса, не раскрывая своей личности, обеспечивая как конфиденциальность избирателей, так и целостность процесса голосования.</p>
  <p id="eQOI">Проверка личности: ZKPs можно использовать для создания систем цифровой идентификации, сохраняющих конфиденциальность. Пользователи могут подтвердить свою личность поставщику услуг, не раскрывая конфиденциальную личную информацию, такую как дата их рождения или номер социального страхования.</p>
  <p id="yOpl">Безопасные многосторонние вычисления: В случаях, когда нескольким сторонам необходимо совместно работать над конфиденциальными данными, не раскрывая свои индивидуальные входные данные, ZKPs может облегчить безопасные вычисления. Например, группа компаний может захотеть рассчитать свой общий доход, не раскрывая друг другу свои индивидуальные доходы.</p>
  <p id="U39n">Аутентификация: Системы аутентификации на основе паролей могут использовать ZKPs для проверки пароля пользователя без необходимости передачи пользователем своего пароля через Интернет, что снижает риск перехвата и кражи пароля.</p>
  <h2 id="a7ga">Раздел 6: Проблемы и ограничения доказательств с нулевым разглашением</h2>
  <p id="IxmR">Несмотря на свои многообещающие возможности, доказательства с нулевым разглашением не лишены проблем и ограничений:</p>
  <p id="JilI">Вычислительная сложность: Создание и проверка доказательств с нулевым разглашением может потребовать больших вычислительных затрат, что приводит к снижению производительности по сравнению с традиционными криптографическими методами. Эта проблема привела к продолжающимся исследованиям и разработкам для создания более эффективных алгоритмов и реализаций ZKP.</p>
  <p id="8iyy">Надежная настройка (Trusted Setup): Для некоторых систем ZKP, таких, как система проверки <a href="https://eprint.iacr.org/2019/1047.pdf" target="_blank">Marlin</a>, требуется начальный этап &quot;надежной настройки&quot;. Эта настройка создает секреты, которые, в свою очередь, генерируют общие параметры; они будут использоваться во многих различных доказательствах для многих различных программ. Эти секреты должны быть забыты; в противном случае безопасность системы будет поставлена под угрозу. Сбой в безопасности процедуры настройки может быть сложно обнаружить, что вызывает опасения по поводу надежности созданных общих параметров.</p>
  <p id="IMYV">Настройка без доверия (Trustless Setup): Непосредственный вопрос, следующий за проблемами надежной настройки, заключается в том, почему бы вместо этого не использовать алгоритмы, использующие настройку без доверия? Во всех системах ZKP существуют компромиссы в скорости, сложности, требуемых вычислениях, времени проверки и самоконтроля. Надежные настройки обычно выполняются намного быстрее и создают более краткие доказательства, чем настройки без доверия. Церемонии настройки без доверия обычно должны выполняться для каждой отдельной программы, для которой должны быть сгенерированы доказательства, в то время как надежная настройка выполняется один раз.</p>
  <p id="uNp8">Внедрение: Внедрение доказательств с нулевым разглашением в реальных приложениях все еще относительно невелико из-за сложности внедрения систем ZKP и необходимости специальных знаний для их интеграции в существующие системы.</p>
  <h2 id="wI38">Вывод</h2>
  <p id="Wwth">Доказательства с нулевым разглашением превратились в мощный криптографический инструмент, обеспечивающий безопасный и сохраняющий конфиденциальность обмен данными и аутентификацию в различных приложениях. Несмотря на сохраняющиеся проблемы с точки зрения вычислительной эффективности и широкого внедрения, потенциальное влияние ZKPs на конфиденциальность и безопасность в цифровом мире является значительным. По мере продолжения исследований и разработки новых методов доказательства с нулевым разглашением  будут играть все более важную роль в обеспечении безопасности нашей цифровой жизни.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/uysLvSi8ntX</guid><link>https://teletype.in/@u_dorozhkina/uysLvSi8ntX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/uysLvSi8ntX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Need for speed: Глава об эллиптических кривых</title><pubDate>Tue, 29 Nov 2022 12:24:21 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/94/bd/94bde05f-0f45-46bd-b2fb-2e13a145581b.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/a5/08/a508025c-76df-469c-8627-f629a547ab9d.png"></img>Ссылка на оригинал статьи: https://www.entropy1729.com/need-for-speed-elliptic-curves-chapter/
Мой Discord: useless_dorozhkina#1394]]></description><content:encoded><![CDATA[
  <blockquote id="2B1M"><em>Ссылка на оригинал статьи: <a href="https://www.entropy1729.com/need-for-speed-elliptic-curves-chapter/" target="_blank">https://www.entropy1729.com/need-for-speed-elliptic-curves-chapter/</a><br />Мой Discord: useless_dorozhkina#1394</em></blockquote>
  <figure id="e5p8" class="m_column">
    <img src="https://img3.teletype.in/files/a5/08/a508025c-76df-469c-8627-f629a547ab9d.png" width="1750" />
  </figure>
  <h2 id="6qA7">Введение</h2>
  <p id="RpFk">Эллиптические кривые (EC) получили широкое признание в качестве инструментов для криптографии. Они предлагают ряд преимуществ по сравнению с другими методами, такими как RSA, обеспечивая равные уровни безопасности с более короткими ключами (например, 228-битные ключи в криптографии EC так же хороши, как 2300-битные ключи RSA). Это является преимуществом, поскольку все больше и больше криптографии выполняется на смартфонах, которые менее мощны, чем компьютеры. Это кривые, определяемые уравнением </p>
  <figure id="EUI9" class="m_original">
    <img src="https://img2.teletype.in/files/58/4a/584a42d7-3677-4394-a40c-1e7fac681413.png" width="198" />
  </figure>
  <p id="KUUy">над каким-либо <a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B5_(%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0)" target="_blank">полем</a> (например, полем действительных чисел). Их форма зависит от <em>a</em> и <em>b</em>, но более или менее они выглядят как на следующем рисунке:</p>
  <figure id="v06U" class="m_column">
    <img src="https://img2.teletype.in/files/5c/c3/5cc38c5d-901b-4c4b-abe9-d1e13c8e6f4c.png" width="820" />
  </figure>
  <p id="TL4o">В криптографии нас не интересуют кривые, определенные над действительными числами. Мы работаем с кривыми над некоторым конечным полем <em>Fp</em> (то есть множеством с конечным числом элементов, таких как 53, 101 или 2^(255)−19), потому что это дает нам математическую структуру (<a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0" target="_blank">конечную группу</a>), которая очень удобна. Кривая выглядит как разбросанные без четкого рисунка точки на конечном поле:</p>
  <figure id="KeW4" class="m_original">
    <img src="https://img3.teletype.in/files/ac/60/ac607112-410c-4bb8-80e9-4524bb2bae4e.png" width="622" />
  </figure>
  <p id="mwPG">Эллиптические кривые играют роль в обмене ключами при подключении через SSH к серверу или для подтверждения владения bitcoin. Они также поригождаются при выполнении цифровых подписей, генерации случайных чисел (хотя с этим и были некоторые проблемы), и они полезны даже для факторных чисел (<a href="https://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%8D%D0%BB%D0%BB%D0%B8%D0%BF%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BA%D1%80%D0%B8%D0%B2%D1%8B%D1%85" target="_blank">метод Ленстры</a>). Например, в алгоритме цифровой подписи с эллиптической кривой (<a href="https://ru.wikipedia.org/wiki/ECDSA" target="_blank">ECDSA</a>) у вас есть следующие шаги (не волнуйтесь, если вы не понимаете всех терминов сейчас, мы рассмотрим их один за другим позже):</p>
  <p id="SwNu">1. Вычислить <em>E=hash(message)</em>, где <em>hash</em> — надежная <a href="https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F" target="_blank">хеш-функция</a>.</p>
  <p id="gR4l">2. Принять <em>Z</em> равным <em>n</em> крайним левым битам <em>E</em>, где <em>n</em> — порядок группы (то есть количество элементов, составляющих группу).</p>
  <p id="m7Bx">3. Выбрать криптографически защищенное случайное число <em>k</em> (никогда не используйте одно и то же <em>k</em> дважды, иначе вы раскроете свой ключ).</p>
  <p id="Hnqw">4. Вычислить <em>(x1, y1) = kg</em>, где <em>g</em> — генератор группы.</p>
  <p id="r9jb">5. Пусть <em>r = x1</em>.</p>
  <p id="I44o">6. Вычислить </p>
  <figure id="kbd1" class="m_original">
    <img src="https://img2.teletype.in/files/9f/60/9f60e9d0-92c0-4246-834b-4b43cf18ff4e.png" width="312" />
  </figure>
  <p id="o13Q">где <em>sk</em> — секретный ключ.</p>
  <p id="SwRd">7. Подпись — это пара <em>(r, s)</em>.</p>
  <p id="Tdlc">В этом примере на шаге 4 мы должны выполнить сложение на кривой, чтобы прийти к точке <em>(x1, y1)</em>, которая даст нам <em>r</em>. В общем случае, <em>k</em> — это огромное число (например, имеющее 256 бит), так что эта операция может быть довольно дорогостоящей. Кроме того, если реализация не выполнена должным образом, криптография эллиптической кривой может стать мишенью для <a href="https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%D0%BF%D0%BE_%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%BC_%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D0%B0%D0%BC" target="_blank">атак по сторонним каналам</a>, таких как <a href="https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8" target="_blank">атак по времени</a> и <a href="https://ru.wikipedia.org/wiki/DNS_cache_poisoning" target="_blank">атаки на кэш</a>. Некоторые эллиптические кривые обладают свойствами, которые допускают реализацию в постоянном времени, что делает их устойчивыми к этим стратегиям.</p>
  <p id="bcnv">Эллиптические кривые также появляются в zk-SNARKs (кратких не интерактивных аргументах знания с нулевым разглашением; мы отправимся на охоту за SNARK <a href="https://teletype.in/@u_dorozhkina/7bZpNZVOEpE" target="_blank">в другом посте</a>), чтобы обеспечить гомоморфное скрытие. Слово звучит важно, но идея, лежащая в его основе, проста. Предположим, что есть две переменные, <em>x</em> и <em>y</em>, и вы хотите (или вам нужно) узнать <em>x + y</em>. Проблема в том, что вы не знаете их напрямую, но знаете их зашифрованную форму E(<em>x</em>) и E(<em>y</em>). Если у вас есть гомоморфное скрытие, вы можете вычислить E(<em>x</em> + <em>y</em>) = E(<em>x</em>) × E(<em>y</em>), где × — операция над зашифрованными переменными. Таким образом, даже если вы не знаете самих переменных, вы можете выполнять с ними математические операции (и, к счастью, это именно то, что вам нужно). На практике это достигается с помощью двух эллиптических кривых (это называется <a href="https://pcnews.ru/blogs/obasnenie_snarks_soprazenia_ellipticeskih_krivyh_perevod-808771.html#gsc.tab=0" target="_blank">сопряжением</a>; не все эллиптические кривые настолько общительны или достаточно хорошо ладят с другими). Чтобы быть хорошей парой, нам нужно, чтобы операции выполнялись как можно быстрее (среди прочего). Простым примером является экспоненциальная функция, <em>f</em>:</p>
  <figure id="CZPh" class="m_original">
    <img src="https://img1.teletype.in/files/4a/82/4a82d343-82e6-4c3b-8b69-8858311e9954.png" width="275" />
  </figure>
  <p id="Ji9y">Если <em>x</em> = 2,303, exp(2,303) ≈ 10, <em>y</em> = 3, exp(3) ≈ 20,09, тогда exp(<em>x</em> + <em>y</em>) = exp(<em>x</em>)exp(<em>y</em>) = 10 × 20,09 = 200,9, что равно exp(5,303) и <em>x</em> + <em>y</em> = 5,303. Конечно, в данном случае очень легко вернуться назад и узнать точные числа <em>x, y </em>и <em>x + y</em>; в случае эллиптических кривых это очень сложно из-за особой структуры группы.</p>
  <p id="JA7N">Чтобы иметь возможность работать с эллиптическими кривыми, нам нужно определить операцию, включающую точки на кривой. Мы можем сделать это, используя конструкцию хорды и касательной: имея две точки на кривой, мы можем провести соединяющую их линию; линия пересекает кривую в третьей точке, и мы отражаем её вокруг оси <em>x</em>, чтобы получить сумму (вспомните изображение кривой, определенной над действительными числами). Формулы следующие:</p>
  <figure id="xhq1" class="m_original">
    <img src="https://img3.teletype.in/files/61/bb/61bba304-0f1f-4fa8-beda-f745a36bbbf9.png" width="263" />
  </figure>
  <p id="iMAx">Есть некоторые особые случаи, например, когда мы хотим добавить точку к самой себе (мы называем это &quot;удвоением&quot;). Чтобы все заработало, нам нужно добавить особую точку <em>O</em>, <a href="https://wiki5.ru/wiki/Point_at_infinity" target="_blank">точку на бесконечности</a>. Кривая вместе с операцией образуют конечную <a href="https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0" target="_blank">циклическую группу</a>. Простыми словами, каждый раз, когда мы добавляем две точки, мы получаем третью, которая принадлежит кривой (она закрывается при выполнении операции). У нас также есть точка идентичности (нулевая точка, <em>P + O</em>), а также каждая точка <em>P</em> имеет обратную <em>P′</em> такую, что <em>P + P′ = O</em>. Более того, элементы группы могут быть сгенерированы путем многократного добавления точки <em>g</em> (генератора) самой к себе. Другими словами, для <em>P</em> в группе имеется некое <em>k</em> такое, что <em>kg = P</em>. Если нам дано <em>k</em>, мы можем быстро вычислить <em>P</em>, но выполнение операции в обратную сторону (то есть, имея <em>P</em>, найти <em>k</em>) может быть очень сложно (это известно как <a href="https://ru.wikipedia.org/wiki/ECDLP" target="_blank">задача дискретного логарифмирования</a>), и мы использовали эту идею в предыдущем параграфе.</p>
  <p id="BN3Q">Все эти вычисления выполняются с помощью операций конечного поля <em>Fp</em>. Мы видим, что на каждом шаге сложения мы должны вычислить наклон линии, что включает в себя деление на элементы конечного поля. Это можно переписать как </p>
  <figure id="Mc2m" class="m_original">
    <img src="https://img2.teletype.in/files/10/d5/10d5d624-1a43-4c14-920a-d7786df58533.png" width="285" />
  </figure>
  <p id="T5Bv">где </p>
  <figure id="A9y0" class="m_original">
    <img src="https://img1.teletype.in/files/8e/9a/8e9a6ad0-8278-4957-bd16-432a01431400.png" width="182" />
  </figure>
  <p id="BjI1">— мультипликативная инверсия <em>x2 − x1</em>. В более простой форме, <em>b(x2 − x1) ≡ 1 (mod p)</em> (Когда мы пишем <em>a ≡ b (mod p)</em>, мы имеем в виду, что существует такое целое число <em>q</em>, что <em>a = pq + b</em>. Это выражение читается, как <em>a</em> соответствует <em>b</em> по модулю <em>p</em>). Вычисление обратных чисел возможно, но стоит гораздо дороже, чем умножение. Существует результат теории чисел, называемый <a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BB%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A4%D0%B5%D1%80%D0%BC%D0%B0" target="_blank">малой теоремой Ферма</a>, который сообщает нам, что</p>
  <figure id="CH0U" class="m_original">
    <img src="https://img1.teletype.in/files/0a/b9/0ab939a7-06f5-4812-b4d9-3b97846e9a6a.png" width="211" />
  </figure>
  <p id="44Sw">если <em>a</em> и <em>p</em> не имеют общих делителей, отличных от 1 (мы говорим, что <em>a</em> и <em>p</em> взаимно просты). Мы можем записать это по-другому</p>
  <figure id="v2wO" class="m_original">
    <img src="https://img4.teletype.in/files/3e/7d/3e7d4557-ab5f-48f4-8f48-3f9b2dbbcaaa.png" width="253" />
  </figure>
  <p id="rMDc">и мы видим, что </p>
  <figure id="1qLD" class="m_original">
    <img src="https://img3.teletype.in/files/e4/79/e4792116-c16b-4280-a213-e6c84962cdf4.png" width="101" />
  </figure>
  <p id="yQ2t">(мы можем упростить себе задачу и свести <em>b</em> к </p>
  <figure id="3XDL" class="m_original">
    <img src="https://img1.teletype.in/files/00/4e/004e639d-db6b-4566-aaaf-90a69027b24a.png" width="165" />
  </figure>
  <p id="9Omj">). Итак, чтобы получить мультипликативную обратную величину, мы должны выполнить много умножений. (Иногда сделать это гораздо проще. Возьмем <em>p = 5</em> и попытаемся найти <em>4^(−1)</em>. Мы можем заметить, что <em>4 × 4 = 16 ≡ 1 (mod 5)</em>, поэтому <em>4^(−1) = 4</em>. Это довольно странно, но мы должны помнить, что операции над конечным полем ведут себя по-другому.) На самом деле, <em>p − 1</em> определяет верхнюю границу степени <em>n</em>, которую мы должны применить к элементу поля <em>a</em>, чтобы получить его обратную величину, то есть <em>a^n ≡ 1 (mod p)</em>. Мы называем наименьший (положительный) показатель <em>n</em> такой, что <em>a^n ≡ 1 (mod p)</em>, порядком элемента. <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B0%D0%B3%D1%80%D0%B0%D0%BD%D0%B6%D0%B0_(%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D1%83%D0%BF%D0%BF)" target="_blank">Теорема Лагранжа</a> свидетельствует, что <em>n</em> является делителем <em>p − 1</em>. Например, возьмем <em>p = 7</em>, следовательно, <em>p − 1 = 6</em>. Мы видим, что <em>4^3 = 64 ≡ 1 (mod 7)</em>, поэтому <em>4^2 ≡ 2 (mod 7)</em> — инверсия от <em>4</em> (<em>2 × 4 = 8 ≡ 1 (mod 7)</em>). Таким же образом, <em>2^3 ≡ 1 (mod 7)</em>. В случае с <em>3</em>, <em>3^6 ≡ 1 (mod 7)</em> и <em>3^5 ≡ 5 (mod 7)</em>, а также <em>5^6 ≡ 1 (mod 7)</em>. Из этого мы видим, что порядки <em>n</em> входят в число делителей <em>p − 1 = 6</em>.</p>
  <p id="KcMy">Таким образом, даже если уравнения для сложения точек по эллиптическим кривым выглядят действительно простыми, они требуют большого количества вычислений, и они могут быть дорогостоящими. Если каждый раз, когда мы хотим добавить две точки, нам приходится находить мультипликативную обратную величину по модулю большого простого числа, мы заметим, что операция дорого нам обходится. Есть пара трюков, которые мы можем выполнить, например, преобразовать кривую, чтобы увеличить скорость или избежать некоторых других проблем, таких как атаки по сторонним каналам.</p>
  <p id="rSm2">Если вы один из тех, кто не готов платить за поиск обратных величин и хочет сэкономить время, или просто любите скорость в подобных вычислениях, тогда следующий раздел для вас.</p>
  <h2 id="OOhE">Проективные координаты</h2>
  <p id="GRsq">Мы можем избавить себя от дорогостоящих инверсий, если перейдем из нашего приятного 2-мерного пространства в 3-мерное пространство. Это было введено Мёбиусом и помогает нам также представить свойство точки на бесконечности. Мы можем перенести четыре точки с нашей эллиптической кривой <em>(x, y)</em> в точки на проекции <em>(X, Y, Z)</em> следующим образом <em>(x, y) → (X = x, Y = y, Z = 1)</em> и <em>O → (0, 1, 0)</em>. Мы можем вернуться назад, используя преобразование <em>(X, Y, Z) → (x = X/Z, y = Y/Z)</em>, за исключением точки на бесконечности там, где она плохо определена. Мы можем визуализировать этот процесс с помощью следующего рисунка, где мы берем три точки из эллиптической кривой и преобразуем их в трехмерные.</p>
  <figure id="roMY" class="m_column">
    <img src="https://img4.teletype.in/files/3a/d5/3ad5d905-3aa1-4dbb-b095-07213b4025b0.png" width="899" />
  </figure>
  <p id="0pk2">Мы можем думать об этом как о преобразовании наших двумерных точек в линии, проходящие через начало координат в трехмерном пространстве. Например, двумерная точка <em>(x1, y1)</em> преобразуется в линию <em>(μx1, μy1, μ)</em>, где <em>μ</em> — элемент поля. Таким образом, две точки <em>P1 = (X1, Y1, Z1)</em> и <em>P2 = (X2, Y2, Z2)</em> одинаковы в двумерном пространстве (точнее, <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B3%D1%80%D1%83%D1%8D%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F)" target="_blank">конгруэнтны</a>), если мы можем найти такой <em>η</em>, что <em>(ηX1, ηY1, ηZ1) = (X2, Y2, Z2)</em>. Эти линии не проходят через начальную точку <em>(0, 0, 0)</em>. Обычно точки в проективном пространстве записываются как <em>(X : Y : Z)</em> вместо <em>(X, Y, Z)</em>. На нашем рисунке точка A (желтая) сопоставляется с точкой D (красная над ней). Все точки, которые лежат на одной прямой, проходящей через начало координат и D (розовая пунктирная линия), считаются эквивалентными D. Аналогично, точка B (синяя) сопоставляется с точкой F (светло-синяя), а все точки над светло-зеленой пунктирной линией (кроме начала координат) эквивалентны F. Когда мы добавляем точки в это пространство, компоненты <em>(X, Y, Z)</em> будут меняться, но мы можем вернуться к точке, принадлежащей кривой, просто проследив наши шаги до <em>Z = 1</em> вдоль линии, проходящей через начало координат. Зачем идти так далеко? Вскоре мы увидим, что мы избегаем инверсий на каждом шаге сложения и делаем только одну инверсию во время нахождения точки в двумерном пространстве (например, когда нам нужно найти <em>r = x1</em> в ECDSA). Конечно, нам это ничего не даст, если мы должны вычислить  <em>P = 2g;</em> но если нам нужно вычислить <em>P = kg</em>, где <em>k</em> порядка 256 бит, мы сэкономили бы на множестве дорогих инверсий.</p>
  <p id="9SZt">Внесем подстановки в уравнение эллиптической кривой</p>
  <figure id="auIE" class="m_original">
    <img src="https://img1.teletype.in/files/04/18/04184b85-a090-44d8-81e9-a99434c20942.png" width="391" />
  </figure>
  <p id="0jXI">Умножим на <em>Z^3</em> и получим следующее уравнение</p>
  <figure id="Dllf" class="m_original">
    <img src="https://img3.teletype.in/files/21/61/2161e735-00ed-47f5-914e-eae61aabeec6.png" width="296" />
  </figure>
  <p id="3sgQ">Если мы хотим сложить <em>P</em> и <em>Q</em>, чтобы получить <em>R = P + Q</em> на проекции, мы можем использовать следующие формулы:</p>
  <figure id="UcPb" class="m_column">
    <img src="https://img1.teletype.in/files/40/7f/407ff276-b4e1-42ab-b8d4-9e4e7ba7416a.png" width="1005" />
  </figure>
  <p id="YBv1">Это выглядит более сложным, чем простые формулы для 2-мерного (2-d) пространства. Однако нам не нужно вычислять никаких обратных чисел! Чтобы получить сумму, мы должны выполнить 12 умножений и 2 возведения в квадрат. В 2-d у нас есть 2 умножения, одно возведение в квадрат и одна инверсия. Инверсии могут быть в 20 или более раз дороже, чем умножения, поэтому мы сэкономили по крайней мере 10 умножений (некоторые авторы говорят, что инверсии обходятся примерно в 80 раз дороже, чем умножения).</p>
  <p id="gvhd">Некоторые кривые могут вычисляться даже быстрее. Если <em>x^3 + ax + b</em> имеет решение в <em>Fp</em>, мы можем работать с эквивалентной <a href="https://en.wikipedia.org/wiki/Jacobian_curve" target="_blank">кривой Якоби</a> <em>v^2 = a′u^4 + du^2 + 1</em>, где <em>a′</em> и <em>d</em> зависят от решения. Мы можем отобразить кривую <em>(u, v)</em> в 3-d пространстве <em>(U, V, W)</em>, используя <em>u = U/W </em>и <em>v=V/(W^2) </em>и получить следующее уравнение </p>
  <figure id="6Zw1" class="m_original">
    <img src="https://img1.teletype.in/files/86/d4/86d443a7-08b5-4ea0-9367-9930da0b224f.png" width="354" />
  </figure>
  <p id="nPwY">Если мы захотим сложить <em>P3 = P1 + P2</em> в данных координатах, мы получим:</p>
  <figure id="Ymat" class="m_column">
    <img src="https://img2.teletype.in/files/12/69/12699516-1378-4125-b10f-016d617d5eb2.png" width="989" />
  </figure>
  <p id="6nVH">Это позволяет нам еще больше снизить затраты на сложение до 6 умножений и 4 возведений в квадрат. Другими моделями с быстрой реализацией являются <a href="https://ru.wikibrief.org/wiki/Edwards_curve" target="_blank">кривые Эдвардса</a> и <a href="https://wiki5.ru/wiki/Montgomery_curve" target="_blank">кривые Монтгомери</a>, которые имеют одни из самых быстрых реализаций.</p>
  <p id="Ov88">Кривые Монтгомери удовлетворяют следующему уравнению</p>
  <figure id="0VQz" class="m_original">
    <img src="https://img1.teletype.in/files/46/59/4659330a-4cba-489b-b601-6f5e5471438f.png" width="269" />
  </figure>
  <p id="ZaDD">где <em>B(A^2 − 4) ≠ 0</em>. Это выражение может быть приведено к форме Вейерштрасса путем некоторого преобразования. Если мы возьмем <em>(x, y)</em> и перенесём в <em>(x′, y′)</em>, зная, что <em>(x, y) → (x/B + A/3B, y/B)</em>, мы получим</p>
  <figure id="Oaj7" class="m_original">
    <img src="https://img2.teletype.in/files/d1/b8/d1b880f9-59d2-4517-8083-d91c322b1fe1.png" width="458" />
  </figure>
  <p id="8RUD">Однако преобразование кривой Вейерштрасса в кривую Монтгомери не всегда возможно. Порядок группы должен быть кратен 4 и уравнение <em>x^3 + ax + b = 0</em> должно иметь решение.</p>
  <p id="QdlY">Кривые Монтгомери также могут быть связаны со скрученными кривыми Эдвардса, которые подчиняются следующему уравнению</p>
  <figure id="uAsU" class="m_original">
    <img src="https://img1.teletype.in/files/8e/4a/8e4ae64f-a60e-4f25-8b23-d8eb68fe671c.png" width="271" />
  </figure>
  <p id="vVpn">Параметры соотносятся через <em>A = 2(a + d)/(a − d)</em> и <em>B = 4/(a − d)</em>. Мы говорим, что эти две кривые бирационально эквивалентны. Например, хорошо известная кривая Эдвардса 25519 , в которой p = 2^255 − 19 — (бирационально) эквивалентна кривой Монтгомери</p>
  <figure id="9RVd" class="m_original">
    <img src="https://img2.teletype.in/files/99/be/99becc90-73b9-4fc0-af9e-facdb1b06111.png" width="278" />
  </figure>
  <p id="AAD9">Сопоставления следующие</p>
  <figure id="6fSb" class="m_original">
    <img src="https://img4.teletype.in/files/f8/2c/f82c1e27-bb5b-435f-a8d4-b30e6ee9141f.png" width="644" />
  </figure>
  <p id="2Z1B">Кривые Монтгомери обладают некоторыми интересными свойствами, которые поддаются реализации с постоянным временем. Мы можем работать в проективных координатах, просто используя компонент <em>x</em> с переносом <em>x = X/Z</em>. Удвоение точки принимает простую форму:</p>
  <figure id="LRJg" class="m_original">
    <img src="https://img4.teletype.in/files/f9/56/f956a846-5b9f-47b2-a01a-2a9b300c53dc.png" width="436" />
  </figure>
  <p id="vP0q">Скрученные кривые Эдвардса также имеют свои преимущества. Выражения для сложения и удвоения точек одинаковы. Имея <em>P1 = (x1, y1)</em>, <em>P2 = (x2, y2)</em>, мы получаем</p>
  <figure id="3efh" class="m_original">
    <img src="https://img3.teletype.in/files/a1/c4/a1c46f48-09c8-48f3-bfa9-c2c315c0457d.png" width="215" />
  </figure>
  <p id="OsO3">Если мы примем <em>x1 = x2</em> и <em>y1 = y2</em>, мы получим выражение для удвоения точки. Существует несколько альтернатив для ускорения вычислений, таких как проективные, инвертированные или расширенные координаты.</p>
  <p id="0mjK">Существуют и некоторые другие приемы для добавления и умножения точек над эллиптическими кривыми, такие как техника Галланта, Ламберта и Ванстоуна (GLV) и обобщенная Гэлбрейтом, Лином и Скоттом (GLS).</p>
  <h2 id="1ntD">Заключение</h2>
  <p id="8s27">Эллиптические кривые получили признание в криптографии, потому что они обеспечивают хороший уровень безопасности при короткой длине ключа и позволяют выполнять более быструю реализацию, чем другие методы, такие как RSA. Это позволяет смартфонам и другим менее мощным устройствам выполнять криптографические операции быстро и надежно.</p>
  <p id="Om5u">Используя метод хорды и касательной, мы можем генерировать конечные циклические группы; на практике нас обычно интересует вычисление <em>kg</em>, где <em>k</em> — целое число, а <em>g</em> — точка эллиптической кривой. Главный недостаток заключается в том, что нам нужно найти мультипликативные инверсии элементов поля, что включают в себя множество умножений.</p>
  <p id="xe3g">Мы можем повысить скорость этих вычислений, выполнив преобразования между кривыми (например, приведя кривую Вейерштрасса к форме Монтгомери) и используя проективные координаты. Таким образом, мы избегаем вычисления мультипликативных инверсий на каждом шаге за счет нескольких дополнительных умножений (эти дополнительные затраты обычно незначительны по сравнению с общей стоимостью инверсии). Существуют также более продвинутые методы, позволяющие нам прыгать из одной точки в другую, очень удаленную, например, GLS.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/eYzCmm-492Q</guid><link>https://teletype.in/@u_dorozhkina/eYzCmm-492Q?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/eYzCmm-492Q?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Что любой разработчик должен знать об эллиптических кривых</title><pubDate>Mon, 28 Nov 2022 17:56:53 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/d8/ad/d8ad3966-c891-4a29-bde9-72e80a380760.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/f8/d0/f8d0b100-17b9-4276-983a-024164ab748e.png"></img>Ссылка на оригинал статьи: https://www.entropy1729.com/what-every-dev-needs-to-know-about-elliptic-curves/
Мой Discord: useless_dorozhkina#1394]]></description><content:encoded><![CDATA[
  <blockquote id="ZRo9"><em>Ссылка на оригинал статьи: <a href="https://www.entropy1729.com/what-every-dev-needs-to-know-about-elliptic-curves/" target="_blank">https://www.entropy1729.com/what-every-dev-needs-to-know-about-elliptic-curves/</a><br />Мой Discord: useless_dorozhkina#1394</em></blockquote>
  <figure id="zPqL" class="m_column">
    <img src="https://img4.teletype.in/files/f8/d0/f8d0b100-17b9-4276-983a-024164ab748e.png" width="1882" />
  </figure>
  <p id="a8C2">Эллиптические кривые (EC) стали одним из самых полезных инструментов для современной криптографии. Они были предложены в 1980-х годах и стали широко использоваться после 2004 года. Их главное преимущество заключается в том, что они предлагают меньшие размеры ключей для достижения того же уровня безопасности, что и другие методы, что приводит к меньшим требованиям к хранению и передаче. Например, для криптографии EC (ECC) требуются 256-битные ключи для достижения того же уровня безопасности, что и 3000-битный ключ при использовании <a href="https://ru.wikipedia.org/wiki/RSA" target="_blank">RSA</a> (еще одна криптографическая система с открытым ключом, появившаяся в конце 70-х годов). ECC и RSA работают, скрывая вещи внутри определенной математической структуры, известной как конечная циклическая группа (мы скоро объясним это). Сокрытие делается скорее на виду: вы могли бы взломать систему, если бы смогли отменить математический трюк (предупреждение о спойлере: если все сделано правильно, это заняло бы у вас несколько жизней). Это как если бы вы положили 1 000 000 долларов в небьющуюся стеклянную коробку, и любой мог бы взять деньги, если бы смог её разбить.</p>
  <p id="KPuG">Чтобы понять эти объекты и почему они работают, нам нужно зайти за кулисы и взглянуть на математические принципы (мы не будем вдаваться в сложные детали или доказательства, а скорее сосредоточимся на концепциях или идеях). Мы начнем с объяснения конечных полей и групп, а затем перейдем к эллиптическим кривым (над конечными полями) и посмотрим, все ли кривые были созданы равными для криптографических целей.</p>
  <h2 id="Dq88">Конечные поля</h2>
  <p id="TsOY">Мы знаем примеры полей из элементарной математики. Рациональные, вещественные и комплексные числа с обычными понятиями сложения и умножения являются примерами полей (хотя они не конечны).</p>
  <p id="M28x">Конечное поле — множество, снабженное двумя операциями, которые мы будем называть + и ×. Чтобы это действительно являлось полем, эти операции должны обладать определенными свойствами:</p>
  <ol id="wwPn">
    <li id="V3B3">Если <em>a</em> и <em>b</em> принадлежат одному множеству, то <em>c = a + b</em> и <em>d = a × b</em> должны также принадлежать одному множеству. В математике это называется множеством, замкнутым относительно операций +, ×.</li>
    <li id="Q0We">Имеется нулевой элемент, 0, такой, что <em>a + 0 = a</em> для любого <em>a</em> в множестве. Данный элемент называется аддитивной идентичностью.</li>
    <li id="fQbk">Имеется элемент, 1, такой, что <em>1 × a = a</em> для любого <em>a</em> в множестве. Данный элемент называется мультипликативной идентичностью.</li>
    <li id="Ra5Y">Если <em>a</em> принадлежит множеству, то имеется такой элемент <em>b</em>, что <em>a + b = 0</em>. Мы называем такой элемент противоположным и обычно записываем как <em>−a</em>.</li>
    <li id="6xmt">Если <em>a</em> принадлежит множеству, то имеется такой элемент <em>c</em>, что <em>a × c = 1</em>. Такой элемент называется мультипликативной обратной величиной и записывается как </li>
  </ol>
  <figure id="eUHu" class="m_original">
    <img src="https://img2.teletype.in/files/5c/a8/5ca893c6-47d0-49a9-9b59-8fbdc31d11a3.png" width="52" />
  </figure>
  <p id="JzQJ">Прежде чем мы сможем поговорить о примерах конечных полей, нам нужно ввести арифметику по модулю.</p>
  <p id="LXRm">Мы узнали, что, учитывая натуральное число или ноль <em>a</em> и ненулевое число <em>b</em>, мы могли бы записать <em>a</em> следующим образом: <em>a = q × b + r</em>, где <em>q</em> — частное, а <em>r</em> — остаток от деления <em>a/b</em>. Это <em>r</em> может принимать значения <em>0, 1, 2, ..., b−1</em>. Мы знаем, что если <em>r</em> равно нулю, то <em>a</em> кратно <em>b</em>. Это может показаться не новым, но это дает нам очень полезный инструмент для работы с числами. Например, если <em>b = 2</em>, тогда <em>r = 0, 1</em>. Когда оно равно <em>0</em>, <em>a</em> — чётное (делится на 2), а когда 1, <em>a</em> — нечётное. Простой способ перефразировать это (благодаря Гауссу):</p>
  <figure id="vzYe" class="m_original">
    <img src="https://img4.teletype.in/files/37/f1/37f1908e-88ea-4037-a4d4-e4b388cab785.png" width="254" />
  </figure>
  <p id="VKzk">если <em>a</em> — нечётное, и</p>
  <figure id="TRHz" class="m_original">
    <img src="https://img4.teletype.in/files/71/76/7176b8ab-34d7-424a-9cf5-7f92392fd237.png" width="266" />
  </figure>
  <p id="KejA">если <em>a</em> — чётное. Можно увидеть, что если мы сложим два нечётных числа <em>a1</em> и <em>a2</em></p>
  <figure id="5ppD" class="m_original">
    <img src="https://img4.teletype.in/files/b7/47/b7473ba7-f847-4c9d-a8e5-7013d52e148f.png" width="445" />
  </figure>
  <p id="gkjk">Это показывает нам, что, если мы хотим знать, чётна сумма чисел или нет, мы можем просто суммировать остатки от деления этих чисел на 2 (применение этого заключается в том, что для проверки делимости на два мы должны смотреть только на последний бит двоичного представления).</p>
  <p id="IDXO">Другая ситуация, с которой мы встречаемся каждый день, связана со временем. Если в понедельник в 10 утра у нас есть 36 часов до крайнего срока проекта, мы должны сдать его к 10 часам вечера вторника. Это потому, что 12 помещается в 36 ровно 3 раза, откуда получается пн-10 вечера, вт-10 утра, вт-10 вечера. Если бы у нас было 39 часов, мы бы перешли к часу ночи среды.</p>
  <p id="Kk3s">Простой способ взглянуть на это соотношение (формально известное как <a href="https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8E" target="_blank">сравнение по модулю</a> <em>p</em>) заключается в том, что если <em>a ≡ b(mod p)</em>, то <em>p</em> делит <em>a − b</em> или <em>a = k × p + b</em> для целого числа <em>k</em>.</p>
  <p id="vFgC">Если подходить более неформально, мы видим, что действующая операция <em>(mod p)</em> оборачивается вокруг результатов определенных вычислений, всегда выдавая числа в ограниченном по <em>p − 1</em> диапазоне.</p>
  <p id="O0Mn">Мы видим, что, если <em>a1 ≡ b1 (mod p)</em> и <em>a2 ≡ b2 (mod p)</em>, тогда <em>a1 + a2 ≡ b1 + b2 (mod p)</em> (если <em>b1 + b2 &gt; p</em> мы можем обернуться вокруг результата). Аналогичные результаты применимы при использовании вычитания и умножения. Деление предоставляет определенные трудности, но мы можем немного изменить ситуацию и заставить ее работать следующим образом: вместо того, чтобы представлять деление как <em>a ÷ b</em>, мы можем вычислить</p>
  <figure id="iDZN" class="m_original">
    <img src="https://img3.teletype.in/files/29/78/29780dc5-aa5c-4a0c-869c-e45420302732.png" width="102" />
  </figure>
  <p id="oTrj">где <em>b^(−1)</em> — мультипликативная обратная величина от <em>b</em>, вспомните</p>
  <figure id="IG3k" class="m_original">
    <img src="https://img1.teletype.in/files/cb/bd/cbbdd7e7-5196-4e43-b07f-1a4d0218f29e.png" width="159" />
  </figure>
  <p id="Vilb">Представим, что <em>p = 5</em>,следовательно элементами группы являются 0, 1, 2, 3, 4.</p>
  <p id="AYeA">Мы можем видеть, что 1 является своей собственной мультипликативной обратной величиной, поскольку <em>1 × 1 = 1 ≡ 1 (mod 5)</em>. Если мы возьмем 2 и 3, тогда <em>2 × 3 = 6 ≡ 1 (mod 5)</em> (поэтому 3 — обратное число 2) и <em>4 × 4 = 16 ≡ 1 (mod 5)</em>. Определенные множество и операции удовлетворяют условиям поля.</p>
  <p id="2eZg">Мы также можем простым способом определить целочисленные степени элементов поля. Если мы хотим возвести число <em>a</em> в квадрат, мы можем просто выполнить <em>a × a</em> и взять <em>mod p</em>. Если мы хотим возвести в куб, мы выполняем <em>a × a × a</em> и берем <em>mod p</em>. RSA использует возведение в степень для выполнения шифрования. Легко увидеть, что если показатель степени довольно велик (или основание очень велико, или и то, и другое), числа становятся действительно большими. Например, мы захотим вычислить </p>
  <figure id="kpf5" class="m_original">
    <img src="https://img3.teletype.in/files/a9/f2/a9f2587d-faa1-405c-aa44-35b321421c78.png" width="206" />
  </figure>
  <p id="BFU0">то когда мы дойдем до 1000, мы будем получать более, чем 300-значные числа, и это будет даже не конец вычисления. Мы можем провести это вычисление гораздо проще, поняв, что 65536=2^(16), каждый раз возводя число в квадрат и беря его остаток. В итоге мы выполняем только 16 подобных операций вместо первоначальных 65536! таким образом, избегая огромных чисел. Аналогичная стратегия будет использоваться при работе с EC!</p>
  <h2 id="jhVF">Группы</h2>
  <p id="t9Iv">Мы видели, что всякий раз, когда мы складываем два чётных целых числа, мы получаем еще одно. Кроме того, поскольку 0 является чётным, если мы сложим <em>a</em> и <em>−a</em>, мы получим 0, элемент идентичности суммы. Многие различные объекты имеют схожее поведение при выполнении определенной операции. Например, умножение двух <a href="https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0" target="_blank">обратимых матриц</a> приводит к обратимой матрице. Если мы рассмотрим множество обратимых матриц из <em>N × N</em>, оснащенных умножением, мы увидим, что, если <em>A</em> принадлежит множеству, то <em>A^(−1)</em> — тоже; матрица идентичности принадлежит множеству (и играет роль элемента идентичности по отношению к умножению). Другими словами, некоторые множества, оснащенные определенной операцией, обладают некоторыми общими свойствами, и мы можем воспользоваться знаниями об этой структуре. Множество вместе с операцией образует группу. Формально группа — это множество <em>G</em>, оснащенное бинарной операцией × так, что:</p>
  <ol id="xwBJ">
    <li id="wB9m">Операция является ассоциативной, то есть <em>(a × b) × c = a × (b × c)</em>.</li>
    <li id="arFw">Имеется элемент идентичности, <em>e</em>: <em>e × a = a</em> и <em>a × e = a</em>.</li>
    <li id="tVZ6">Для каждого элемента <em>a</em> в множестве имеется элемент <em>b</em> такой, что <em>a × b = e</em> и <em>b × a = e</em>. Мы обозначаем его <em>b = a^(−1)</em> для простоты.</li>
  </ol>
  <p id="QaXu">Мы можем легко увидеть, что любое поле является, в частности, группой по отношению к каждой из двух его операций (условия 1, 2 и 4 для поля указывают, что оно также является группой по отношению к сумме, а 1, 3 и 5 — к умножению). Если операция коммутативна (то есть <em>a × b = b × a</em>), то группа известна как абелева (или коммутативная). Например, обратимые матрицы из <em>N × N</em> образуют группу, но она не является абелевой, поскольку <em>A × B ≠ B × A</em> для некоторых матриц <em>A</em> и <em>B</em>.</p>
  <p id="hllf">Мы будем рассматривать конечные группы (те, в которых множество содержит конечное число элементов) и, в частности, циклические группы. Такие группы могут быть сгенерированы путем многократного применения операции к элементу <em>g</em>, <a href="https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B" target="_blank">генератору группы</a>. <em>n</em>-й корень из единицы в комплексных числах образует пример циклической группы при умножении; это множество решений</p>
  <figure id="8nG5" class="m_original">
    <img src="https://img4.teletype.in/files/77/2e/772e0453-f553-40f5-8ae9-8b1f44e0e478.png" width="96" />
  </figure>
  <p id="3pGj">которые формируют <em>exp(2πik/n)</em>, где <em>k = 0, 1, 2..., n−1</em>. Эта группа может быть сгенерирована путем взятия целых степеней <em>exp(2πi/n)</em>. Корни единицы играют важную роль в вычислении <a href="https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5" target="_blank">быстрого преобразования Фурье</a> (БПФ), которое имеет множество применений.</p>
  <h2 id="YIBt">Эллиптические кривые в двух словах</h2>
  <p id="xLkj">Эллиптические кривые — очень полезные объекты, потому что они позволяют нам получить групповую структуру с интересными свойствами. С данным полем <em>F</em>, эллиптическая кривая является множеством точек <em>(x, y)</em>, которые удовлетворяют следующему уравнению:</p>
  <figure id="tGNe" class="m_original">
    <img src="https://img2.teletype.in/files/98/99/989945a9-d181-4f3c-87a9-3708598a23a3.png" width="579" />
  </figure>
  <p id="O1Y8">Оно известно как общее уравнение Вейерштрасса. Во многих случаях это уравнение может быть записано в более простой форме</p>
  <figure id="VOcD" class="m_original">
    <img src="https://img3.teletype.in/files/ec/9c/ec9cb826-cb63-4af1-9a08-535c899dbc90.png" width="271" />
  </figure>
  <p id="llf3">которая является краткой формой (Вейерштрасса). В зависимости от выбора параметров <em>a</em> и <em>b</em> и области кривая может обладать некоторыми желаемыми свойствами или не обладать. Если </p>
  <figure id="gxhh" class="m_original">
    <img src="https://img4.teletype.in/files/b6/c3/b6c3d563-0e41-4139-8105-b72eab8d51b6.png" width="210" />
  </figure>
  <p id="pcmH">то такая кривая не является сингулярной.</p>
  <p id="ueD8">Мы можем задать операцию, которая позволит нам суммировать элементы, принадлежащие эллиптической кривой, и получить группу. Это делается с помощью геометрической конструкции, правила хорды и касательной. Имея две точки на кривой, <em>P1 = (x1, y1)</em> и <em>P2 = (x2, y2)</em>, мы можем нарисовать линию, соединяющую их. Эта линия пересечёт кривую в третьей точке, <em>P3 = (x3, y3)</em>. Мы устанавливаем сумму <em>P1</em> и <em>P2</em> как <em>(x3, −y3)</em>, то есть точка <em>P3</em> перевёрнута вокруг оси <em>x</em>. Формулы следующие:</p>
  <figure id="pfYn" class="m_original">
    <img src="https://img1.teletype.in/files/07/16/07166b2d-b322-40c3-8457-7559fb33fd47.png" width="304" />
  </figure>
  <figure id="CSox" class="m_original">
    <img src="https://img4.teletype.in/files/7b/ca/7bca08a7-caf5-457f-b1d7-0255cb3c3118.png" width="616" />
  </figure>
  <p id="uyvO">Мы легко можем заметить, что встречаемся с проблемой, когда пытаемся суммировать <em>P1 = (x1, y1)</em> и <em>P2 = (x1, −y1)</em>. Нам нужно добавить в систему дополнительную точку, которую мы называем <a href="https://wiki5.ru/wiki/Point_at_infinity" target="_blank">точкой на бесконечности</a>, <em>O</em>. Это включение необходимо для определения структуры группы и работает как элемент идентификации для групповой операции.</p>
  <p id="Qvn6">Другая проблема появляется, когда мы хотим сложить <em>P1</em> и <em>P1</em>, чтобы получить <em>P3 = 2P1</em>. Но, если мы проведем касательную линию к кривой в <em>P1</em>, мы увидим, что она пересекает кривую в другой точке. Если мы хотим выполнить эту операцию, нам нужно найти наклон касательной линии и найти пересечение:</p>
  <figure id="c1Ma" class="m_original">
    <img src="https://img1.teletype.in/files/80/75/80751d6a-1f74-4a5f-b081-20da70a4fd21.png" width="258" />
  </figure>
  <figure id="ZsAN" class="m_original">
    <img src="https://img1.teletype.in/files/87/0e/870e5a68-36a7-4ce0-a8e6-d79a27647a5e.png" width="616" />
  </figure>
  <p id="Dxzo">Это требует небольшой работы, но мы можем доказать, что эллиптическая кривая с помощью этой операции обладает свойствами группы. Мы будем использовать конечные поля для работы с этими кривыми, и группы, которые мы получим, будут являться конечными циклическими группами, то есть группами, которые могут быть сгенерированы путем повторного использования операции над генератором <em>g: g, 2g, 3g, 4g, 5g</em>...</p>
  <figure id="NLVP" class="m_original">
    <img src="https://img4.teletype.in/files/bf/07/bf0797be-cdcd-437b-ba5f-707e0d2a11f5.png" width="625" />
  </figure>
  <p id="AETW">Если мы нанесем совокупность точек на график, то увидим, что точки распределены довольно &quot;случайным&quot; образом. Например, <em>2g</em> может находиться очень далеко от <em>3g</em>, которая в свою очередь находится очень далеко от <em>4g</em>. Если бы мы хотели знать, сколько раз <em>k</em> мы должны добавить генератор, чтобы достичь определенной точки <em>P</em> (то есть решить уравнение <em>kg = P</em>), мы бы увидели, что у нас нет простой стратегии, и мы вынуждены выполнять грубый поиск по всем возможным <em>k</em>. Эта проблема известна как проблема дискретного логарифмирования (эллиптической кривой) (log для друзей) (другие друзья предпочитают <a href="https://ru.wikipedia.org/wiki/ECDLP" target="_blank">ECDLP</a>).</p>
  <p id="QlFl">С другой стороны, если мы знаем <em>k</em>, мы можем очень быстрым способом вычислять <em>P = kg</em>. Это дает нам способ скрыть (на виду) вещи внутри группы. Конечно, если бы вы могли сломать DLP, вы могли бы получить <em>k</em>, но это довольно неосуществимо. Если мы хотим вычислить 65536g, мы можем сделать это , поняв , что g + g = 2g, 2g + 2g = 4g, 4g + 4g = 8g...до 32768g + 32768g = 65535g, так мы сузили бы количество операций от 65536 до 16. Существует множество полезных алгоритмов, которые позволяют нам ускорить операции над эллиптическими кривыми, избегая дорогостоящих вычислений, таких как инверсии, которые пригождаются, когда мы хотим вычислить наклон.</p>
  <h2 id="Nqby">Все ли эллиптические кривые полезны для криптографии?</h2>
  <p id="2lsl">Сила криптографии эллиптических кривых заключается в сложности решения задачи дискретного логарифмирования. Это связано с количеством элементов (порядком множества), составляющих циклическую группу. Если число является очень большим простым числом или оно содержит очень большое простое число в своей факторизации (то есть число кратно большому простому числу), то задача становится неосуществимой. Однако, если порядок состоит из малых простых чисел, можно выполнить поиск по подгруппам и восстановить ответ с помощью <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%82%D0%B0%D0%B9%D1%81%D0%BA%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE%D0%B1_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B0%D1%85" target="_blank">китайской теоремы об остатках</a>. Это связано с тем, что сложность зависит от размера самого большого задействованного простого числа.</p>
  <p id="R2pj">Некоторые кривые обладают желаемыми свойствами, и им были даны имена. Например, Bitcoin использует <code>secp256k1</code>, которая имеет следующие параметры:</p>
  <figure id="p2pN" class="m_column">
    <img src="https://img4.teletype.in/files/78/f9/78f95160-0e24-41a0-a9fe-cdc8c52b95c5.png" width="975" />
  </figure>
  <p id="xyMS">Чтобы получить представление о количестве элементов группы можно представить, что они составляют около r ≈ 10^(77). Даже если бы у нас были 10^(12) суперкомпьютеров, выполняющих более 10^(17) поисков точек в секунду в течение ста миллионов лет мы даже близко не подошли бы к проверке всех возможностей.</p>
  <p id="zj59">Чтобы гарантировать 128-битную безопасность, ECs нужны порядки групп, близкие к 256-битным (то есть порядки с простыми множителями около 10^(17)). Это связано с тем, что существуют алгоритмы, которые могут решить задачу, выполняя операции вокруг √r. Если длина самого большого простого числа меньше 94 бит, его можно разбить с помощью настольного компьютера. Конечно, даже если ваша группа достаточно велика, ничто не может спасти вас от плохой реализации.</p>
  <p id="s1vm">Возникает вопрос: как мы можем узнать количество элементов нашей EC? К счастью, математика снова приходит нам на помощь, например, <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A5%D0%B0%D1%81%D1%81%D0%B5" target="_blank">граница Хассе</a>, <a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A8%D1%83%D1%84%D0%B0" target="_blank">алгоритм Шуфа</a> и способ проверки, является ли число простым или нет. В следующий раз мы продолжим раскрывать математические принципы, лежащие в основе полезных инструментов в криптографии.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/ciax4wh6odO</guid><link>https://teletype.in/@u_dorozhkina/ciax4wh6odO?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/ciax4wh6odO?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Схемы агрегации доказательств: SNARKPack и aPlonk</title><pubDate>Mon, 28 Nov 2022 14:03:19 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/d2/7a/d27a78d1-a480-4ea2-bfb7-970aad243e91.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/0f/66/0f669bb4-b20a-4447-9dd7-e5e1fd214bcb.png"></img>Ссылка на оригинал статьи: https://www.entropy1729.com/proof-aggregation-schemes-snarkpack-and-aplonk/
Мой Discord: useless_dorozhkina#1394]]></description><content:encoded><![CDATA[
  <blockquote id="ensB"><em>Ссылка на оригинал статьи: <a href="https://www.entropy1729.com/proof-aggregation-schemes-snarkpack-and-aplonk/" target="_blank">https://www.entropy1729.com/proof-aggregation-schemes-snarkpack-and-aplonk/</a><br />Мой Discord: useless_dorozhkina#1394</em></blockquote>
  <figure id="vSRv" class="m_column">
    <img src="https://img1.teletype.in/files/0f/66/0f669bb4-b20a-4447-9dd7-e5e1fd214bcb.png" width="1887" />
  </figure>
  <h2 id="TGqU">Введение</h2>
  <p id="S6QO"><a href="https://teletype.in/@u_dorozhkina/7bZpNZVOEpE" target="_blank">zk-SNARKs</a> — это мощные криптографические примитивы, позволяющие одной стороне, известной как доказывающий, доказать второй стороне, известной как проверяющий, что первая знает определенный секрет, не раскрывая ничего о данном секрете. Это применяется, например, в децентрализованных приватных вычислениях, когда мы можем делегировать дорогие вычисления серверу, которому не доверяем, не раскрывая значимой информации, и получить криптографическое доказательство, подтверждающее верность этих вычислений. Мы также можем использовать zk-SNARKs для решения проблем конфиденциальности и масштабируемости, от которых страдает большинство децентрализованных реестров. В случае с реестром каждая нода должна выполнить вычисление самостоятельно, чтобы проверить его достоверность. Это означает, что менее мощные устройства в реестре могут выступать в качестве слабых мест, что влияет на масштабируемость, особенно когда вычисления являются дорогостоящими. Однако вместо того, чтобы заставлять каждую ноду повторно выполнять каждое вычисление, мы могли бы дать им проверить короткое доказательство, которое показывает, что вычисление правильное, тогда мы сможем уменьшить нагрузку на всю систему.</p>
  <p id="y4cc">Одной из главных проблем с zk-SNARKs является время генерации доказательства. Как правило, генерация доказательств включает в себя преобразование вычислений в некоторую <a href="https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0" target="_blank">NP-полную задачу</a>, в которой мы можем доказать правильность вычисления, например, в <a href="https://www.entropy1729.com/how-to-transform-code-into-arithmetic-circuits/" target="_blank">выполнимость арифметической схемы</a> или в систему квадратичных ограничений (<a href="https://habr.com/ru/post/342750/" target="_blank">система ограничений первого ранга</a>, <a href="https://teletype.in/@u_dorozhkina/rEzgYFHVSxy" target="_blank">R1CS</a>), включающих выполнение некоторых дорогостоящих вычислений, таких как мультискалярные умножения (<a href="https://teletype.in/@u_dorozhkina/kVgVtRC5myM" target="_blank">MSM</a>) и совмещение эллиптических кривых... Для снижения вычислительных затрат было принято несколько стратегий, таких как составление доказательств, пакетирование, рекурсия, попытка справиться с увеличенным числом доказательств меньшего размера и использование преимуществ <a href="https://hmong.ru/wiki/Commitment_scheme" target="_blank">схем полиномиальных обязательств</a>.</p>
  <p id="WQxv">В <a href="https://www.entropy1729.com/incrementally-verifiable-computation-nova/" target="_blank">предыдущей статье</a>, мы рассмотрели пошагово проверяемые вычисления (<a href="https://eprint.iacr.org/2019/1407" target="_blank">IVC</a>) и схемы сворачивания, которые дают нам способы реализовать IVC на практике. Мы рассмотрели основы <a href="https://github.com/microsoft/Nova" target="_blank">Nova</a> и то, как работает схема сворачивания. Теперь мы обратим наше внимание на схемы агрегирования доказательств: <a href="https://eprint.iacr.org/2021/529.pdf" target="_blank">SNARKPack</a> и <a href="https://eprint.iacr.org/2022/1352.pdf" target="_blank">aPlonK</a>. Они позволяют нам уменьшить общий размер доказательств и связанное с ними время проверки: для <em>n</em> доказательств размер и время проверки агрегированного доказательства будут <em>O(n)</em>, что является значительным сокращением, особенно для большого количества доказательств. SNARKPack создан поверх Groth16 SNARK, в то время как aPlonk работает с системой доказательства <a href="https://teletype.in/@u_dorozhkina/7bZpNZVOEpE" target="_blank">Plonk</a>. Оба являются одними из наиболее широко используемых SNARKs и используют <a href="https://live.forklog.com/zk-snarks-i-zk-starks-otlichiya-i-vozmozhnosti-protokolo/" target="_blank">trusted setups</a>, которые являются результатом церемоний настройки, включающих многосторонние вычисления.</p>
  <h2 id="snarkpack">SNARKPack</h2>
  <p id="MzbM">В схеме Groth16 доказательство <em>π</em> состоит из трёх элементов групп <a href="https://www.entropy1729.com/need-for-speed-elliptic-curves-chapter/" target="_blank">эллиптических кривых</a>, <em>A</em>, <em>B</em>, <em>C</em>. И <em>A</em>, и <em>B</em> принадлежат к группе <em>G1</em>, а <em>C</em> принадлежит к группе <em>G2</em>. Группы имеют одинаковый <a href="https://www.entropy1729.com/math-survival-kit-for-developers/" target="_blank">порядок</a> (количество элементов), <em>p</em>, и входят в число групп кручения порядка <em>p</em> эллиптической кривой над полем расширения. Можно определить билинейное отображение (или операцию сопряжения), взяв по элементу от каждой группы и выведя элемент в третьей группе <em>Gt : e: G1 × G2 → Gt</em> так, что </p>
  <figure id="Bw8b" class="m_original">
    <img src="https://img1.teletype.in/files/cb/f8/cbf8ceb6-5ac9-425d-b74d-e1eee7b25646.png" width="181" />
  </figure>
  <p id="1dvd">где <em>a, b</em> — числа, а <em>g, h</em> — генераторы групп <em>G1</em> and <em>G2</em>, соответственно (элемент группы <em>g</em> называют генератором, если любой элемент в группе может быть получен путем многократного его добавления). Верификация доказательства в Groth16 производится с помощью операции сопряжения</p>
  <figure id="xzzo" class="m_original">
    <img src="https://img2.teletype.in/files/18/93/1893f121-3dfd-4317-bf5a-d35b3dc723dc.png" width="220" />
  </figure>
  <p id="9omC">где <em>D</em> — это элемент <em>G2</em>, а <em>Y</em> — элемент <em>Gt</em>. Основная идея, лежащая в основе агрегирования <em>n</em> доказательств Groth16 заключается в том, что мы можем проверить их все одновременно, используя случайную линейную комбинацию (с точностью до некоторой очень небольшой ошибки). Таким образом, нам нужно выполнить только одну операцию сопряжения вместо <em>n</em> операций</p>
  <figure id="G0ez" class="m_original">
    <img src="https://img2.teletype.in/files/59/ba/59bac685-3fd0-4e48-b90c-90d260c7ce09.png" width="363" />
  </figure>
  <p id="FHbg">где r — случайно выбранное число, а ∏ означает, что мы берем результаты всех возможных сопряжений.</p>
  <p id="RiJS">Чтобы упростить задачу, определены следующие термины:</p>
  <figure id="ITzY" class="m_original">
    <img src="https://img2.teletype.in/files/d6/45/d645d623-5574-4be0-afdb-9ff58d02e051.png" width="216" />
  </figure>
  <p id="T2O7">После проверки того, что это последнее уравнение выполняется, нам остается удостовериться в том, что для некоторых начальных зафиксированных векторов <em>A = (A1, A2, ..., An)</em>, <em>B = (B1, B2, ..., Bn)</em> и <em>C = (C1, C2, ..., Cn), ZAC, ZB</em> соответствуют этим спецификациям. Это делается с помощью двух внутренних аргументов сопряжения:</p>
  <p id="Qvto">1. Целевой результат внутреннего сопряжения (TIPP) показывает, что</p>
  <figure id="eiE6" class="m_original">
    <img src="https://img1.teletype.in/files/8f/3f/8f3f81b1-aeb0-4993-8314-31af2bca6b2f.png" width="192" />
  </figure>
  <p id="jJbM">2. Результат внутреннего сопряжения с многократным возведением в степень (MIPP) показывает, что</p>
  <figure id="4pbu" class="m_original">
    <img src="https://img2.teletype.in/files/dc/f2/dcf21a04-45c3-46ef-9000-0b536390f604.png" width="170" />
  </figure>
  <p id="wYMo">Чтобы иметь возможность реализовать эти продукты внутреннего сопряжения, нам нужны эффективные схемы обязательств с гомоморфными свойствами и свойствами сворачивания. Можно сказать, что обязательство аддитивно гомоморфно, если с двумя данными элементами, <em>a, b</em>, схема обязательств удовлетворяет <em>cm(a+b) = cm(a) + cm(b)</em>. Для примера, обязательства <a href="https://www.getmonero.org/resources/moneropedia/pedersen-commitment.html" target="_blank">Pedersen</a> и <a href="https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf" target="_blank">Kate-Zaverucha-Goldberg</a> обладают этим свойством. Чтобы добиться логарифмического размера доказательства, авторы SNARKPack используют ту же стратегию, что и <a href="http://schbit.com/ru/2018/11/15/chto-takoe-bulletproofs/" target="_blank">bulletproofs</a>, которая основывается на аргументе внутреннего продукта. Эти обязательства также и гомоморфны в ключевой области: с данными <em>k1, k2</em> для любого сообщения <em>m</em> мы получаем, что <em>cm(m, k1 + k2) = cm(m, k1) + cm(m, k2)</em>.</p>
  <p id="eqN7">Данный протокол использует trusted setups с двух значимый церемоний установки: <a href="https://forklog.com/cryptorium/blokchejn-i-kriptovalyuta-filecoin-fil-chto-eto-i-kak-rabotaet" target="_blank">Filecoin</a> и <a href="https://forklog.com/cryptorium/chto-takoe-zcash-zec" target="_blank">Zcash</a>. В Groth16 структурированная ссылочная строка (<a href="https://www.cryptologie.net/article/560/zk-faq-whats-a-trusted-setup-whats-a-structured-reference-string-whats-toxic-waste/" target="_blank">SRS</a>), которая является результатом церемонии, состоит из степеней случайного элемента <em>τ</em>, спрятанных внутри групп <em>G1, G2</em>. Учитывая генераторы <em>g, h</em>, SRS задаётся через </p>
  <figure id="di0h" class="m_original">
    <img src="https://img1.teletype.in/files/0a/c5/0ac56abf-c4e9-43bf-a556-f254819a5460.png" width="321" />
  </figure>
  <p id="jtmQ">и</p>
  <figure id="AANn" class="m_original">
    <img src="https://img4.teletype.in/files/3a/f5/3af56d4a-7869-40d1-a15f-cd462aee9ee0.png" width="348" />
  </figure>
  <p id="jDrR">Это позволит нам зафиксировать многочлены и проверить утверждения по ним.</p>
  <p id="Dctj">Теперь мы можем создавать парные групповые обязательства, используя две SRS. Чтобы упростить обозначение, мы будем называть</p>
  <ol id="BT7s">
    <li id="07F9"><em>w1 = (g, g11, h12, ...) и v1 = (h, h11, h12, ...)</em> SRS для церемонии 1.</li>
    <li id="Xy5Z"><em>w2 = (g, g21, h22, ...) и v2 = (h, h21, h22, ...)</em> SRS для церемонии 2.</li>
  </ol>
  <p id="o17R">Существует две версии этих обязательств: одиночная группа и двойная группа. Первая принимает в качестве ключа обязательства <em>ks = (v1, v2)</em>, а вторая — <em>kd = (v1, w1, v2, w2)</em>.</p>
  <p id="coHL">Обязательство одиночной группы принимает вектор <em>A</em> и ключ<em> ks</em> и получает два элемента группы:</p>
  <figure id="kiQ1" class="m_original">
    <img src="https://img2.teletype.in/files/1e/86/1e868f6c-8bd1-44c2-a724-a1bab9302f60.png" width="230" />
  </figure>
  <p id="bl3h">где</p>
  <figure id="zUkz" class="m_original">
    <img src="https://img4.teletype.in/files/bf/2e/bf2e6a2b-99ee-4837-8c55-d4fb318ce221.png" width="502" />
  </figure>
  <p id="eBmc">Двойное обязательство принимает векторы <em>A</em> и <em>C</em>, сформированные из элементов в <em>G1</em> и <em>G2</em> соответственно, а также <em>kd</em> и получает два элемента:</p>
  <figure id="YJBr" class="m_original">
    <img src="https://img4.teletype.in/files/7c/70/7c703669-7c41-40bb-81c4-cdf16c8fd8cb.png" width="246" />
  </figure>
  <p id="uuVh">где</p>
  <figure id="aMNM" class="m_original">
    <img src="https://img1.teletype.in/files/84/97/8497ba8b-af08-474f-978c-cf657256b45e.png" width="542" />
  </figure>
  <p id="X18L">Двойное обязательство будет использоваться в сопряжении с TIPP, чтобы показать, что </p>
  <figure id="xde3" class="m_original">
    <img src="https://img3.teletype.in/files/64/74/64744c06-d48e-470a-a1be-d3cb1b6835cd.png" width="177" />
  </figure>
  <p id="dR17">в то время, как MIPP будет использоваться с одиночным обязательством, чтобы убедиться, что </p>
  <figure id="fsF1" class="m_original">
    <img src="https://img1.teletype.in/files/83/6d/836d36c0-c3a4-4d56-a4ce-67e39a023122.png" width="173" />
  </figure>
  <p id="kgyz">Имеются две зависимости, которые необходимо проверить:</p>
  <figure id="B1FK" class="m_column">
    <img src="https://img2.teletype.in/files/93/d9/93d912f4-2cd0-4e89-b2f4-39723a7d2d4b.png" width="959" />
  </figure>
  <p id="5XFk">Простыми словами, в каждой зависимости мы убеждаемся, что значение правильно, и обязательство достоверно.</p>
  <p id="SCeD">Для того, чтобы узнать точные детали для алгоритмов доказательства и верификации, мы предлагаем читателю ознакомиться с <a href="https://eprint.iacr.org/2021/529.pdf" target="_blank">источником</a>.</p>
  <p id="BBBM">В показанных примерах схема агрегирования превосходит пакетную проверку как по размеру, так и по времени при чуть более чем 100 доказательствах.</p>
  <h2 id="aplonk">aPlonk</h2>
  <p id="ZGmm"><a href="https://eprint.iacr.org/2022/1352.pdf" target="_blank">aPlonk</a> основывается на идеях SNARKPack, используя различные системы доказательств (Plonk) и вводя многополиномиальные обязательства для достижения <a href="https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D0%B1%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F" target="_blank">сублинейного</a> размера числа полиномов. Основная идея заключается в том, что мы можем верифицировать несколько доказательств, выполнив случайную линейную комбинацию обязательств и проверив её. Обозначения немного отличаются, поскольку авторы aPlonk используют <a href="https://mathforyou.net/theory/groups/notation/" target="_blank">аддитивную форму при работе с группами</a>, в то время как авторы SNARKPack используют <a href="https://mathforyou.net/theory/groups/notation/" target="_blank">мультипликативную форму</a>. Если cm<em>(pk)</em> — обязательство полинома <em>pk</em> (который является элементом эллиптической кривой, если мы используем обязательства KZG), то мы можем проверить все обязательства, выполнив</p>
  <figure id="dqdk" class="m_original">
    <img src="https://img3.teletype.in/files/af/52/af5268ae-1d10-42b3-8309-37d4b8087c3f.png" width="265" />
  </figure>
  <p id="fB3h">и удостовериться, что <em>β</em> в точке <em>z</em> открывается (равняется)</p>
  <figure id="ip7j" class="m_original">
    <img src="https://img2.teletype.in/files/92/e7/92e72e07-3847-4374-9069-4023f7c8c5c3.png" width="184" />
  </figure>
  <p id="RfIq">где <em>vk</em> — значение в точке <em>pk(z)</em>. Если бы мы использовали мультипликативную форму, предыдущее уравнение имело бы следующий вид</p>
  <figure id="nOM2" class="m_original">
    <img src="https://img3.teletype.in/files/af/09/af092376-e7f3-49a3-950b-9374ec5f14df.png" width="291" />
  </figure>
  <p id="Z1fo">Чтобы добиться сублинейного размера, доказывающий должен зафиксировать обязательства полиномов следующим образом</p>
  <figure id="rCjM" class="m_original">
    <img src="https://img4.teletype.in/files/f9/27/f927d9cc-16d0-4da3-92c6-b08e8f9aec35.png" width="373" />
  </figure>
  <p id="9dkK">Поскольку мы вычисляем линейную комбинацию, используя степени <em>r</em>, естественно будет использовать полиномиальную схему обязательств такую, как KZG, или аргументы внутреннего продукта (<a href="https://dankradfeist.de/ethereum/2021/07/27/inner-product-arguments.html" target="_blank">IPA</a>).</p>
  <p id="ZdKJ">Система ограничений Plonk выражена как</p>
  <figure id="UCkV" class="m_original">
    <img src="https://img4.teletype.in/files/bc/d7/bcd79239-2d4f-4377-a9a5-deab79c6b7c3.png" width="624" />
  </figure>
  <p id="HCIl">и может быть расширена, чтобы включать условия более высокой степени или пользовательские логические операции. Для каждого <em>qk</em> мы можем определить одномерный полином <em>qL(x), qR(x), qO(x), qM(x), qC(x)</em> путем приравнивания каждого полинома к их соответствующим <em>qki</em> в n примитивный корнях единства <em>ωi</em>. Мы называем <em>ωi</em> примитивным n-ым корнем единства, если </p>
  <figure id="VVDX" class="m_original">
    <img src="https://img2.teletype.in/files/16/49/1649d6a4-1897-49a2-b2ca-e4ffea93d89a.png" width="96" />
  </figure>
  <p id="F3dO">и</p>
  <figure id="lRj2" class="m_original">
    <img src="https://img2.teletype.in/files/d3/95/d395d14a-b50e-4132-bb39-a0a3ff0b09a8.png" width="104" />
  </figure>
  <p id="2TFp">если <em>k &lt; n</em>. Кроме того, доказывающий должен показать, что отношения между индексами <em>ai, bi, ci</em> связаны перестановками; эти перестановки также выражаются в терминах многочленов. Это дает в общей сложности 8 полиномов, которые нужно зафиксировать.</p>
  <p id="oX33">Одним из ключевых строительных блоков является схема многополиномиальных обязательств. Она включает в себя 5 эффективных алгоритмов,<br /><strong>настройка, обязательство — полином, обязательство — вычисление, открыть, проверить</strong>; главное отличие заключается в добавлении алгоритма <strong>обязательство — вычисление</strong>. Многополиномиальные обязательства основаны на двух схемах полиномиальных обязательств: KZG и IPA.</p>
  <p id="k3Bd">Одна важная оптимизация заключается в том, что все многочлены вычисляются при одном и том же случайном вызове <em>r</em>, заданном <a href="https://ru.frwiki.wiki/wiki/Heuristique_de_Fiat-Shamir" target="_blank">эвристикой Фиата-Шамира</a>. Для этого r должен быть получен из частичной расшифровки всех доказательств, требующей, чтобы доказательства каждого утверждения выполнялись согласованно. Даже если это предотвращает построение вычислений, поддающихся пошаговой проверке (IVC), поскольку в этом случае доказательства генерируются одно за другим, конструкция хорошо работает для свёркти верификации.</p>
  <h2 id="NGgt">Заключение</h2>
  <p id="Y1iH">Схемы агрегирования доказательств являются альтернативой для уменьшения размера и времени проверки многих zk-SNARKs. Ключевым фактом является то, что можно получить доказательства размеров и времени проверки порядка <em>O(log(n))</em> для <em>n</em> доказательств, что превосходит методы пакетной обработки чуть более чем для 100 доказательств и имеет существенную разницу, когда мы складываем вместе более 1000 доказательств. Основными строительными блоками для достижения этих свойств являются гомоморфные полиномиальные обязательства (такие как KZG), два trusted setups и тот факт, что мы можем проверить многие доказательства, взяв случайную линейную комбинацию, используя в качестве коэффициентов степени некоторого числа <em>r</em>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/9BBeDtaqWzi</guid><link>https://teletype.in/@u_dorozhkina/9BBeDtaqWzi?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/9BBeDtaqWzi?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>1-я Волна Стимулируемого Testnet Sui Была Запущена</title><pubDate>Thu, 17 Nov 2022 22:31:03 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e8/c0/e8c0fd0d-5d44-44cd-b014-751e8c1903d5.png"></media:content><description><![CDATA[<img src="https://storage.googleapis.com/sui-cms-content/Sui_Testnet_1_Live_ade7f05148/Sui_Testnet_1_Live_ade7f05148.png"></img>Мой Discord: useless_dorozhkina#1394
Ссылка на оригинал: https://sui.io/resources-sui/sui-testnet-wave-1-goes-live/]]></description><content:encoded><![CDATA[
  <blockquote id="va0k"><em>Мой Discord: useless_dorozhkina#1394<br />Ссылка на оригинал: <a href="https://sui.io/resources-sui/sui-testnet-wave-1-goes-live/" target="_blank">https://sui.io/resources-sui/sui-testnet-wave-1-goes-live/</a></em></blockquote>
  <figure id="Dd5r" class="m_column">
    <img src="https://storage.googleapis.com/sui-cms-content/Sui_Testnet_1_Live_ade7f05148/Sui_Testnet_1_Live_ade7f05148.png" width="1290" />
  </figure>
  <p id="XYzR">Мы в Mysten Labs рады объявить о запуске 1-й Волны Тестнета Sui, первого экземпляра сети Sui, работающей с операторами, не входящими в состав Mysten Labs, и важного шага на пути к децентрализованному Майннету Sui. 1-я Волна Тестнета позволит нам понять взаимодействие между валидаторами, в то время как Devnet остается подходящей сетью для разработчиков. Мы будем поддерживать работу сети Testnet Wave 1 в течение примерно двух-трех недель.</p>
  <p id="3vYQ">Testnet Wave 1 ориентирована на операторов. В августе мы начали <a href="https://medium.com/mysten-labs/validator-registration-open-9464c31ff9f6" target="_blank">открытый набор</a> в операторы Sui и получили ошеломляющий отклик — более 28 000 заявок. Мы отобрали несколько сотен выдающихся специалистов для работы с Валидаторами Sui и Полными Нодами. Во время этой первой волны мы надеемся нарастить мышечную память для децентрализованной координации и реагирования на инциденты, а также найти основную группу специализированных операторов, имеющих опыт развертывания, мониторинга и отладки Sui. Мы почти наверняка столкнемся с некоторыми трудностями во время нашей первой попытки управлять децентрализованной сетью, но эти инциденты станут учебным опытом, который обеспечит ценную практику для реальной работы.</p>
  <p id="x3WF">Как Волна Стимулируемого Тестнета, эта сеть будет временной и закроется, как только мы достигнем наших целей. Мы будем выдерживать последовательные Волны Тестнетоы по мере перехода к Майннету.</p>
  <p id="04ME">С помощью Sui мы намерены установить новый стандарт для инфраструктуры web3. В отличие от других блокчейнов, Sui использует объектно-ориентированную модель данных для представления цифровых активов. Мы запустили <a href="https://sui.io/resources-sui/sui-dev-net-public-release" target="_blank">Sui Devnet</a> 6 мая 2022 года, чтобы проверить наши теории о блокчейне следующего поколения. По мере того как наше сообщество из более чем 300 000 участников изучало различные аспекты Devnet, мы улучшали инструментарий, усиливали мониторинг и оповещения, устраняли узкие места в основной логике, тестировали возможность повторного запуска и аварийного восстановления, а также профилировали использование памяти и CPU различными компонентами системы.</p>
  <p id="gNcK">Сообщество Sui является нашим самым большим активом, поскольку мы продолжаем тестировать инфраструктуру Sui, и мы благодарим вас и с нетерпением ждем вашего участия!</p>
  <h2 id="Qheb"><strong>Sui Devnet против Testnet</strong></h2>
  <p id="keHL">Самым большим достижением в переходе от Devnet к Testnet Wave 1 является включение независимых валидаторов. В рамках Devnet Mysten Labs использует четыре валидатора для проверки транзакций в сети. Testnet Wave 1 включает в себя сторонних валидаторов и полные ноды, выбранные в ходе нашего открытого процесса подачи заявок.</p>
  <p id="NjDt">Управление инцидентами перейдет от контроля Mysten Labs, осуществляемого в Devnet, к управлению сообществом в Testnet. Это изменение дает членам сообщества больший вклад и ответственность за поддержание здоровья Sui.</p>
  <figure id="8YwD" class="m_original">
    <img src="https://img2.teletype.in/files/12/93/1293414c-14b8-4344-b02e-1ad47b8218c1.png" width="852" />
  </figure>
  <p id="iSuG">Примечание для наших разработчиков: Из-за временной и ориентированной на оператора среды Testnet Wave 1, Devnet остается предпочтительной средой для разработчиков для создания и тестирования приложений. Тестнет может подвергаться оперативным проверкам, и из-за его географически распределенного характера могут возникать более длительные задержки с координацией исправлений. На faucet также могут распространяться ограничения по тарифам, чтобы обеспечить бесперебойную работу наших операторов. Проблемы с опытом разработчиков будут решаться более оперативно в Devnet, а программное обеспечение для валидаторов будет обновляться чаще.</p>
  <p id="uBRo">Кроме того, перемещение пакетов с использованием недавно введенных новых целочисленных типов (u16, u32 и u256) не будет работать в этой Testnet Wave. Публикация их завершится неудачей с ошибкой верификации.</p>
  <h2 id="UcjJ">Как Можно Взаимодействовать</h2>
  <p id="ukMb">Создание инфраструктуры блокчейна требует прозрачности и вовлечения общественности. По мере продвижения к Майннету сообщество Sui будет продолжать расти и играть все большую роль в работе Sui. Следите за новостями о Волне 2, которая будет посвящена управлению эпохами, токеномике и делегированию стейка. Мы объявим сроки, основываясь на наших результатах и извлеченных уроках из Волны 1.</p>
  <p id="O1Tj">В настоящее время нет планов об аирдропе SUI, и взаимодействие с Тестнетом не принесет вам никаких призов. Мы ценим значимое взаимодействие, которое помогает нам тестировать Sui!</p>
  <p id="BhWR">Чтобы узнать, что происходит в Testnet, Devnet и более широком сообществе Sui, посетите <a href="https://discord.com/channels/916379725201563759/925109817834631189" target="_blank">канал Sui в Discord</a>, <a href="https://forums.sui.io/" target="_blank">канал Sui Discourse</a>, <a href="https://twitter.com/SuiNetwork" target="_blank">@SuiNetwork в Twitter</a> и <a href="https://suifoundation.org/" target="_blank"><u>Sui Foundation</u></a>.</p>
  <h2 id="WlMB">Узнайте Больше о Sui</h2>
  <ul id="Fq8Z">
    <li id="Gov7"><a href="https://sui.io/?utm_source=medium&utm_medium=social&utm_campaign=devnet" target="_blank"><u>Веб-Сайт Sui</u></a></li>
    <li id="WJwk"><a href="https://docs.sui.io/?utm_source=medium&utm_medium=social&utm_campaign=devnet" target="_blank"><u>Портал Разработчика Sui</u></a></li>
    <li id="g6xv"><a href="https://docs.sui.io/build/move?utm_source=medium&utm_medium=social&utm_campaign=devnet" target="_blank"><u>Язык Программирования Move</u></a></li>
    <li id="3aFU"><a href="https://sui.io/whitepaper" target="_blank"><u>Sui Whitepaper</u></a></li>
    <li id="k5UG"><a href="https://discord.gg/sui" target="_blank">Форумы Сообщества</a></li>
  </ul>
  <h2 id="anl3">Создавайте с Нами!!</h2>
  <p id="xTl2">Мы в восторге от того, что несёт в себе будущее, и приглашаем создателей и разработчиков <a href="https://docs.sui.io/build?utm_source=medium&utm_medium=social&utm_campaign=devnet" target="_blank">присоединиться к нам</a>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/HwpGwzGmqdM</guid><link>https://teletype.in/@u_dorozhkina/HwpGwzGmqdM?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/HwpGwzGmqdM?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Разработка с помощью Aleo-JS</title><pubDate>Mon, 14 Nov 2022 18:13:55 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/05/5d/055d30cf-0c53-4d6d-b675-a1842ef2ac9b.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/49/ae/49ae9501-4b4b-405d-bff5-b6ad99b99ca4.png"></img>Мой Discord: useless_dorozhkina#1394
Ссылка на оригинал статьи: https://www.entropy1729.com/start-developing-in-aleo-with-aleo-sdk-and-aleo-js/]]></description><content:encoded><![CDATA[
  <blockquote id="keSZ"><em>Мой Discord: useless_dorozhkina#1394<br />Ссылка на оригинал статьи: <a href="https://www.entropy1729.com/start-developing-in-aleo-with-aleo-sdk-and-aleo-js/" target="_blank">https://www.entropy1729.com/start-developing-in-aleo-with-aleo-sdk-and-aleo-js/</a></em></blockquote>
  <p id="lrIj"></p>
  <p id="zAZs">В данной статье мы рассмотрим различные инструменты, которые мы разрабатываем, чтобы вы могли начать разработку ваших собственных приложений в Aleo. Кроме того, мы запустим локальную ноду для майнинга блоков всего за несколько шагов, чтобы позже использовать её для связи нашего нового приложения с реестром.</p>
  <h2 id="qqUd">1. Запуск локальной ноды</h2>
  <p id="sQwG">Чтобы собрать всё необходимое в Aleo SDK и запустить ноду, вам понадобится установленный компилятор rust. Чтобы установить его, вы можете выполнить следующую команду:</p>
  <pre id="7hjW">curl --proto &#x27;=https&#x27; --tlsv1.2 -sSf https://sh.rustup.rs | sh</pre>
  <p id="YwkZ">Если он у вас уже есть, мы рекомендуем проверить, есть ли какие-либо обновления в компиляторе rust, чтобы быть уверенными, что все будет верно работать для Aleo SDK. Чтобы проверить, вы можете выполнить:</p>
  <pre id="CToT">rustup update stable</pre>
  <p id="lBJz">Возможно вам потребуется закрыть и заново открыть терминал, чтобы должным образом завершить процесс установки.</p>
  <p id="Vn0j">Теперь вы готовы клонировать репозиторий Aleo SDK и начать полную настройку. На самом деле, вы клонируете форк Entropy1729 от Aleo SDK, который содержит все последние изменения и функции.</p>
  <pre id="ufI4"># Загрузить исходный код
git clone https://github.com/Entropy1729/aleo.git

# Перейти в root проекта
cd aleo

# Установить Aleo
cargo install --path .</pre>
  <p id="unsx">Чтобы проверить, все ли вы сделали правильно, выполните:</p>
  <pre id="bdx6">aleo -h</pre>
  <p id="TiKP">вы должны будете увидеть следующее:</p>
  <figure id="BC8P" class="m_column">
    <img src="https://img1.teletype.in/files/49/ae/49ae9501-4b4b-405d-bff5-b6ad99b99ca4.png" width="786" />
  </figure>
  <p id="RpY7">Все готово.</p>
  <p id="bzUY">Aleo SDK идёт в комплекте с несколькими примерами программ, которых будет достаточно для наших целей, поэтому нет необходимости создавать новую программу. Некоторое время назад мы опубликовали статью под названием <a href="https://www.entropy1729.com/aleo-development-starter-pack/" target="_blank">&quot;Aleo Development Starter Pack&quot;</a>, в которой создали и объяснили программу токенов, а затем развернули ее на локальной ноде.</p>
  <p id="rt8Y">Для этой статьи нам нужно будет лишь перейти к одному из примеров программ и запустить ноду, так что давайте сделаем это.</p>
  <p id="mz8N">Для данного руководства мы будем использовать программу <code>simple_token</code>. Перед запуском ноды важно просмотреть содержимое следующего файла:</p>
  <pre id="9Nsr"># Перейти к примеру программы
cd examples/simple_token</pre>
  <p id="h3fm">Там вы увидите файл с именем <code>program.json</code>, который выглядит следующим образом:</p>
  <figure id="fapM" class="m_column">
    <img src="https://img4.teletype.in/files/3c/9f/3c9f535e-2afb-4eda-8f36-d998c3829f57.png" width="787" />
  </figure>
  <p id="drsY">Данный файл содержит учетные данные (private key и address) аккаунта, который будет майнить и развертывать программы на нашей локальной ноде. Они будут полезны позже в этой статье, так что запомните их.</p>
  <p id="8MHL">Теперь, чтобы продолжить запуск ноды, просто вводите следующие команды в каталоге <code>simple_token</code>, в котором вы уже находитесь:</p>
  <pre id="myaL"># Развернуть программу и запустить майнер
aleo node start</pre>
  <p id="HRWn">И это все; вы должны увидеть подобный результат:</p>
  <pre id="heih">⏳ Starting a local development node for &#x27;token.aleo&#x27; (in-memory)... 

• Executing &#x27;credits.aleo/genesis&#x27;... 
• Executed &#x27;genesis&#x27; (in 1979 ms) 
• Verified &#x27;genesis&#x27; (in 7 ms) 
• Verified &#x27;genesis&#x27; (in 6 ms)

🌐 Server is running at http://0.0.0.0:4180 

📦 Deploying &#x27;token.aleo&#x27; to the local development node...

• Loaded universal setup (in 1580 ms) 
• Built &#x27;mint&#x27; (in 9325 ms) 
• Certified &#x27;mint&#x27;: 254 ms
• Built &#x27;transfer&#x27; (in 13848 ms) 
• Certified &#x27;transfer&#x27;: 509 ms 
• Calling &#x27;credits.aleo/fee&#x27;...
• Executed &#x27;fee&#x27; (in 2560 ms) 
• Verified certificate for &#x27;mint&#x27;: 65 ms 
• Verified certificate for &#x27;transfer&#x27;: 103 ms 
• Verified &#x27;fee&#x27; (in 6 ms) 
• Verified certificate for &#x27;mint&#x27;: 66 ms 
• Verified certificate for &#x27;transfer&#x27;: 101 ms 
• Verified &#x27;fee&#x27; (in 6 ms)
• Verified certificate for &#x27;mint&#x27;: 77 ms 
• Verified certificate for &#x27;transfer&#x27;: 102 ms 
• Verified &#x27;fee&#x27; (in 6 ms) 
• Verified certificate for &#x27;mint&#x27;: 73 ms 
• Verified certificate for &#x27;transfer&#x27;: 144 ms 
• Verified &#x27;fee&#x27; (in 6 ms)

🛡️ Produced block 1 (ab12slup04u3z84l6qsw06y6l85ryacxsjtymalf4f7p8c8gkguxvxsk44x5f)

{
    &quot;previous_state_root&quot;: &quot;2817610268342789758153341947932865525763648224638186354448819908118351259277field&quot;,
    &quot;transactions_root&quot;: &quot;3171802377909394876352269413600808592571527618205118587254721468779703127650field&quot;,
    &quot;metadata&quot;: {
      &quot;network&quot;: 3, 
      &quot;round&quot;: 1, 
      &quot;height&quot;: 1, 
      &quot;coinbase_target&quot;: 18446744073709551615, 
      &quot;proof_target&quot;: 18446744073709551615, 
      &quot;timestamp&quot;: 1667595496
    } 
}

✅ Deployed &#x27;token.aleo&#x27; in transaction &#x27;at1xu40mu9g7y7atrjg8wtt9mzcr2t06wehdmt2lxmhvcrlsmclgyyskdhtqd&#x27;

• Executing &#x27;credits.aleo/transfer&#x27;... 
• Executed &#x27;transfer&#x27; (in 3245 ms) 
• Verified &#x27;transfer&#x27; (in 6 ms) 
• Verified &#x27;transfer&#x27; (in 6 ms) 
• Verified &#x27;transfer&#x27; (in 6 ms)

🛡️ Produced block 2 (ab10qjn638rnq0rzzq0qgvnujerx9kekxwfs6jcktqdcftcnntjmvxq2m2dy2)

...</pre>
  <p id="x1yz">Теперь у вас есть локальная нода, которая майнит блоки. Как вы можете видеть в результате запуска, нода по умолчанию будет работать на <a href="http://0.0.0.0:4180" target="_blank"><em>http://0.0.0.0:4180</em></a>.</p>
  <p id="EFRT">Это все, что вам понадобится для этого руководства. Давайте двигаться дальше.</p>
  <h2 id="2yOW">2. Отправка токенов</h2>
  <p id="ux3s">Чтобы протестировать и воспроизвести функции, которые имеются в Aleo-JS, нам понадобится много токенов. Прямо сейчас самый простой способ получить их — отправить запрос cURL ноде с помощью private key, который используется для майнинга блоков на локальной ноде, и с помощью address, на который мы хотим получить токены.</p>
  <p id="XUkE">Итак, первое, что нам нужно сделать, это создать Account, который мы будем использовать для разработки; для этого мы клонируем Aleo-JS и начнем его использовать.</p>
  <pre id="Kjsq">## Клонировать репозиторий AleoJS
git clone https://github.com/Entropy1729/aleo-js.git</pre>
  <p id="u0ol">Внутри репозитория вы найдете каталог под названием <em>dev_site</em>, который содержит все необходимые конфигурации для запуска тестового веб-сайта и начала использования функционала Aleo-JS.</p>
  <p id="y2jv">Чтобы создать и запустить тестовый веб-сайт, выполните следующие команды:</p>
  <pre id="UVEH">## Перейти в каталог dev_site
cd dev_site

## Создать зависимости
npm run build

## Запустить локальный веб-сайт
npm run dev</pre>
  <p id="Gz4z">Вы должны увидеть следующий вывод или нечто на него похожее:</p>
  <pre id="uyGj">&lt;i&gt; [webpack-dev-server] Project is running at:
&lt;i&gt; [webpack-dev-server] Loopback: http://localhost:4000/
&lt;i&gt; [webpack-dev-server] On Your Network (IPv4): http://192.168.0.34:4000/
&lt;i&gt; [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:4000/
&lt;i&gt; [webpack-dev-server] Content not from webpack is served from &#x27;~/Documents/aleo_repos/aleo-js/dev_site/dist&#x27; directory
asset cc9f07ba5b4549f3396a.module.wasm 484 KiB [emitted] [immutable] (auxiliary name: index)
asset index.bundle.js 292 KiB [emitted] (name: index)
asset index.html 185 bytes [emitted]
runtime modules 30.2 KiB 15 modules</pre>
  <p id="tJ54">Результат указывает на то, что новый веб-сайт запущен на <a href="http://localhost:4000/" target="_blank"><em>http://localhost:4000/</em></a>.</p>
  <p id="Weiq">Если мы откроем эту ссылку, мы должны будем увидеть веб-сайт с белым фоном и надписью <strong>&quot;Aleo JS Test Site&quot;</strong>. Отныне мы будем использовать веб-консоль в инструментах разработчика нашего веб-браузера для тестирования каждой функции. Как мы упоминали ранее, нам нужен аккаунт, чтобы начать получать деньги с нашей ноды. В веб-консоли выполните следующие команды:</p>
  <pre id="6KP3">// Точка входа для использования Account и NodeConnection
const { Account } = await AleoJS

// Создать новый Account
const myAcc = new Account()

// Получить ключи аккаунта
myAcc.keys()</pre>
  <p id="ZZ5b">вы должны будете увидеть нечто похожее на следующее:</p>
  <figure id="MKrP" class="m_column">
    <img src="https://img2.teletype.in/files/9d/7c/9d7c529c-941a-404b-9665-c5dc6bbb1139.png" width="787" />
  </figure>
  <p id="pW1t">Отлично! Мы создали новый аккаунт. Теперь у нас есть все, что нам нужно для перевода токенов.</p>
  <p id="l2SF">cURL, который мы собираемся использовать, выглядит следующим образом</p>
  <figure id="I05f" class="m_column">
    <img src="https://img4.teletype.in/files/f2/08/f2085fe4-6653-43fc-9d92-54447d93c745.png" width="789" />
  </figure>
  <p id="FeRy">Вам нужно будет заменить поле &quot;from&quot; тела запроса на упомянутый при запуске ноды private key, который мы использовали в <em>program.json</em>. Это закрытый ключ, который содержит &quot;намайненные&quot; токены нашей ноды. Наконец, address должен быть тем, который мы сгенерировали с помощью Aleo-JS. Для этого шага это должно быть всё.</p>
  <p id="pZGb">Мы запустили локальную ноду, узнали, как переводить деньги на наш созданный аккаунт, так что теперь пришло время поиграть с библиотекой и ее функциями.</p>
  <h2 id="p366">3. Поиграем с Aleo-JS</h2>
  <p id="t3wD">Библиотека Aleo-JS включает в себя множество полезных функций для нашей разработки; мы уже научились запускать тестовый веб-сайт и увидели первые шаги по созданию подключения к ноде и настройке аккаунта на ней.</p>
  <p id="cOmx">Aleo-JS в основном разделяет функционал между <em>NodeConnection</em> и <em>Account</em>. Изначально всё выглядит следующим образом:</p>
  <pre id="v1mQ">// Точка входа для использования Account и NodeConnection
const {Account, NodeConnection} = await AleoJS

// Создать новый Account
const myAcc = new Account({privateKey:&quot;&lt;private-key-account&gt;&quot;})

// Создать соединение с нашей нодой
const myConn = new NodeConnection(&quot;http://127.0.0.1:4180&quot;)

// Установить учетную запись для нашего подключения
myConn.setAccount(myAcc)</pre>
  <p id="L0nv">Теперь вместо того, чтобы создавать новый аккаунт, мы импортировали уже существующий с помощью сгенерированного ранее privateKey. Теперь вы можете использовать два разных класса в зависимости от того, что вы хотите сделать; вот несколько примеров функций, которыми обладает соединение:</p>
  <pre id="rvSs">// Получить последний блок
myConn.getLatestBlock()

// Получить блок с высоты
myConn.getBlock(1)

// Получить все транзакции в блоке
myConn.getTransactions(1)</pre>
  <p id="XMZJ">Теперь давайте рассмотрим некоторые примеры функций, связанных с учетной записью:</p>
  <h3 id="WLZx">Подписание</h3>
  <p id="oEAf">Все, что вам нужно сделать, чтобы подписать и подтвердить сообщение:</p>
  <pre id="7LvX">// Подписать и подтвердить подпись без аккаунта
let signature = myAcc.sign(&quot;a message to sign&quot;)
myAcc.verify(&quot;a message to sign&quot;, signature)</pre>
  <h3 id="efhN">Расшифровывание записей</h3>
  <p id="krP6">Чтобы расшифровать свои записи, сначала вам нужно будет получить от ноды ваш Unspent Ciphertexts, вы можете сделать это с помощью следующей функции:</p>
  <pre id="oHqi">// Расшифровать записи
const ciphers = await myConn.getUnspentCiphertexts()</pre>
  <pre id="2FQP">[ &quot;record1qyqsqlrpzaje45yalyycgqz5p3furdk8ltuj3dek4fum7tpxr9dze6gdqyqsp4azr4ch86n25crcj8tr9ck37m20e07xtd88wpwjgjt6e2w9jug0qqq9mgzd752llfgvy93qlnukxyzcys7ve6kd0mvknms7aacg4qx3cyglrwzgx&quot;
]</pre>
  <p id="qUxp">Теперь давайте расшифруем эти шифротексты:</p>
  <pre id="KYSV">ciphers.map(c =&gt; myAcc.decryptRecord(c)).map(r =&gt; r.to_string()).pop()</pre>
  <p id="OgvC">И после этого вы должны увидеть, что ваша запись отправки была расшифрована со стороны клиента!:</p>
  <pre id="nOin">&quot;{
    owner: aleo19jr4shhpfusy7y5zm7g56hspe4hus6p84m5c9k3rqh77c43gfgqsyjqcgx.private,
    gates: 100u64.private,
    _nonce: 7738884396647363829465636137955226807109756206255384966048643179446086246493group.public
}&quot;</pre>
  <p id="Wc70">Чтобы ознакомиться со всеми доступными функциями и некоторыми примерами каждой из них, вы можете обратиться к <a href="https://entropy1729.github.io/aleo-js/" target="_blank">документации Aleo-JS</a>. Кроме того, у вас есть <a href="https://github.com/Entropy1729/aleo/tree/main/wasm" target="_blank">документация Aleo-SDK</a>, поскольку это зависимость Aleo-JS, некоторые её типы и функции могут быть полезны для разработки более сложных программ.</p>
  <p id="tbLD">Счастливого написания кода!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/I_a6B3F0vsg</guid><link>https://teletype.in/@u_dorozhkina/I_a6B3F0vsg?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/I_a6B3F0vsg?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Поздоровайтесь с новым Leo Wallet</title><pubDate>Fri, 11 Nov 2022 14:10:01 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/7f/f6/7ff6fd9e-d7ce-4a7b-8ce3-a812d2f05e3a.png"></media:content><description><![CDATA[<img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/63695abf73a040baf6474934_Leo_Mark_White_Extra_Border.png"></img>Опубликовано Barron Caster 7 ноября 2022 года]]></description><content:encoded><![CDATA[
  <p id="WB6x" data-align="center">Опубликовано <strong>Barron Caster</strong> 7 ноября 2022 года</p>
  <blockquote id="YmH6"><em>Мой Discord: useless_dorozhkina#1394 <br />Ссылка на оригинал: <a href="https://www.leo.app/blog/say-hello-to-the-new-leo-wallet" target="_blank">https://www.leo.app/blog/say-hello-to-the-new-leo-wallet</a></em></blockquote>
  <p id="iRux">Мы считаем, что конфиденциальность — это право человека. Leo Wallet был создан для защиты финансовой свободы и идентичности людей.</p>
  <p id="J2Z8">Принципы, о которых мы заботимся, — это безопасность, надежность, конфиденциальность, простота и защита.</p>
  <p id="KU39">Наш новый внешний вид воплощает эти принципы в жизнь таким образом, чтобы находить отклик в нашем раннем сообществе, а также охватить миллиарды пользователей.</p>
  <p id="vRHq">Мы рады представить новое лицо кошелька Leo.</p>
  <figure id="MrCN" class="m_original">
    <img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/63695abf73a040baf6474934_Leo_Mark_White_Extra_Border.png" width="288" />
  </figure>
  <p id="xBAu">Мы называем этот новый логотип &quot;Leo Lock&quot;, он создает замок из двух букв “L” в слове &quot;waLLet&quot;.</p>
  <figure id="anOy" class="m_column">
    <img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/6369545f73a0400ff846c1f3_VXgyKmOA7d8GS3WEq0hYzXD4mPWB7_44Twmd8sDM8JEJIkK3c016xh5vkO_mXGycfdftvmB-JEVA2c748ZopGq0dburTkW6i3-g8qMWUFcJq_yQ81-rQm0CPaLjpwkA3y4oWa4rGAIPKXtgJhzD_afOEyAn1pDDXu99gXHav40H7C00BjF47h8FTwat9.gif" width="1000" />
  </figure>
  <p id="A61q">Leo Wallet уже начал доходить до разработчиков, программистов и энтузиастов конфиденциальности. Мы будем продолжать расширять охват Leo по мере дальнейшего развития основополагающего блокчейна Aleo.</p>
  <p id="liQQ">Мы хотим создать безопасное пространство, в котором люди могли бы процветать. Наша цель — продолжать увеличивать пользу и строить будущее, в котором мы все хотим жить.</p>
  <p id="PWRs">Leo - это кошелек с приватностью на первом месте для сети с приватностью на первом месте.</p>
  <p id="TQ0o">Запишитесь в waitlist раннего доступа <a href="https://join.leo.app/signup" target="_blank">здесь</a> или присоединяйтесь к нашему <a href="https://discord.gg/BNBzZQAd66" target="_blank">Discord</a>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/TWzMdQ6Lx9R</guid><link>https://teletype.in/@u_dorozhkina/TWzMdQ6Lx9R?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/TWzMdQ6Lx9R?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Главные Эксперты Нулевого Разглашения 2022</title><pubDate>Fri, 11 Nov 2022 13:52:04 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/a3/4d/a34d4df6-8a66-4929-8111-2856eb51b046.png"></media:content><description><![CDATA[<img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/6350ef2d764d290ef424e479_ZK-Experts.webp"></img>Опубликовано Arjun 19 октября 2022 года]]></description><content:encoded><![CDATA[
  <p id="UJYU" data-align="center">Опубликовано <strong>Arjun</strong> 19 октября 2022 года</p>
  <blockquote id="MBwG"><em>Мой Discord: useless_dorozhkina#1394<br />Ссылка на оригинал: <a href="https://www.leo.app/blog/top-zero-knowledge-experts-2022" target="_blank">https://www.leo.app/blog/top-zero-knowledge-experts-2022</a></em></blockquote>
  <figure id="7NdU" class="m_original">
    <img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/6350ef2d764d290ef424e479_ZK-Experts.webp" width="750" />
  </figure>
  <p id="olgZ">Доказательства с нулевым разглашением (ZKPs) — это интерактивные математические доказательства, которые раскрывают только ограниченную информацию об утверждении, не раскрывая каких-либо конкретных деталей. Другими словами, ZKPs позволяют одной стороне (доказывающему) убедить другую сторону (проверяющего), что утверждение истинно, не раскрывая никакой основной информации об этом утверждении. Термин &quot;нулевое разглашение&quot; происходит из того, что эти доказательства не раскрывают ничего, кроме того факта, что утверждение действительно.</p>
  <p id="qeWe">ZKPs используют передовые технологии математики и криптографии. Благодаря новейшим разработкам они используются для того, чтобы сделать блокчейны приватными и более масштабируемыми.</p>
  <p id="nNJq">Данная статья познакомит вас с пятью главными экспертами в области доказательств с нулевым разглашением. Эти профессионалы внесли выдающийся вклад в доказательства с нулевым разглашением и криптографию в целом посредством исследовательских работ, семинаров, книг и практических приложений.</p>
  <h2 id="qDVf"><strong>Alessandro Chiesa</strong></h2>
  <p id="yYqJ">Alessandro Chiesa — доцент Калифорнийского университета в Беркли и соавтор Zerocash, соучредитель Zcash и StarkWare, одной из фирм, разрабатывающих решения для масштабирования на основе нулевого разглашения. В настоящее время он является профессором криптографии, компьютерных наук и теории сложности вычислений. В 2020 году его исследование цитировалось более 1200 раз. Он много исследовал, как улучшить технологию нулевого разглашения. Одним из примеров его исследований является Zexe, приватный и децентрализованный вычислительный протокол, который использует SNARKs с единой настройкой. Он также работал над квантово-устойчивыми, прозрачными рекурсивными доказательствами, которые особенно подходили бы для блокчейнов.</p>
  <h2 id="mjxc"><strong>Eli Ben-Sasson</strong></h2>
  <p id="yhnd">С тех пор как в 2001 году Eli получил докторскую степень в области теоретических компьютерных наук в Еврейском университете, он изучал криптографические доказательства и доказательства с нулевым разглашением вычислительной целостности. Он был соавтором протоколов STARK, FRI, Zerocash и Zcash Company. До того как уйти, чтобы основать StarkWare, он несколько лет был профессором компьютерных наук в Технионе. Он также занимал исследовательские должности в Институте перспективных исследований г. Принстона, в Гарварде и в Массачусетском технологическом институте.</p>
  <h2 id="cbKT"><strong>Shafi Gold-Shafran</strong></h2>
  <p id="6d3F">Shafi Goldwasser — директор Института теории вычислений Саймонса и профессор C. Lester Hogan электротехники и компьютерных наук в Калифорнийском университете в Беркли. Она также является профессором электротехники и компьютерных наук в Массачусетском технологическом институте и профессором компьютерных наук и прикладной математики в Институте науки Вейцмана в Израиле. Goldwasser получила степень бакалавра прикладной математики в Университете Карнеги-Меллон в 1979 году и степень магистра и доктора в области компьютерных наук в Калифорнийском университете в Беркли в 1984 году. Она является одним из авторов &quot;The knowledge complexity of interactive proof-systems&quot;, одной из самых фундаментальных опубликованных по интерактивным доказательствам работ. Её вклад в область криптографии делает её одним из наиболее цитируемых авторов в этой области.</p>
  <h2 id="NAIM"><strong>Howard Wu</strong></h2>
  <p id="MMxE">Howard Wu является соучредителем Aleo, блокчейна, который использует криптографию с нулевым разглашением для обеспечения конфиденциальности и программируемости, и Decrypt Capital, ведущей инвестиционной компании в области блокчейнов для протоколов сохранения конфиденциальности и предприятий на ранних стадиях. Howard впервые заинтересовался Bitcoin в 2011 году и внес свой вклад в криптографические библиотеки, используемые в Ethereum и Zcash. Он является советником по блокчейну в Беркли, первой университетской экосистеме для блокчейна. Он является активным исследователем в области теоретической информатики и компьютерной безопасности, и работает с профессором Alessandro Chiesa, соучредителем Zcash, и профессором Dawn Song, преподавателем Инициативы по криптовалютам и контрактам (IC3). Howard является кандидатом в магистры электротехники и компьютерных наук и получил степень бакалавра прикладной математики и бакалавра компьютерных наук в Калифорнийском университете в Беркли.</p>
  <h2 id="N8R7"><strong>Dan Boneh</strong></h2>
  <p id="1P2s">Dan Boneh — американо-израильский профессор прикладной криптографии и компьютерной безопасности в Стэнфордском университете. Исследования Боуна сосредоточены на применении криптографии к компьютерной безопасности. Его работа включает криптосистемы с новыми свойствами, веб-безопасность, безопасность для мобильных устройств и криптоанализ. Он является автором более ста публикаций в этой области и стипендиатом Packard и Alfred P. Sloan. Он является лауреатом премии ACM 2014 года и премии Гёделя 2013 года. В 2016 году Boneh был избран членом Национальной инженерной академии США за вклад в криптографию и компьютерную безопасность.</p>
  <h2 id="1Prr"><strong>Ben Fisch</strong></h2>
  <p id="oXSo">Ben Fisch — доцент кафедры компьютерных наук Йельского университета и соучредитель Espresso Systems, блокчейн-компании, работающей над настраиваемыми решениями для обеспечения конфиденциальности. Он защитил докторскую диссертацию в Стэнфордском университете, работая с Dan Boneh в исследовательской группе прикладной криптографии. Исследования Ben в первую очередь сосредоточены на конфиденциальности и проверяемости в Интернете. Он опубликовал множество статей о нулевом разглашении, и его цитировали более 1200 раз.</p>
  <h2 id="dNCg">Вывод</h2>
  <p id="KEC0">Доказательства с нулевым разглашением — важная и захватывающая область исследований в криптографии. Они позволяют сторонам доказать, что они что-то знают, не раскрывая того, что именно они знают. Они полезны во многих областях, включая голосование, онлайн-рекламу и онлайн-знакомства. Они также используются в блокчейнах для подтверждения действительности транзакции без раскрытия информации о совершающих транзакцию сторонах. Доказательства с нулевым разглашением — это сложная и техническая область исследований, но они имеют множество применений и полезны во многих реальных ситуациях. Это захватывающая область исследований, которая в будущем будет иметь гораздо больше применений и открытий.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/utmKFE8oE-2</guid><link>https://teletype.in/@u_dorozhkina/utmKFE8oE-2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/utmKFE8oE-2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Представляем Leo Wallet для Aleo</title><pubDate>Fri, 11 Nov 2022 13:06:05 GMT</pubDate><description><![CDATA[<img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/6350a9205680c659e126bf0d_Leo%20Wallet%20for%20Aleo.png"></img>Опубликовано Barron Caster 10 октября 2022 года]]></description><content:encoded><![CDATA[
  <p id="5FI5" data-align="center">Опубликовано <strong>Barron Caster</strong> 10 октября 2022 года</p>
  <p id="Li5h" data-align="center">Мы рады представить Leo, лучший сохраняющий конфиденциальность кошелек для <a href="https://www.aleo.org/" target="_blank">Aleo</a>.</p>
  <blockquote id="FjJP"><em>Мой Discord: useless_dorozhkina#1394<br />Ссылка на оригинал: <a href="https://www.leo.app/blog/leo-aleo-wallet" target="_blank">https://www.leo.app/blog/leo-aleo-wallet</a></em></blockquote>
  <figure id="ahXh" class="m_original">
    <img src="https://uploads-ssl.webflow.com/62ec65daa4f21fd9d89f90bf/6350a9205680c659e126bf0d_Leo%20Wallet%20for%20Aleo.png" width="720" />
  </figure>
  <h2 id="nkpz">Aleo</h2>
  <p id="aF6Z">Aleo — это первый в своем роде сосредоточенный на конфиденциальности блокчейн, возможный благодаря <a href="https://www.notboring.co/p/zero-knowledge" target="_blank">доказательствам с нулевым разглашением</a> (ZKPs). Aleo использует ZKPs для обеспечения масштабируемых и приватных платежей, имея при этом полноценную платформу смарт-контрактов.</p>
  <h2 id="cywi">Функционал</h2>
  <p id="SY25">Leo станет главным пунктом назначения для выполнения любых действий на блокчейне Aleo: отправка/получение токенов, стейкинг, трейдинг, игры и многое другое будут возможны либо изначально через кошелёк, либо через партнерские dApp. У нас также есть SDK для беспрепятственной интеграции разработчиков, которые хотят охватить больше пользователей Aleo. Мы продолжим добавлять функционал для масштабного внедрения ориентированных на конфиденциальность приложений, чтобы расширить экосистему Aleo.</p>
  <p id="A0r5">Запишитесь в наш waitlist, чтобы получить ранний доступ: <a href="https://join.leo.app/signup" target="_blank">https://join.leo.app/signup</a></p>
  <h2 id="kwjw">Команда</h2>
  <p id="Ji1D">Мы — команда разработчиков, которые основали, масштабировали и продали множество предприятий. При сильной поддержке инвесторов и гранте от команды Aleo мы рады разработать наилучший из возможных кошельков, ориентированных на конфиденциальность.</p>
  <h2 id="7CJV">Видение</h2>
  <p id="Fcz7">Будущее публичных блокчейнов, сохраняющих конфиденциальность, светло. У них есть потенциал разрушить существующие блокчейны, поскольку они собирают в себе все хорошее, но при этом позволяют пользователям иметь больше контроля над тем, чем они делятся. Пожалуйста, свяжитесь с нами, если вы заинтересованы в сотрудничестве, являетесь ранним пользователем или верите в будущее, где конфиденциальность является приоритетом по умолчанию.</p>
  <p id="95iM">Waitlist для раннего доступа: <a href="https://join.leo.app/signup" target="_blank">https://join.leo.app/signup</a></p>
  <p id="xByb">Веб-сайт: <a href="https://leo.app/" target="_blank">https://leo.app/</a></p>
  <p id="moVa"><a href="https://leo.app/" target="_blank">‍</a>Twitter: <a href="https://twitter.com/theLeoWallet" target="_blank">https://twitter.com/theLeoWallet</a></p>
  <p id="4ibp"><a href="https://twitter.com/theLeoWallet" target="_blank">‍</a>Discord: <a href="https://discord.gg/BNBzZQAd66" target="_blank">https://discord.gg/BNBzZQAd66</a></p>
  <p id="DQgw">Свяжитесь с нами по электронной почте: Barron@leo.app</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@u_dorozhkina/Mexf1dBv1yk</guid><link>https://teletype.in/@u_dorozhkina/Mexf1dBv1yk?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina</link><comments>https://teletype.in/@u_dorozhkina/Mexf1dBv1yk?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=u_dorozhkina#comments</comments><dc:creator>u_dorozhkina</dc:creator><title>Запуск Masa Soulbound Identity на Ethereum Goerli Testnet</title><pubDate>Fri, 28 Oct 2022 17:17:50 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/57/b2/57b2ec82-798f-44d4-bffc-b9d6e027b259.png"></media:content><description><![CDATA[<img src="https://miro.medium.com/max/667/0*ZBck09GjRgIeVsk3"></img>Мой Discord: useless_dorozhkina#1394
Ссылка на оригинал статьи: https://medium.com/masa-finance/masa-soulbound-identity-launches-on-ethereum-goerli-testnet-12f38858004f]]></description><content:encoded><![CDATA[
  <blockquote id="wV6F"><em>Мой Discord: useless_dorozhkina#1394<br />Ссылка на оригинал статьи: <a href="https://medium.com/masa-finance/masa-soulbound-identity-launches-on-ethereum-goerli-testnet-12f38858004f" target="_blank">https://medium.com/masa-finance/masa-soulbound-identity-launches-on-ethereum-goerli-testnet-12f38858004f</a></em></blockquote>
  <p id="tVl2">После почти двух месяцев успешного тестирования в сети Celo Alfajores Testnet <strong>мы рады запустить Masa Soulbound Identity в тестовой сети Ethereum Goerli!</strong> Это знаменует собой важный этап и следующий шаг на пути к запуску нашей основной сети на Ethereum в ближайшем будущем.</p>
  <p id="gHPa"><strong>Торгуйте своим .soul именем в тестовой сети OpenSea:</strong> <strong>Это еще не все: теперь вы можете торговать своим уникальным .soul именем Masa на OpenSea!</strong> Мы прислушались к отзывам нашего сообщества о том, что они хотят сделать свои имена .soul редкими, забавными и доступными для торговли — и мы добавили такую возможность.</p>
  <p id="YVEW">Подобно ENS домену, сообщество может определять ценность своего уникального .soul имени и торговать созданным для них NFT на вторичном рынке OpenSea.</p>
  <p id="Bx0e">Сминтите свое уникальное .soul имя и начните торговать на OpenSea, пока они не закончились! С помощью Masa в тестовой сети Goerli вы можете сминтить .soul имя, сгенерировать децентрализованный кредитный рейтинг в web3 и торговать своим .soul именем в тестовой сети OpenSea.</p>
  <p id="rZEO">Переходите по <a href="https://beta.claimyoursoul.masa.finance/" target="_blank">https://beta.claimyoursoul.masa.finance/</a> и начните минтить Masa SBT прямо сейчас.</p>
  <p id="k6O3">Вот пошаговая инструкция о том, как это сделать:</p>
  <figure id="ZSdZ" class="m_column" data-caption-align="center">
    <iframe src="https://www.youtube.com/embed/tc0jCQ-Z_gQ?autoplay=0&loop=0&mute=0"></iframe>
    <figcaption>Как сминтить SBT на Masa Goerli Testnet</figcaption>
  </figure>
  <h3 id="6Eaw">Шаг 1: Подключите свой кошелек <strong>Metamask </strong>к тестовой сети <strong>Goerli</strong> (<a href="https://blog.cryptostars.is/goerli-g%C3%B6rli-testnet-network-to-metamask-and-receiving-test-ethereum-in-less-than-2-min-de13e6fe5677" target="_blank"><em>источник</em></a>)</h3>
  <p id="Mqmh">1. Войдите в свой кошелек Metamask и нажмите на выпадающий список сетей.</p>
  <figure id="rjex" class="m_original">
    <img src="https://miro.medium.com/max/667/0*ZBck09GjRgIeVsk3" width="427" />
  </figure>
  <p id="C6J2">2. Нажмите на кнопку &quot;Add Network&quot; (необязательно).</p>
  <figure id="vvst" class="m_original">
    <img src="https://miro.medium.com/max/652/0*nr_OhnsgwSXb1v7Y" width="417" />
  </figure>
  <p id="eB4t">3. Появится новое окно (необязательно).</p>
  <figure id="6asc" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*v5ltFD_gvHjxaWzp" width="868" />
  </figure>
  <p id="fnki">4. Теперь в левой боковой панели нажмите на “Networks”, появится новое окно. Там вы можете увидеть все сети Testnet, которые доступны, но не видны (необязательно).</p>
  <figure id="LuWx" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*nltDEsvy58nrHG-F" width="867" />
  </figure>
  <figure id="pVyl" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*vMKtzq5Zq6Q9NCN3" width="860" />
  </figure>
  <p id="0xSa">Теперь нажмите &quot;Advanced&quot; в левой колонке (необязательно). </p>
  <figure id="SPum" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*kV0XS7KdqacKSbqp" width="884" />
  </figure>
  <p id="CWdk">6. На вкладке &quot;Advanced&quot; при прокрутке вниз вы найдете опцию &quot;Show test networks&quot;, включите ее (необязательно).</p>
  <figure id="t475" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*Fl1_QcKoZ9jRMaHP" width="799" />
  </figure>
  <p id="aLkp">7. После выполнения этих шагов вы можете найти пользовательскую сеть в выпадающем списке.</p>
  <figure id="6aTC" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*6FBmhjWqBKLfeAxL" width="849" />
  </figure>
  <h3 id="AMKD">Шаг 2: Как получить тестовый Ethereum</h3>
  <p id="055f">1. Перейдите на <a href="https://goerlifaucet.com/" target="_blank">https://goerlifaucet.com/</a>.</p>
  <p id="acxe">2. Введите адрес своего кошелька или домен ENS. Возможно, вам придется зарегистрировать учетную запись Alchemy или найти другой faucet в Интернете</p>
  <figure id="QB4g" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*ktizndoys6F9_y00" width="1094" />
  </figure>
  <p id="lEZa">3. Как только транзакция будет подтверждена, вы сможете увидеть 0.1 Goerli ETH в вашем кошельке Metamask</p>
  <h3 id="uefY">Шаг 3: Получайте удовольствие от минта Masa SBTS в тестовой сети Goerli!</h3>
  <p id="ylb8">1. Перейдите на <a href="https://beta.claimyoursoul.masa.finance/" target="_blank">https://beta.claimyoursoul.masa.finance/</a></p>
  <p id="0R52">2. Подсоедините и авторизуйте свой кошелек</p>
  <p id="9ma8">3. Посетите информационную панель Masa, чтобы сминтить свое .soul имя и сгенерировать децентрализованную кредитную историю в web3</p>
  <p id="NV8y">4. Вы также можете начать торговать своими именами .soul в тестовой сети OpenSea!</p>
  <figure id="DI9k" class="m_column">
    <img src="https://miro.medium.com/max/1094/0*0a7yk6hM8RxKMpiA" width="1094" />
  </figure>
  <p id="lrIy">В течение следующих нескольких недель мы продолжим быстро создавать и еженедельно тестировать новые функции в тестовой сети с членами сообщества. Мы ждем отзывов от сообщества, и мы награждаем тестировщиков местами в списке допущенных в основную сеть, чтобы они могли получить ранний доступ к клейму .soul имени после завершения этапа тестирования.</p>
  <p id="tXEB"><em>Вам придется перерегистрировать свое .soul имя в каждом релизе тестовой сети, и имена soul не перейдут в основную сеть.</em></p>
  <p id="B9ef">Помогите нам улучшиться, сообщив об ошибках или оставив отзыв в <a href="https://discord.com/invite/2kSDknKncm" target="_blank">Masa Discord</a> в ветке <a href="https://discord.gg/2kSDknKncm" target="_blank"># 🐛 │sbt-bugs</a>.</p>
  <p id="X7Te">С благодарностью,</p>
  <p id="RfKz">Команда Masa 🌽</p>
  <h3 id="EPQq">Вы можете связаться с нами по следующим ссылкам:</h3>
  <p id="U2ZP"><a href="https://masa.finance/" target="_blank">Website</a> | <a href="https://discord.com/invite/HyHGaKhaKs" target="_blank">Discord</a> | <a href="https://t.me/masafinance" target="_blank">Telegram</a> | <a href="https://twitter.com/getmasafi" target="_blank">Twitter</a> | <a href="https://www.facebook.com/getmasa" target="_blank">Facebook</a></p>

]]></content:encoded></item></channel></rss>