Криптография для людей

Концепции: Why Crypto, Private & Public Key, Digital Signature, Key to Address, 256-bit Security, Elliptic Curves

:::section{mins=2} Зачем криптография :::

:::lead [[gloss:cryptography|Криптография]] превращает блокчейн из базы данных в систему права собственности. :::

:::p В банке личность подтверждает институт: паспорт, пин, SMS — и банк решает, авторизован ли перевод. Убери банк — и главный вопрос: кто авторизует перевод? :::

:::p Ответ: твой [[gloss:private key|приватный ключ]]. Из одного большого случайного числа математика выводит [[gloss:public key|публичный ключ]] и публичный идентификатор кошелька. Процесс односторонний: вперёд быстро, назад вычислительно невозможно. :::

:::p Когда ты подписываешь [[gloss:transaction|транзакцию]] приватным ключом, любая нода может проверить [[gloss:digital signature|цифровую подпись]] через публичный ключ — без паспорта и банка. Доверие заменяется математикой. :::

:::callout{icon=💡} Модель почтового ящика: адрес публичный (любой может отправить), но тратить может только владелец ключа. :::

:::keypoints{label="Ключевые моменты"}

  • [[gloss:private key|Приватный ключ]] — не пароль, а владение
  • [[gloss:public key|Публичный ключ]] можно показывать; приватный — никогда
  • [[gloss:digital signature|Подпись]] авторизует перевод без раскрытия ключа :::

:::quiz{id=q-1-4-s1 correct=2 explanation="Верно. Криптография заменяет доверенных посредников. Банк верифицирует личность и авторизует переводы. В блокчейне это делает приватный ключ — через математику, которую любая нода может проверить независимо."} Что криптография заменяет в блокчейне по сравнению с традиционной финансовой системой?

  • Шифрование данных транзакций
  • Необходимость интернет-соединения
  • Банк, нотариуса и верификацию личности — заменены математикой которую может проверить каждый
  • Сам блокчейн :::

:::section{mins=3} Приватный и публичный ключ :::

:::lead [[gloss:private key|Приватный ключ]] — случайное число, которым нельзя делиться. [[gloss:public key|Публичный ключ]] — вычисляется из приватного и им можно делиться. Обратное вычисление невозможно. :::

:::p Приватный ключ — «просто число», но астрономически большое: 256 бит — это примерно (10^{77}) вариантов. Кошелёк выбирает один случайно при создании. :::

:::p Из приватного ключа однонаправленная математика на [[gloss:elliptic curve|эллиптических кривых]] выводит публичный. Вперёд — быстро, назад — вычислительно неосуществимо. :::

:::p [[gloss:seed phrase|Seed-фраза]] — человекочитаемая запись того же секрета. Кто знает seed — фактически знает приватный ключ. :::

:::keypoints{label="Ключевые моменты"}

  • Никогда не делись [[gloss:private key|приватным ключом]] или [[gloss:seed phrase|seed-фразой]]
  • [[gloss:public key|Публичный ключ]] безопасно показывать: он не даёт права тратить
  • Случайность — не «деталь», слабая случайность ломает безопасность ключей :::

:::quiz{id=q-1-4-s2 correct=0 explanation="Верно. Публичный ключ предназначен для публичного использования — именно через него отправляют тебе средства. Математика однонаправленная: публичный выводится из приватного, но обратное вычислительно невозможно. Делись свободно."} Друг просит публичный ключ чтобы отправить тебе ETH. Безопасно ли поделиться?

  • Да — публичный ключ предназначен для публичного использования. Он не даёт доступа к средствам
  • Нет — из публичного ключа можно вывести приватный
  • Делись только последними 20 байтами (адресом), никогда полным ключом
  • Зависит от блокчейна :::

:::section{mins=2} Цифровая подпись :::

:::lead [[gloss:digital signature|Цифровая подпись]] доказывает, что именно ты авторизовал транзакцию — не раскрывая [[gloss:private key|приватный ключ]]. :::

:::p Когда нажимаешь «Send», кошелёк формирует данные транзакции, хеширует их и подписывает хеш приватным ключом (в Bitcoin/Ethereum используется [[gloss:ecdsa|ECDSA]]). :::

:::p По сети идёт подпись вместе с транзакцией. Любая нода проверяет подпись через [[gloss:public key|публичный ключ]]. Измени хоть один байт — подпись сразу становится недействительной. :::

:::callout{icon=💡} Аналогия с печатью: проверить может любой, создать — только владелец. :::

:::keypoints{label="Ключевые моменты"}

  • Приватный ключ остаётся на устройстве — наружу уходит только подпись
  • Подпись доказывает и авторизацию, и целостность данных
  • Подделать «от кого» без приватного ключа невозможно :::

:::quiz{id=q-1-4-s3 correct=2 explanation="Верно. Приватный ключ никуда не передаётся. Кошелёк подписывает локально и отправляет данные транзакции плюс подпись. Любая нода может проверить подпись используя публичный ключ — доказывая авторизацию без доступа к приватному ключу."} Ты нажимаешь «Отправить». Приватный ключ подписывает транзакцию. Что именно передаётся по сети?

  • Приватный ключ + данные транзакции
  • Публичный ключ + данные транзакции
  • Данные транзакции + подпись (приватный ключ никогда не покидает устройство)
  • Только подпись — ноды восстанавливают транзакцию из неё :::

:::section{mins=3} От ключа к адресу :::

:::lead [[gloss:private key|Приватный ключ]] → [[gloss:public key|публичный ключ]] → идентификатор кошелька. Каждый шаг односторонний. :::

:::p Идея такая: приватный ключ — число. На [[gloss:elliptic curve|эллиптической кривой]] есть базовая точка. Умножение базовой точки на число даёт публичный ключ. Вперёд легко, назад — сложнейшая задача (ECDLP). :::

:::p Чтобы получить короткий идентификатор, берут публичный ключ и пропускают через [[gloss:hash|хеш-функцию]]. Хеш — это отпечаток фиксированного размера, из которого нельзя восстановить исходные данные. :::

:::keypoints{label="Ключевые моменты"}

  • Публичный идентификатор не секрет — он выводится из секрета
  • [[gloss:hash|Хеши]] делают длинную математику удобной
  • Односторонность (вперёд легко, назад невозможно) — фундамент :::

:::quiz{id=q-1-4-s4 correct=1 explanation="Верно. Адрес публичный по дизайну — делись свободно. Знание чужого адреса не даёт никакого доступа к средствам. Можно только отправлять на него или смотреть баланс в блок-эксплорере."} Кто-то знает твой Ethereum адрес. Что они могут с ним сделать?

  • Получить доступ к средствам если знают seed-фразу
  • Отправить тебе ETH и видеть баланс — и ничего больше
  • Восстановить приватный ключ используя данные блокчейна
  • Подписывать транзакции от твоего имени :::

:::section{mins=3} Почему ключ невозможно подобрать :::

:::lead 256-битные ключи практически невозможно подобрать: перебор [[gloss:private key|приватного ключа]] недостижим для реальных вычислений. :::

:::p Пространство 256 бит — это (2^{256}) вариантов. Даже если проверять триллионы ключей в секунду, ты не приблизишься к успеху. :::

:::p Поэтому реальные риски — не «сломают математику», а человеческие ошибки: фишинг, malware, утечка [[gloss:seed phrase|seed-фразы]] или плохая случайность при генерации ключа. :::

:::keypoints{label="Ключевые моменты"}

  • Взлом — это чаще операционная безопасность, а не перебор 256 бит
  • Защищай [[gloss:seed phrase|seed-фразу]] как ключ от сейфа :::

:::quiz{id=q-1-4-s5 correct=3 explanation="Верно. Пространство ключей настолько огромно, что ломает человеческую интуицию. 2^256 ≈ 10^77 — сопоставимо с числом атомов в наблюдаемой Вселенной. Случайно попасть на существующий ключ статистически невозможно."} Почему практически невозможно угадать чужой приватный ключ даже со всеми компьютерами мира?

  • Приватные ключи хранятся зашифрованными на серверах
  • Угадывание требует знания личности владельца
  • Ключи автоматически меняются каждые 24 часа
  • 2^256 возможных ключей — больше атомов в наблюдаемой Вселенной. Даже все компьютеры за всё время не смогли бы их перебрать :::

:::section{mins=3} Эллиптические кривые :::

:::lead [[gloss:elliptic curve|Эллиптические кривые]] — математика ключей Bitcoin и Ethereum: публичный ключ легко получить из приватного, но обратное вычисление практически невозможно. :::

:::p Bitcoin и Ethereum используют одну кривую — secp256k1. Публичный ключ — точка на кривой, приватный — число, которым умножают базовую точку. :::

:::p Тебе не нужно считать вручную — достаточно помнить ключевое свойство: односторонность и есть причина, почему асимметричная криптография работает для владения. :::

:::keypoints{label="Ключевые моменты"}

  • Приватный → публичный быстро
  • Публичный → приватный — нерешаемая задача при реальных ресурсах
  • Это позволяет работать [[gloss:digital signature|цифровым подписям]] :::

:::quiz{id=q-1-4-s6 correct=0 explanation="Верно. Одна кривая означает одинаковый алгоритм генерации ключей — поэтому MetaMask и большинство кошельков поддерживают и Bitcoin, и Ethereum с одной seed-фразой. Адреса выглядят по-разному, но лежащая в основе математика идентична."} Bitcoin и Ethereum используют одну эллиптическую кривую (secp256k1). Какое практическое преимущество это даёт?

  • Один кошелёк может работать с обоими — одна генерация ключей, одна логика вывода адресов
  • Транзакции можно отправлять между двумя блокчейнами напрямую
  • Обе цепочки разделяют один бюджет безопасности
  • Приватные ключи взаимозаменяемы между двумя сетями :::

:::section{mins=2} Квантовая угроза :::

:::lead Квантовые компьютеры — потенциальная долгосрочная угроза для текущей криптографии, но не «взлом завтра». :::

:::p Достаточно мощный квантовый компьютер теоретически может атаковать математические предпосылки некоторых схем подписей. Поэтому развиваются post-quantum подписи. :::

:::p Практически вопрос в миграции: смогут ли сети обновиться до новых схем до того, как квантовые атаки станут реальными? :::

:::keypoints{label="Ключевые моменты"}

  • Квантовая угроза — это про будущую миграцию
  • Сегодня деньги чаще теряют из-за утечек ключей и скамов, а не из-за сломанной математики :::

:::quiz{id=q-1-4-s7 correct=0 explanation="Верно. Адрес — это хеш публичного ключа, а не сам ключ. Пока не отправлял транзакцию, публичный ключ никогда не раскрывался. Квантовому компьютеру нужен публичный ключ чтобы работать в обратном направлении к приватному. Нет публичного ключа = нет поверхности атаки."} У тебя есть Ethereum адрес, с которого никогда не отправлялись транзакции. Он безопаснее от квантовых атак чем тот с которого отправляли?

  • Да — пока не отправлял, публичный ключ скрыт. Квантовый компьютер не может атаковать то, чего не видит
  • Нет — сам адрес раскрывает достаточно информации
  • Разницы нет — квантовые компьютеры могут брутфорсить адреса напрямую
  • Только аппаратные кошельки защищены от квантовых атак :::