К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Подпись (signature)

Криптографическое доказательство того, что сообщение или транзакция были созданы держателем приватного ключа. В TON используется Ed25519, подпись длиной 64 байта; проверяется любым узлом сети по публичному ключу.

Синонимы: signature, цифровая подпись, ed25519 signature

Подпись — короткая строка байтов, которую кошелёк добавляет к каждой транзакции, чтобы валидатор сети мог убедиться: транзакция действительно отправлена с этого адреса. В TON применяется схема Ed25519 — подпись 64 байта, генерируется быстро, проверяется быстро, и не зависит от качества ГСЧ при проверке (deterministic signing).

Как создаётся

Алгоритм Ed25519 принимает сообщение и приватный ключ, выдаёт 64-байтовую подпись:

signature = Ed25519_sign(private_key, message)

В TON «сообщение» — это хэш cell с описанием внешней транзакции (тип получателя, сумма, payload). Подпись прикрепляется к external message, которое отправляется в mempool.

Как проверяется

Любой узел сети (валидатор, lite-сервер, обычный observer) выполняет:

ok = Ed25519_verify(public_key, signature, message)

Если ok — транзакция считается аутентичной и попадает в блок. Если нет — отбрасывается.

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

Чем отличается от других схем

  • secp256k1 (Bitcoin, Ethereum). Кривая другая, подпись 65 байт (с recovery byte), требует качественного ГСЧ при подписи.
  • secp256r1 (NIST P-256). Используется в Apple Secure Enclave и Yubikey.
  • Ed25519 (TON). Современная безопасная кривая Curve25519, deterministic, side-channel resistant. По сути best practice 2020-х.

Ловушки

Подпись над «голым» байтовым массивом можно использовать в нескольких контекстах сразу — это уязвимость. В TON правильно подписывать хэш ячейки (cell hash), включающей контекст (адрес отправителя, тип сообщения, seqno). Без seqno возможна повторная отправка той же транзакции (replay-attack).

Никогда не подписывайте сторонние «messages» вне кошелька. Если dApp в TON Connect просит подписать «verification string», убедитесь, что строка имеет внутренний домен — иначе подпись могут переиспользовать в другом контексте.

См. также