Цифровые подписи и кошельки
В блокчейне нет банка, который проверит, что деньги тратишь именно ты. Эту роль играют цифровые подписи и пары ключей. Разберёмся, как это работает.
Напоминание: пара ключей
В асимметричной криптографии у тебя два ключа: приватный (секретный, только твой) и публичный (можно показывать всем). Они математически связаны. Что зашифровано/подписано одним — проверяется другим.
Кошелёк — это пара ключей
Криптокошелёк не хранит «монеты». Он хранит приватный ключ. Твой адрес — это, по сути, публичный ключ (его хеш). Кто владеет приватным ключом — тот владеет средствами на этом адресе. Поэтому потерять приватный ключ = потерять деньги навсегда.
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 монет Боре».
- Подписывает её своим приватным ключом.
- Любой узел сети проверяет подпись её публичным ключом.
- Подпись верна — значит, транзакцию правда создала Аня и её не подменили.
Никакого банка не нужно: математика заменяет доверие.
Вывод:
Кошелёк = пара ключей; владеешь приватным ключом — владеешь средствами. Цифровая подпись приватным ключом доказывает подлинность и целостность транзакции, а проверяют её публичным ключом. Так блокчейн обходится без банка.