Цифровые подписи и кошельки

В блокчейне нет банка, который проверит, что деньги тратишь именно ты. Эту роль играют цифровые подписи и пары ключей. Разберёмся, как это работает.

Напоминание: пара ключей

В асимметричной криптографии у тебя два ключа: приватный (секретный, только твой) и публичный (можно показывать всем). Они математически связаны. Что зашифровано/подписано одним — проверяется другим.

Кошелёк — это пара ключей

Криптокошелёк не хранит «монеты». Он хранит приватный ключ. Твой адрес — это, по сути, публичный ключ (его хеш). Кто владеет приватным ключом — тот владеет средствами на этом адресе. Поэтому потерять приватный ключ = потерять деньги навсегда.

import hashlib, secrets

# Очень упрощённая модель: приватный ключ -> публичный -> адрес
private_key = secrets.token_hex(32)
public_key = hashlib.sha256(private_key.encode()).hexdigest()
address = hashlib.sha256(public_key.encode()).hexdigest()[:20]

print("Приватный ключ (СЕКРЕТ!):", private_key[:24], "...")
print("Публичный ключ:          ", public_key[:24], "...")
print("Адрес кошелька:          ", address)

Что такое цифровая подпись

Подпись доказывает две вещи: что транзакцию создал владелец приватного ключа (подлинность) и что её не изменили после подписания (целостность). При этом приватный ключ никому не раскрывается — проверка идёт публичным ключом.

Упрощённая модель подписи

import hashlib

# УЧЕБНАЯ модель (настоящие подписи используют ECDSA, не делай так в проде!)
def sign(message, private_key):
    return hashlib.sha256((private_key + message).encode()).hexdigest()

def verify(message, signature, private_key):
    expected = hashlib.sha256((private_key + message).encode()).hexdigest()
    return signature == expected

priv = "my-secret-key-123"
tx = "Аня -> Боре: 5 монет"
sig = sign(tx, priv)
print("Транзакция:", tx)
print("Подпись:   ", sig[:24], "...")
print("Подпись верна?", verify(tx, sig, priv))

# Жулик меняет получателя
print("Подменили получателя:", verify("Аня -> Жулику: 5 монет", sig, priv))

Изменили транзакцию — подпись перестала подходить. Сеть отвергнет такую транзакцию.

Как это собирается вместе

  • Аня создаёт транзакцию «отправить 5 монет Боре».
  • Подписывает её своим приватным ключом.
  • Любой узел сети проверяет подпись её публичным ключом.
  • Подпись верна — значит, транзакцию правда создала Аня и её не подменили.

Никакого банка не нужно: математика заменяет доверие.

Вывод:

Кошелёк = пара ключей; владеешь приватным ключом — владеешь средствами. Цифровая подпись приватным ключом доказывает подлинность и целостность транзакции, а проверяют её публичным ключом. Так блокчейн обходится без банка.
Проверьте себя
1. Что на самом деле хранит криптокошелёк?
AФизические монеты
BПриватный ключ, дающий контроль над средствами на адресе
CПароль от банка
DКопию всего блокчейна
2. Каким ключом проверяют цифровую подпись транзакции?
AПриватным ключом отправителя
BПубличным ключом отправителя
CПаролем получателя
DСлучайным числом
Поддержать проект