Разработчик криптографических протоколов и децентрализованных систем

Осень 2020

Цель курса — Подготовить квалифицированных разработчиков децентрализованных систем. Дать полное представление обо всех аспектах разработки децентрализованных систем: от базовых основных алгоритмов до архитектур конкретных проектов, методик разработки и аудита. С академической точки зрения курс находится на пересечении следующих IT-дисциплин: алгоритмы и структуры данных, криптография, базы данных, компьютерные сети, компиляторы и виртуальные машины, информационная безопасность.
 

Описание
Курс состоит из лекций (по криптографии, распределенным системам и другим смежным темам), из практических занятий (на которых слушатели будут учиться писать смарт-контракты под самые популярные платформы) и домашних заданий (в которых будет нужно разработать код различных программных инструментов, либо провести анализ/аудит существующих систем).


 
Подробнее
Чему научитесь
По итогам курса слушатели научатся сами запускать блокчейны и отказоустойчивые сети, разрабатывать смарт-контракты, создавать приложения, трейдинговые и мониторинговые боты для существующих блокчейн-сетей, работать с децентрализованными финансами и системами идентификации, аудировать безопасность блокчейн-систем, проектировать новые криптопротоколы и разбираться в сложных аспектах децентрализованной разработки. Окончившие курс слушатели могут претендовать на позиции разработчиков во множестве децентрализованных проектов, которые сейчас переживают взрывной рост. Эти проекты в полной мере используют парадигму opensource, изначально заставляя разработчиков писать качественный, публично проверяемый код, создавая отличное портфолио для будущего профессионального роста.
 
Подробнее

Преподаватели

Сергей Прилуцкий Сергей Прилуцкий

Бывший ведущий разрабочик в Антиспаме@Mail.Ru, сейчас один из сооснователей компании MixBytes.io,...


Подробнее

Алгыс Иевлев Алгыс Иевлев

Cистемный разработчик C++, победитель олимпиад, разработчик имеющий признанный и проверенный опыт...


Подробнее

Программа

занятие Часы в ауд. + сам. работа

Лекция №1: Введение. Симметричные криптосистемы  
+ ДЗ №1

  • Симметричные и асимметричные криптосистемы
  • Критерии качества шифров, рассеивание и перемешивание информации, концепция абсолютно стойкого шифра, одноразовый блокнот, внутреннее устройство алгоритмов шифрования, сеть Фейстеля, SP-сеть, примеры алгоритмов: ГОСТ-28147-89 и AES
  • Режимы симметричного блочного шифрования, организация детерминированных цепочек блоков, генераторы псевдо-случайных чисел, гаммирование, поточные шифры 
  • Криптографическое хеширование, современные стандарты: SHA-256, Keccak, Blake2, требования к безопасности и атаки на алгоритмы
  • Использование хеширования в криптографических схемах: 
  • аутентификация (hash onions, web-сессии)
  • контроль целостности (filesystems, torrents)
  • content addressing (by hash), merkle tree, sparse merkle tree
  • antispam proof-of-work scheme by Adam Back
Домашнее задание №1: ДЗ1
сделать программу, равномерно и детерминировано выдающую номер варианта студентам группы на основе ФИО
4 ак. ч.

Смешанное занятие №1: Асимметричные криптосистемы  
+ ДЗ №2

  • общая характеристика асимметричной криптографии
  • односторонние функции, алгоритм выработки общего секретного ключа Диффи-Хеллмана
  • PKI, секретная передача информации, схема электронной подписи
  • основные ассиметричные криптосистемы: RSA, ECC
  • PKI, атаки man-in-the-middle, системы криптографических сертификатов, HTTPS, квалифицированная ЭЦП
  • клептографические атаки, post-quantum проблемы асимметричных криптосистем
Домашнее задание №2: ДЗ2
сделать программу, реализующую протокол работы автомобильного брелока (handshake, challenge, response) на основе ЭЦП (С++ или Rust)
4 ак. ч.

Смешанное занятие №2: Продвинутая криптография  
+ ДЗ №3

  • Threshold-протоколы, протокол разделения секрета Фиата-Шамира
  • BLS-подписи, 
  • протокол подбрасывания монеты
  • другие важные для децентрализованных систем протоколы
  • отказоустойчивая передача и хранение данных на основе избыточности, коды Рида - Соломона
  • Zero-knowledge протоколы, свойства: soundness, completeness, zero-knowledge. Протоколы знания секретной экспоненты, pairings на эллиптических кривых, кольцевые подписи, multi-party computations. Succinct proofs, zkSNARKS/STARKS
Домашнее задание №3: ДЗ3
создание программы, разделяющей приватный ключ ECDSA на N частей (строк) по схеме Фиата-Шамира и восстанавливающая его при предъявлении любых N / 2 + 1 частей
4 ак. ч.

Смешанное занятие №3: Peer-to-peer сети и сетевой консенсус  
+ ДЗ №4

  • Peer-to-peer (p2p) сети, историческая справка: p2p networks, (eDonkey, KaZaaa, BitTorrent), блокчейны
  • Общая схема работы децентрализованной сети, сообщения, маршруты, DHT (Distributed Hash Table)
  • Протокол Kademlia, метрики расстояния
  • IPFS и проблемы distributed storage
  • изоляция пиров, проблемы диагностики
  • mixed networks: TOR, i2p), Onion Routing, кольцевые подписи для построение анонимизированных маршрутов
  • p2p сеть, как транспорт для работы в децентрализованных сетях
  • связь name-систем, сертификатов, ЭЦП и p2p сетей для идентификации пользователей в децентрализованных сетях
  • проблем синхронизации узлов в отказоустойчивых системах: понятие логического времени на примере 2-commit/3-commit схем, paxos
  • консенсус и границы достижения консенсуса, общие черты систем с и без византийских узлов, связь с CAP теоремой
  • общие проблемы построения дец. сетей: системы репликации в СУБД, CAP теорема, порядок транзакций. 
Домашнее задание №4: ДЗ4
создать программу на C++/Rust, которая реализует DHT для трех хостов и реализует append/replace
4 ак. ч.

Смешанное занятие №4: Архитектура блокчейнов , сеть Bitcoin  
+ ДЗ №5

  • Задача ведения единого ledger в недоверенной p2p сети
  • Подписи транзакций, адреса в сети, примерный дизайн блокчейн-сети
  • Bitcoin, схема работы сети, алгоритм работы ноды, целостность блоков и работа с цепочкой
  • Bitcoin, структура блока. Требования к хешам блоков, сложность сети, nonce, майнинг
  • Bitcoin, структура транзакции, модель UTXO  based consensus networks модель передачи value, комиссия сети
  • pay-to-script адреса, Bitcoin Script, передача владения
  • Атаки на консенсус PoW сети: double spend, атака 51%, проблемы холодного старта
  • Bitcoin, Litecoin, Ethereum, Monero, требования к алгоритмам хеширования и их развитие, рассмотрение популярных PoW алгоритмов: SHA-256, Scrypt, Ethash, X11
  • Интересные реализации proof-of-work консенсусов, использующих другие варианты “work”: PrimeCoin, Storj, аудит сетевого трафика
Домашнее задание №5: ДЗ5
создать программу на C++/Rust, создающую и подписывающую транзакцию Bitcoin
4 ак. ч.

Смешанное занятие №5: Алгоритмы консенсуса  
+ ДЗ №6

  • Byzantine Fault Tolerance как основное требование к консненсусам современных блокчейнов, требования к safety и liveness
  • Задача византийских генералов, базовые примитивы для построения BFT консенсусов
  • алгоритм Practical BFT
  • Консенсусы типа proof-of-authority (PoA), безопасность и производительность PoA алгоритмов 
  • Валидаторы, орагнизация governance сетей, тестовые и приватные блокчейны
  • Консенсус типа proof-of-stake (PoS), наивный PoS, атаки nothing-at-stake, long-distance, консенсусы типа Delegated Proof Of Stake (DPoS)
  • Экономическая безопасность консенсусов типа proof-of-stake (PoS), slashing, sybil атаки, атаки большим стейком, механизмы защиты 
  • Примеры реальных алгоритмов типа proof-of-stake (PoS): рассмотрение вариантов DPoS в POA Ethereum, EOS, TON, Cosmos, Tezos
Домашнее задание №6: ДЗ6
создать программу на любом языке, получающую список валиадаторов и их стейков для любого публичного testnet (Polkadot, EOS, Cosmos, Free TON, etc) 
4 ак. ч.

Смешанное занятие №6: Смарт-контракты  
+ ДЗ №7

  • Исполнение кода в консенсусе: детерминизм, безопасность, особенности виртуальной машины, модели аккаунтов, балансов
  • Смарт-контракты: понятие, принципы работы, основные свойства, организация среды исполнения, ограничения на исполнение
  • Смарт-контракты Ethereum: cхема работы, виртуальная машина EVM, концепция газа, окружение контракта, storage, вызовы других контрактов и библиотек
  • Смарт-контракты EOS: cхема работы, WebAssembly для контрактов, концепция ресурсов, storage 
  • Runtime код Parity Substrate и Application Cosmos: принципы построения блокчейн-фреймворков
  • Безопасность систем смарт-контрактов: front-running, арифметические переполнения, типовые уязвимости кода контрактов и инфраструктуры, примеры атак, методики аудита кода, 
  • Средства автоматизированного аудита кода: Mythril, Slither, примеры аудитов и реальных ошибок
Домашнее задание №7: ДЗ7
просмотреть код контрактов заданного преподавателем проекта, найти место, реализующее определенную логику, и привести diff, изменяющий поведение смарт-контракта
4 ак. ч.

Смешанное занятие №7: Обзор сопровождающего блокчейны ПО  
+ ДЗ №8

  • Эксплуатация и тестирование блокчейн-сетей, 
  • Обзор существующих сетей и особенности инфраструктуры: Ethereum, EOS, Polkadot, POA Network, DAOBet, FreeTON
  • Описание типового ПО сопровождающего блокчейны:
    • oбозреватели блоков, рассмотрение Etherscan, BlockScout, основные компоненты обозревателя блоков,
    • криптовалютные кошельки, обзор решений: Electrum(Bitcoin), Metamask (Ethereum), Myst(Ethereum), Scatter(EOS)
    • мосты между блокчейнами: уровни безопасности и доверия, custodial, validator-based, atomic-swap based.
    • автоматические действия - стейкинг, автоконфирм мультисиг транзакций
  • Запуск и эксплуатация блокчейнов, проблемы тестирования производительности и устойчивости блокчейн-сетей, метрики мониторинга.
  • Инструменты для развертывания блокчейн-сетей, обзор инструментов для тестирования блокчейнов: Hyperledger Caliper, MixBytes Tank
Домашнее задание №8: ДЗ8
создание простейшего web-кошелька с единственной функцией “transfer” для произвольного токена в одном из популярных блокчейнов
4 ак. ч.

Смешанное занятие №8: Многоуровневые архитектуры и масштабирование блокчейнов  
+ ДЗ №9

  • Ограничения блокчейн-сетей: число валидаторов, время процессинга транзакций, tradeoffs speed/security
  • Масштабирование блокчейнов: шардинг, многоуровневые архитектуры, Lightning, Plasma, L2 solutions, проблемы построения
  • Рассмотрение двухуровненвых архитектур наиболее перспективных проектов многоуровневых блокчейнов:
    • Polkadot
    • Cosmos
    • Telegram Open Network
    • Ethereum 2.0
  • Succinct proofs и zkSNARKS/STARKS для масштабирования блокчейнов, Rollups
Домашнее задание №9: ДЗ9
эссе, обзор-аудит механизма шардирования одного из проектов
4 ак. ч.

Семинар №1: Практическое занятие Разработка под Ethereum, Solidity/EVM  
+ ДЗ №10

  • Практическое занятие: запуск standalone блокчейна на базе Ethereum, запуск нод, обозревателя блоков BlockScout
  • Solidity и EVM: более глубокое описание языка, основных типов, организации кода
  • Практическое занятие, Solidity: написание и запуск смарт-контракта и тестов к нему, развертывание тестового окружения, выкладка кода в блокчейн
  • Разработка контракта с элементами основных паттернов (token, multisig, oracle) совместно с аудиторией
  • Разработка простого DApp на Node.JS, взаимодествующего с разработанным контрактом
  • (опционально) Запуск и использование хранилища файлов на базе IPFS и создание DApp, использующего загрузку файлов.
Домашнее задание №10: ДЗ10
написание более сложного контракта, тестов и демонстрационного DApp в testnet Ethereum
4 ак. ч.

Семинар №2: Практическое занятие: Разработка под EOS, С++/WebAssembly  
+ ДЗ №11

Практическое занятие: написание и запуск смарт-контракта для сети EOS и тестов к нему, развертывание тестового окружения, выкладка в сеть
Домашнее задание №11: ДЗ11
Написание контракта EOS, реализующего один из популярных паттернов: оракул, мультисиг, commit-reveal и тестов к нему
4 ак. ч.

Семинар №3: Практическое занятие: Разработка под Parity Substrate, Rust/WebAssembly  
+ ДЗ №12

  • Конфигурирование и запуск своего блокчейна на базе Substrate, разработка и запуск собственного runtime для автоматизации  многосторонней сделки с использованием готовых модулей
  • Проведение процедуры обновления runtime
  • Запуск и подключение к разработанному блокчейну внешнего софта - обозревателя блоков, web-кошелька.
Домашнее задание №12: ДЗ12
Написание контракта для Parity Substrate на Rust, реализующего один из популярных паттернов: оракул, мультисиг, commit-reveal и тестов к нему
4 ак. ч.

Смешанное занятие №9: Паттерны и алгоритмы в блокчейн-разработке  

  • Identity и реестры участников сделок
  • Multisig и многосторонние сделки
  • Commit-reveal, фронтраннинг, проблемы саботажа протоколов
  • Оракулы и получения данных из внешнего мира
  • Голосования и аукционы
  • Prediction markets
  • Token Currated Registries
  • Bonding curves, liquidity-based pools
  • DEX, order matching
  • Publicly verifiable Random Beacon и генерация случайных чисел в блокейнах
  • zkSNARKs/STARKs в разработке смарт-контрактов
4 ак. ч.

Контрольное занятие №1: Защита проекта  


В течение курса студенты работают над  темой индивидуального проекта, в который входят:
  • полновесное тестирование одного из блокчейн решений  с написанием статьи - отчета
  • проектирование и разработка системы смарт-контрактов для автоматизации многосторонних сделок в одном из блокчейнов
  • проектирование и разработка блокчейна для корпоративных задач
  • портирование системы контрактов из одного блокчейна в другой
  • тема, предложенная студентами по итогам обучения 
4 ак. ч.

РАСПИСАНИЕ

Полное расписание