ELI5 · Часть 5 из 7
Кто может это прочитать, а что остаётся приватным

Иногда нужно доказать что-то не всему миру, а лишь нескольким людям. Соавторам открытия, о котором вы ещё не готовы объявить. Сторонам конфиденциального договора. Другу, которому вы доверяете секретный рецепт. Постоянная, защищённая от подмены отметка времени из блокчейна вам по-прежнему нужна. Просто читать содержимое посторонним ни к чему.
Эту задачу решают запечатанные подтверждения существования Label 309. Вы запираете содержимое так, что открыть его смогут лишь выбранные вами люди, и при этом всё равно закрепляете запись с отметкой времени в публичном реестре. Тут возникает закономерное беспокойство: реестр-то публичный. Заглянуть может любой. Так что же на самом деле видно со стороны?
Честный ответ: на удивление мало. Но всё-таки не совсем ничего — и Label 309 аккуратно проводит эту границу.
Представьте ряд запертых ящиков
Представьте, что вы кладёте запечатанное сообщение в стену сейфовых ящиков, мимо которой ходит кто угодно. На этой стене — ряд небольших одинаковых запертых ящиков, по одному на каждого получателя. В каждом лежит ключ, открывающий одно и то же сообщение, но открыть сам ящик можно лишь закрытым ключом одного конкретного человека.
Прохожий видит стену. Видит ряд ящиков. Может их пересчитать. А вот чего он не может — это открыть хоть один ящик, разглядеть, чей ключ к какому подходит, или прочитать хоть слово из того, что внутри.
Почти так и работает запечатывание в Label 309.
Что видит посторонний
- То, что нечто запечатано. Запись открыто помечена как несущая запертое содержимое, а не открытый текст. (Наблюдатель может даже распознать, обычное это шифрование или постквантовое, — но не более того.)
- Отметку времени — момент, в который сеть согласовала существование записи, с точностью до секунды. В этом и весь смысл: она задумана публичной.
- Цифровой отпечаток содержимого — тот же односторонний код, что и в обычном подтверждении существования. О самом содержимом он не говорит ничего, и обратно в него его не превратить.
- Примерное число получателей — сколько запертых ящиков на стене. Это единственное, что утекает наружу, и к этому мы ещё вернёмся.
Что остаётся скрытым
- Само содержимое. В реестр оно не попадает никогда — там лишь его отпечаток и запертые ящики, а зашифрованный файл лежит вне блокчейна. Без одного из подходящих закрытых ключей содержимое — просто шум.
- Кто получатели. Label 309 нигде в записи не указывает ни имени получателя, ни его открытого ключа. Никакой строки «кому:», которую можно было бы прочитать. Получатель узнаёт, что сообщение предназначено ему, лишь тихо примеряя свой ключ к каждому ящику, пока один не откроется. (Одна честная деталь мелким шрифтом: если у наблюдателя уже есть точный открытый адрес того, на кого он думает, классический замок X25519 всё равно не подтвердит ему догадку, — а вот постквантовый замок по умолчанию именно этого обещания не даёт. См. оговорку ниже.)
- Кто отправил — если вы решили не подписывать. Удостоверять авторство в Label 309 всегда необязательно. Откажетесь от подписи — и в записи не останется ничего, что связывало бы её с вами: в каждом ящике лежит только свежий одноразовый ключевой материал, не указывающий ни на кого.
Не менее важны и две более тонкие меры защиты:
- Получатели не видят друг друга. Открыв свой ящик, вы не узнаёте ничего об остальных. Вам не выяснить, кого ещё включили, а им — ничего о вас.
- Порядок перемешан. Перед публикацией ящики тасуются в случайном порядке. Поэтому даже место ящика — первый он или последний — ничем не выдаёт, кто «главный» и как устроена группа.
Одна честная оговорка
Число ящиков на виду. Кто именно ваши получатели, постороннему не определить, но пересчитать ящики и узнать, сколько их, он может. В большинстве случаев это безобидно — трое соавторов, две стороны договора. Но если щекотливо и само число, его можно смазать: добавить несколько лишних ящиков для маскировки или разбить отправку на отдельные записи. Label 309 не прячет это число за вас, так что, когда оно важно, ход за вами.
И ещё одна честность о сокрытии того, кому адресован ящик. Классический замок
X25519 доказуемо «приватен к ключу»: даже наблюдатель, держащий в руках список
открытых адресов предполагаемых получателей, не сможет проверить, какой ящик — и
есть ли вообще такой — адресован кому-то из них. Постквантовый замок по умолчанию
(X-Wing) скрывает от обычного постороннего ровно то же самое, однако Label 309
не заявляет для него эту более сильную гарантию: против противника, у которого
уже есть точные открытые ключи предполагаемых получателей, защиту от такой проверки
обещает только классический замок. Если именно эта угроза для вас актуальна,
выбирайте для печати классические ключи age1…; в остальных случаях верный выбор —
постквантовый вариант по умолчанию.
И ещё две небольшие оговорки, раз уж мы стремимся к точности. Отметка времени — с точностью до секунды, так что там, где щекотлива сама привязка ко времени, это тоже реальная утечка. И запись не в силах скрыть, какой кошелёк оплатил транзакцию Cardano: это данные самой транзакции, за пределами запечатанной записи, поэтому тем, кому нужно скрыть и это, придётся решать вопрос на уровне кошелька.
Стоит помнить и о том, что любой, кому вы ключ всё же дали, сможет читать сообщение, пока существует сохранённое содержимое. Запечатывание защищает вас от всего мира — но не от тех, кому вы сами решили довериться.
Надёжная защита и одна небольшая утечка — сказано прямо
Запечатывание в Label 309 скрывает содержимое, то, кто получатели, и, если вы не подписываете запись, даже отправителя. Единственное, что наблюдатель цепочки узнаёт наверняка, — это примерно сколько человек вы указали получателями. Одна оговорка мелким шрифтом: против противника, у которого уже есть точный открытый ключ предполагаемого получателя, самая сильная гарантия «нельзя даже подтвердить, что это он» заявлена только для классического замка X25519, но не для постквантового варианта по умолчанию. Полный разбор темы — в модели безопасности.