Семантика доказательства

Что доказывает сертификат Signet — точно.

Эта страница является частью продукта, а не маркетингом. Доказательство полезно, только если все одинаково понимают, что именно оно утверждает. Здесь приведены само утверждение, криптография, на которой оно основано, и способ проверить его, не доверяя нам.

Утверждение

Сертификат Signet содержит одно узкое, но сильное утверждение: владелец приватного ключа определённого адреса подписал определённое проверочное сообщение в определённый момент. Ничего больше. Это доказательство контроля над ключом, а не личности.

Доказано без необходимости доверия

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

Не доказано

  • Личность подписанта.
  • Исключительность контроля, а также то, что ключ не был передан другим лицам или использован под принуждением.
  • То, что подписант — клиент инициатора запроса: привязка к личности — задача процедуры KYC инициатора запроса.

Как это доказывается

Инициатор запроса формирует проверочное сообщение, содержащее одноразовый nonce, привязанный к одному конкретному запросу. Контрагент подписывает своим кошельком точные байты этого сообщения. Мы проверяем подпись по адресу в соответствующем блокчейне, затем хешируем полученный сертификат и закрепляем этот хеш в блокчейне через пакет Merkle — тем же контрактом Stamper, что используется во всём семействе продуктов BA, поэтому публичный верификатор проверяет его без изменений.

Nonce исключает повторное использование: подпись под проверочным сообщением одного запроса нельзя перенести на другой. Мы проверяем сохранённое сообщение побайтово, а не его повторно сформированную копию.

Криптография по блокчейнам

У каждого блокчейна свой стандарт подписи. Слой проверки устроен так, что новые блокчейны просто добавляются.

БлокчейнСтандартПроверка
Ethereum и EVMEIP-191 personal_signОфлайн-восстановление подписанта
Кошельки на смарт-контрактахEIP-1271Вызов isValidSignature в блокчейне
Bitcoin (SegWit / Taproot)BIP-322Офлайн
Bitcoin (устаревший P2PKH)BIP-137 signmessageОфлайн
Litecoin, Dogecoin, Zcash (t1)BIP-137 с префиксом сетиОфлайн
Solanaed25519Офлайн
Polkadot, Kusamasr25519 / ed25519Офлайн
TRONTronWeb signMessageV2 (а также приложение TRON для Ledger)Офлайн-восстановление подписанта

Проверьте сами

Любой сертификат экспортируется в виде самодостаточного пакета доказательств. Любой может проверить его по публичным блокчейнам без учётной записи и без доверия к BA | Signet:

  1. signature является действительной подписью challenge, созданной address в указанном блокчейне. Уже одно это доказывает контроль над ключом.
  2. Заново вычислите SHA-256 канонического JSON сертификата; результат должен совпасть с contentHash (листом Merkle).
  3. Сверните лист с помощью merkleProof (keccak256, отсортированные пары); результат должен совпасть с merkleRoot.
  4. Вызовите timestamps(merkleRoot) в контракте Stamper в сети Polygon; ненулевое значение означает время, не позднее которого сертификат уже существовал.
  5. При желании проверьте доказательство OpenTimestamps по блоку Bitcoin.

Что мы храним

Контрагент не является нашим клиентом и не имеет учётной записи. Мы собираем минимум: адрес, проверочное сообщение, подпись, метку времени и референс инициатора запроса. Мы никогда не запрашиваем и не принимаем приватный ключ или сид-фразу. Никакого профилирования по IP сверх того, что требуется для предотвращения злоупотреблений. Данные хранятся как комплаенс-запись инициатора запроса и удаляются по запросу.