Утверждение
Сертификат Signet содержит одно узкое, но сильное утверждение: владелец приватного ключа определённого адреса подписал определённое проверочное сообщение в определённый момент. Ничего больше. Это доказательство контроля над ключом, а не личности.
Доказано без необходимости доверия
- Этот адрес создал эту подпись для этого проверочного сообщения.
- В момент подписания подписант владел приватным ключом.
- Хеш сертификата существовал не позднее момента закрепления в блокчейне.
Не доказано
- Личность подписанта.
- Исключительность контроля, а также то, что ключ не был передан другим лицам или использован под принуждением.
- То, что подписант — клиент инициатора запроса: привязка к личности — задача процедуры KYC инициатора запроса.
Как это доказывается
Инициатор запроса формирует проверочное сообщение, содержащее одноразовый nonce, привязанный к одному конкретному запросу. Контрагент подписывает своим кошельком точные байты этого сообщения. Мы проверяем подпись по адресу в соответствующем блокчейне, затем хешируем полученный сертификат и закрепляем этот хеш в блокчейне через пакет Merkle — тем же контрактом Stamper, что используется во всём семействе продуктов BA, поэтому публичный верификатор проверяет его без изменений.
Nonce исключает повторное использование: подпись под проверочным сообщением одного запроса нельзя перенести на другой. Мы проверяем сохранённое сообщение побайтово, а не его повторно сформированную копию.
Криптография по блокчейнам
У каждого блокчейна свой стандарт подписи. Слой проверки устроен так, что новые блокчейны просто добавляются.
| Блокчейн | Стандарт | Проверка |
|---|---|---|
| Ethereum и EVM | EIP-191 personal_sign | Офлайн-восстановление подписанта |
| Кошельки на смарт-контрактах | EIP-1271 | Вызов isValidSignature в блокчейне |
| Bitcoin (SegWit / Taproot) | BIP-322 | Офлайн |
| Bitcoin (устаревший P2PKH) | BIP-137 signmessage | Офлайн |
| Litecoin, Dogecoin, Zcash (t1) | BIP-137 с префиксом сети | Офлайн |
| Solana | ed25519 | Офлайн |
| Polkadot, Kusama | sr25519 / ed25519 | Офлайн |
| TRON | TronWeb signMessageV2 (а также приложение TRON для Ledger) | Офлайн-восстановление подписанта |
Проверьте сами
Любой сертификат экспортируется в виде самодостаточного пакета доказательств. Любой может проверить его по публичным блокчейнам без учётной записи и без доверия к BA | Signet:
signatureявляется действительной подписьюchallenge, созданнойaddressв указанном блокчейне. Уже одно это доказывает контроль над ключом.- Заново вычислите
SHA-256канонического JSON сертификата; результат должен совпасть сcontentHash(листом Merkle). - Сверните лист с помощью
merkleProof(keccak256, отсортированные пары); результат должен совпасть сmerkleRoot. - Вызовите
timestamps(merkleRoot)в контракте Stamper в сети Polygon; ненулевое значение означает время, не позднее которого сертификат уже существовал. - При желании проверьте доказательство OpenTimestamps по блоку Bitcoin.
Что мы храним
Контрагент не является нашим клиентом и не имеет учётной записи. Мы собираем минимум: адрес, проверочное сообщение, подпись, метку времени и референс инициатора запроса. Мы никогда не запрашиваем и не принимаем приватный ключ или сид-фразу. Никакого профилирования по IP сверх того, что требуется для предотвращения злоупотреблений. Данные хранятся как комплаенс-запись инициатора запроса и удаляются по запросу.