Все записи

9 мин чтения

Proof of Existence или OpenTimestamps: какое проставление меток времени подходит для вашей работы?

OpenTimestamps отлично справляется с лаконичными метками времени, закреплёнными в Bitcoin. Label 309 добавляет запись подтверждения, нативную для Cardano, — с подписями, запечатыванием, получателями и пакетированием Merkle. Разбираемся, как выбрать.

Если вам нужна только компактная переносимая метка времени, которую каждый может проверить по публичному блокчейну, OpenTimestamps — отличный и сфокусированный выбор. Если же вам нужна более насыщенная запись подтверждения в блокчейне — такая, которая способна нести ещё и подписи, запечатанные (зашифрованные) данные, доставку получателям, указатели на контентно-адресуемое хранилище и пакетирование Merkle, — для этого создан Label 309. У них общее основное утверждение («эти байты существовали к моменту T»), но всё остальное вокруг него — разное.

Оба подтверждают существование во времени, не требуя доверия к серверу какой-либо компании. Различие — в форме: OpenTimestamps выдаёт небольшой внешний файл подтверждения, а Label 309 публикует структурированную запись в Cardano. В этой статье мы разберём, где уместно каждое из решений.

Что такое OpenTimestamps?

OpenTimestamps — это протокол и набор инструментов для проставления меток времени через блокчейн, чаще всего с закреплением в Bitcoin. Идея проста: вы вычисляете хеш своих данных, формируете подтверждение метки времени, и обязательство в итоге попадает в транзакцию Bitcoin. С этого момента любой может убедиться, что данные существовали раньше времени соответствующего блока.

Чтобы снизить затраты, OpenTimestamps использует календарные серверы, которые объединяют хеши множества пользователей в одну транзакцию Bitcoin, — так вам не нужна отдельная транзакция на каждый файл. Клиент создаёт переносимый файл подтверждения .ots, который путешествует рядом с вашими данными.

Именно в проверке проявляется модель доверия: вы проверяете подтверждение .ots относительно исходного файла и представления блокчейна Bitcoin, без доверенного сервера в этой цепочке. Официальный клиент отмечает, что для локальной проверки нужен узел Bitcoin Core — достаточно даже усечённого узла.

Это изящная, зрелая конструкция для минимальных, проверяемых независимо меток времени.

Что такое Label 309?

Label 309 — это открытый, нейтральный к поставщику стандарт записей Proof of Existence в Cardano. Запись находится в метаданных транзакции Cardano под меткой метаданных 309, и время блока этой транзакции служит свидетелем того, что зафиксированные байты существовали не позднее этого момента. Долговечный артефакт — это сам стандарт; веб-приложение CardanoWall, инструмент командной строки и SDK — лишь его эталонные реализации, производные от него.

Стандарт был подан в процесс CIP экосистемы Cardano и сейчас рассматривается редакторами CIP как предложение категории Metadata (открытый pull request пока проходит под предварительным номером). Обратите внимание: идентификатор в блокчейне — метка метаданных 309 — отделён от любого номера CIP, который ему в итоге присвоят.

Чтобы проверить подтверждение Label 309, любой человек получает транзакцию Cardano из публичного обозревателя блокчейна, заново собирает каноническую запись, проверяет её структуру, проверяет глубину подтверждения, проверяет любые подписи и пересчитывает зафиксированные хеши содержимого или доказательства включения Merkle. На самом базовом уровне это отвечает на тот же вопрос, что и OpenTimestamps. Но это не один файл подтверждения — это формат записи в блокчейне, спроектированный так, чтобы нести сразу несколько слоёв подтверждения. Более подробный разбор смотрите в материалах как работает Label 309 и что на самом деле попадает в блокчейн.

В чём реальное различие между ними?

OpenTimestamps создан специально для проставления меток времени. Label 309 создан для полноценной записи Proof of Existence.

OpenTimestamps подходит лучше, когда вопрос звучит так:

  • существовал ли этот файл раньше момента, заверенного в Bitcoin;
  • можно ли хранить небольшой файл подтверждения и проверить его позже;
  • можно ли проставить метку времени, не раскрывая содержимое файла;
  • могут ли календарные серверы пакетировать множество запросов, чтобы не платить за каждый файл.

Label 309 подходит лучше, когда вопрос звучит так:

  • существовал ли этот файл, манифест или корень Merkle к этому времени блока Cardano;
  • подписал ли запись конкретный ключ идентичности;
  • можно ли запечатать (зашифровать) сам файл и восстановить его позже;
  • можно ли зашифровать запись для конкретных получателей;
  • может ли одна запись зафиксировать тысячи или миллионы листьев сразу;
  • может ли публика проверить её без учётной записи CardanoWall и без доступа к нашим серверам.

Оба решения — это системы подтверждения, укоренённые в публичном консенсусе. Но их форма — а значит, и рабочие сценарии, которые они открывают, — различна.

Что OpenTimestamps делает особенно хорошо?

OpenTimestamps лучше всего проявляет себя в минимальном, публичном проставлении меток времени, построенном вокруг внешнего объекта подтверждения. Вы ставите метку времени для файла, храните подтверждение .ots рядом с ним, а позже обновляете подтверждение, как только обязательство подтверждается в Bitcoin. Календарная модель позволяет множеству пользователей разделить стоимость закрепления.

У него есть и здоровая узость. Он не пытается быть системой конфиденциальной доставки, стандартом происхождения медиа, экосистемой подписи ПО или юридическим нотариусом. Он проставляет метки времени — и делает эту единственную задачу чисто. Для тех, кто хочет получить метки времени на основе Bitcoin из проверенного временем инструмента, эта сфокусированность — преимущество.

Что Label 309 добавляет поверх метки времени?

Label 309 оборачивает утверждение о метке времени в структуру. Одна запись может включать:

  • один или несколько хешей содержимого на элемент;
  • указатели на контентно-адресуемое хранилище (ar:// для Arweave, ipfs:// для IPFS);
  • необязательные подписи уровня записи над всей записью;
  • конверт шифрования для запечатанного элемента, шифротекст которого хранится вне блокчейна;
  • ключевые слоты для каждого получателя, которые оборачивают ключ содержимого для выбранных получателей;
  • обязательства Merkle, которые связывают один корень в блокчейне с произвольно большим списком листьев вне блокчейна;
  • указатель замещения на более раннюю запись (только для добавления — он никогда не отзывает предыдущую запись);
  • именованные ключи расширений с пространствами имён, зарезервированные для будущих сопутствующих спецификаций.

Это становится важным, как только рабочему сценарию нужно нечто большее, чем «у меня есть файл подтверждения метки времени». Например, отправитель может запечатать файл, адресовать его получателю, опубликовать зашифрованный шифротекст по контентно-адресуемому URI — и при этом сохранить публичную запись проверяемой независимо (см. хешируйте, подписывайте, запечатывайте, делитесь). Высоконагруженный сервис ИИ может опубликовать один корень Merkle, который заменяет множество сгенерированных результатов, а конвейер CI/CD может подписать запись со свидетельствами о релизе, охватывающую целый набор манифестов (см. одна запись для тысяч файлов). Этим сценариям нужна более насыщенная запись, чем может нести голое подтверждение .ots.

Какое из решений децентрализованнее?

Здесь не место лозунгам, поэтому давайте точно скажем, что именно каждая модель просит вас принять на доверие.

OpenTimestamps закрепляет данные в Bitcoin, чья история proof-of-work — очень прочная основа для проставления меток времени. Подтверждение проверяется независимо, как только доступны нужные ему данные: полное подтверждение .ots проверяется целиком относительно локального узла Bitcoin, тогда как неполному всё ещё нужен календарный сервер, чтобы предоставить путь к заголовку блока.

Label 309 закрепляет данные в Cardano. Его верификация доверяет публичному блокчейну Cardano, байтам записи и хешу содержимого — и больше ничему. Для основного подтверждения она не требует доверия к CardanoWall или к какому-либо серверу, управляемому публикатором; верификатору нужны лишь ссылка на транзакцию, при необходимости — байты содержимого, и публичный обозреватель блокчейна, который он выбирает сам.

Ни одно из решений не является «более децентрализованным» в отрыве от контекста. Практический вопрос — какой блокчейн, инструментарий, форма подтверждения, модель затрат и экосистема подходят под ваш рабочий сценарий.

А что с приватностью — раскрывает ли какое-то из решений файл?

Оба могут проставить метку времени, не публикуя приватный файл, и у обоих есть честные ограничения.

Календарные серверы OpenTimestamps получают обязательства, а не файлы в открытом тексте. Но проект честно признаёт, что проставление меток времени раскрывает метаданные: создание нескольких меток времени подряд позволяет противнику связать их между собой, пакетирование файлов в одной команде порождает почти одинаковые операции над обязательствами, что наводит на мысль об общем авторе, а календарный REST API сейчас и не пытается обеспечить приватность. Одноразовые значения (nonce) не дают календарю узнать, для чего была проставлена метка времени, но окружающие метаданные не скрыты.

Label 309 для подтверждений только по хешу держит открытый текст вне блокчейна, а для запечатанных подтверждений шифрует открытый текст и хранит по контентно-адресуемому URI только шифротекст. По устройству блокчейн не раскрывает никаких публичных ключей получателей: получатель распознаёт сообщение лишь по успешному пробному расшифровыванию слота, поэтому никакого поля адресата для чтения нет. Чего он по-прежнему не может скрыть — это тайминг, оплату комиссии, обращения к шлюзу, поведение учётной записи и обычные операционные ошибки. Запечатанная запись оставляет открытый текст читаемым только держателям ключей; она не гарантирует анонимности, и получатель всегда может раскрыть открытый текст после того, как расшифрует его.

В обеих системах приватность — это свойство всего рабочего сценария, а не одного лишь формата подтверждения.

Можно ли использовать оба решения вместе?

Да — и для особо ответственных записей это может быть оправдано. Чтобы получить два независимых публичных пути фиксации времени, закрепите один и тот же манифест обоими способами:

  1. Создайте свой манифест релиза, набора данных, медиа или свидетельств.
  2. Вычислите хеш манифеста.
  3. Создайте подтверждение OpenTimestamps для хеша или файла.
  4. Опубликуйте подтверждение Label 309 для того же манифеста или для корня Merkle, который его содержит.
  5. Храните ссылки на оба подтверждения рядом с исходными свидетельствами.

Так вы получаете один путь, ориентированный на Bitcoin, и один — нативный для Cardano, структурированный по Label 309. Используйте оба, когда дополнительное резервирование стоит операционных накладных расходов; для большинства задач хватит и одного.

Когда стоит выбрать OpenTimestamps?

Выбирайте OpenTimestamps, когда задача — это голое проставление метки времени, а подтверждение, закреплённое в Bitcoin, — именно то, что вам нужно. Оно хорошо подходит для:

  • простых меток времени для файлов;
  • рабочих сценариев проставления меток времени в Git или PGP;
  • команд, которые уже используют верификацию Bitcoin и доверяют ей;
  • сценариев, где удобнее носить с собой внешний файл подтверждения .ots;
  • минимальных обязательств, которым не нужна более насыщенная запись в блокчейне.

Оно намеренно сфокусировано — и в этой сфокусированности весь смысл.

Когда стоит выбрать Label 309?

Выбирайте Label 309, когда самой записи подтверждения нужно нечто большее, чем метка времени. Он хорошо подходит для:

  • Proof of Existence, нативного для Cardano;
  • подписанных записей, которые привязывают авторство к подтверждению;
  • запечатанных (зашифрованных) файлов, зафиксированных в блокчейне;
  • конфиденциальной доставки конкретным получателям;
  • пакетирования Merkle для больших или повторяющихся наборов;
  • указателей на контентно-адресуемое хранилище;
  • путей CardanoWall через веб, API, CLI, SDK или самостоятельно размещаемый шлюз;
  • прикладных протоколов, которым нужен общий формат подтверждения под меткой метаданных 309.

Всё это — открытый исходный код на github.com/cardanowall, так что вы никогда не оказываетесь привязаны к инструментарию одного поставщика, чтобы прочитать или записать запись. См. Label 309 — это открытый исходный код и как самостоятельно проверить запись.

Что ни одна из систем не доказывает?

Ни одна из них сама по себе не доказывает истинность, право собственности, авторство, законность или качество. OpenTimestamps доказывает обязательство с меткой времени. Label 309 доказывает обязательство с меткой времени плюс любые необязательные слои, которые несёт запись. В любом случае подтверждение показывает, что конкретные байты существовали к публичному моменту времени, — но не кто прав, кому что принадлежит и законно ли содержимое. Сопутствующие утверждения по-прежнему требуют подписей, контекста идентичности, свидетельств о процессе, юридического анализа и человеческого суждения. Подробнее мы разбираем это в материале что подтверждение не доказывает.

Если коротко

OpenTimestamps — сильная, сфокусированная система проставления меток времени с закреплением в Bitcoin. Label 309 — формат записи Proof of Existence, нативный для Cardano, с местом для подписей, запечатанного сохранения, доставки получателям, контентно-адресуемого хранилища, пакетирования Merkle и будущих расширений. Выбирайте то, чья форма подтверждения отвечает на вопрос, на который вам действительно нужно ответить, — или используйте оба, когда резервирование того стоит.

Если вам нужен более широкий набор сравнений, см. Proof of Existence или Timestamp Authority и базовый материал что такое Proof of Existence.

Что почитать дальше

proof-of-existenceopentimestampstimestamping