Криптография с открытым ключом: как подпись доказывает, что это вы
Как работают закрытый и открытый ключи, откуда берётся адрес, что такое цифровая подпись ECDSA и почему кошельку не нужен пароль. С наглядным примером.
В этой статье
Когда вы нажимаете «Подтвердить» в кошельке, вы не вводите пароль. Вместо этого кошелёк создаёт цифровую подпись. Она доказывает, что действие одобрил владелец ключа, и при этом сам ключ остаётся секретным. За этим стоит одна из красивейших идей в математике - криптография с открытым ключом.
Идея: замок, который закрывают все, а открывает один
Представьте почтовый ящик с щелью: бросить письмо может кто угодно, а достать - только владелец ключа. В асимметричной криптографии у каждого участника пара ключей:
- Закрытый (секретный) ключ - знает только владелец.
- Открытый ключ - известен всем, из него получают адрес.
Эти ключи математически связаны, но связь односторонняя: из закрытого ключа открытый получить легко, а наоборот - невозможно за разумное время.
Что такое закрытый ключ
Закрытый ключ - это просто очень большое случайное число: 256 бит, то есть около 10^77 вариантов. Это сопоставимо с оценкой числа атомов во Вселенной, поэтому угадать чужой ключ перебором нельзя. Это число и есть «доступ к деньгам»: кто его знает, тот распоряжается адресом. В кошельках ключ выводится из seed-фразы, которую вы записываете при создании (как не потерять).
От ключа к адресу
В Ethereum и Bitcoin используется эллиптическая кривая secp256k1. Путь от секрета к адресу такой:
- Закрытый ключ
k(число). - Открытый ключ = точка на кривой, полученная умножением:
K = k × G, гдеG- общая для всех «базовая точка». Результат - 64 байта. - Адрес = последние 20 байт хеша от открытого ключа (что такое хеш):
keccak256(K).
Вот почему адрес можно смело показывать всем. Из него нельзя вычислить открытый ключ, а тем более закрытый. Это как номер банковского счёта, а не как пароль.
Цифровая подпись
Подпись отвечает на вопрос: «Как доказать, что сообщение написал владелец ключа, не показывая ключ?»
Схема ECDSA:
- Отправитель берёт хеш сообщения или транзакции.
- Вычисляет подпись из хеша и закрытого ключа. Подпись - пара чисел
(r, s)плюс «подсказка»v, всего 65 байт. - Любой может проверить: по подписи и хешу вычисляется открытый ключ (и адрес) подписавшего. Совпал с адресом отправителя - подпись настоящая.
Важные свойства:
- Подпись привязана к сообщению. Изменили одну букву - подпись перестаёт подходить.
- Подделать её нельзя без закрытого ключа.
- Закрытый ключ остаётся секретом, сколько бы подписей вы ни выпустили.
Пример: подпись в сделке
Анна создаёт сделку. Её кошелёк:
- формирует транзакцию: «вызвать
createOfferс такими-то параметрами»; - считает хеш транзакции;
- подписывает его ключом Анны;
- отправляет транзакцию с подписью в сеть.
Узлы сети не знают ключа Анны, но по подписи видят: отправитель - адрес Анны, и параметры не менялись. Поэтому контракт может доверять тому, что msg.sender - именно Анна: подпись проверена до того, как код контракта начал исполняться.
Что подписывают, кроме транзакций
- Сообщения для входа («Sign-In with Ethereum»): вы доказываете сайту, что владеете адресом, без пароля и без отправки транзакции.
- Структурированные данные (стандарт EIP-712): кошелёк показывает читаемую форму - получатель, сумма, срок (подробнее о подписях).
- Разрешения (permit): подпись, позволяющая контракту списать токены без отдельной транзакции
approve(об этом).
Чем подпись отличается от шифрования
Подпись не прячет содержимое - она подтверждает авторство и целостность. Шифрование, наоборот, прячет содержимое от посторонних. Блокчейн в основном использует подписи: всё публично, но подделать нельзя.
Что почитать дальше
Узнайте, как из одной фразы получаются все ваши ключи: HD-кошельки и seed-фраза. Или вернитесь к практике: чек-лист безопасности кошелька.
Читайте также
- 1 · Основы
Криптокошелёк, адрес и seed-фраза: как не потерять деньги
Как устроен криптокошелёк: закрытый и открытый ключ, адрес, seed-фраза, виды кошельков и главные правила безопасности для новичка.
3 мин чтения - 3 · Под капотом
Подписи в Ethereum: ECDSA, ecrecover, personal_sign и EIP-712
Как устроена подпись (r, s, v), как контракт проверяет её через ecrecover, чем различаются personal_sign и EIP-712, что такое permit и EIP-1271.
3 мин чтения
Упоминается в статьях
- Что такое блокчейн простыми словами
- Что такое криптовалюта и откуда берутся монеты
- Bitcoin и Ethereum: в чём разница и почему сделки строят на Ethereum
- Хеш-функции простыми словами: отпечаток данных, который нельзя подделать
- Криптокошелёк, адрес и seed-фраза: как не потерять деньги
- dApp и DeFi: децентрализованные приложения и финансы без посредников
- Словарь терминов: блокчейн, кошельки, смарт-контракты и эскроу от A до Я
- Анатомия транзакции: nonce, газ, mempool и подтверждения
- Чек-лист безопасности кошелька: 15 правил, которые защитят ваши деньги
- Фишинг и отравление адреса: как работают атаки и как от них защититься
- Мультиподпись и таймлок: как управлять контрактом без единой точки отказа
- Аккаунты и состояние Ethereum: EOA, контракты и мировое состояние
- Подписи в Ethereum: ECDSA, ecrecover, personal_sign и EIP-712
- Шаблоны контроля доступа в смарт-контрактах: owner, роли и стороны сделки
- HD-кошельки: как из 12 слов получаются все ваши ключи (BIP-39, BIP-32, BIP-44)
Готовы попробовать?
Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.

