tlock — Секреты, доступные по расписанию, или Как отправить сообщение в будущее

22 янв 2026

Репозиторий давно не обновлялся

Последнее обновление было 8 месяцев назад.

677
34
13
8 месяцев

Знакомая ситуация? Нужно передать важную информацию, но так, чтобы она стала доступна не прямо сейчас, а строго в определенный момент в будущем. Может быть, это условия сделки, которые должны раскрыться через месяц, или завещание, которое вступит в силу после определенной даты. А может, вы журналист, готовящий расследование, и хотите быть уверены, что ваши данные будут опубликованы, даже если с вами что-то случится, но не раньше установленного срока. До недавнего времени такие задачи требовали сложных юридических конструкций или полного доверия к посредникам. Но что, если бы мы могли поручить эту миссию криптографии?

Именно эту проблему решает проект tlock от команды drand. Это не просто очередная библиотека для шифрования, а настоящий инструмент для создания «временных замков» на ваших данных. Давайте разбираться, как это работает и почему это может изменить ваш подход к конфиденциальности.

Что такое tlock и кому он нужен?

tlock — это Go-библиотека и утилита командной строки (tle), которая позволяет шифровать данные таким образом, что расшифровать их можно будет только после наступления определенного времени или «раунда» в децентрализованной сети drand. Представьте себе сейф, который открывается не ключом, а по сигналу точного времени, транслируемому глобальной, устойчивой к цензуре сетью.

Кому это может быть полезно? Список довольно широк:

  • Юристы и нотариусы: Для создания цифровых завещаний, контрактов с отложенным исполнением или escrow-счетов, где средства или документы разблокируются по наступлении даты.
  • Журналисты и активисты: Для публикации компромата или чувствительной информации, которая должна быть раскрыта только в случае угрозы или по истечении определенного срока, без риска преждевременной утечки или блокировки.
  • Разработчики децентрализованных приложений (dApps) и DAO: Для реализации смарт-контрактов с временными условиями, например, для разблокировки токенов или голосований, которые становятся активными только после определенного раунда.
  • Компании: Для безопасного хранения планов запуска продуктов, финансовых отчетов или других конфиденциальных данных, которые должны быть раскрыты только в строго определенный момент.
  • Обычные пользователи: Для отправки «писем в будущее» себе или близким, которые станут доступны, например, на юбилей или через много лет.

Как это работает? Магия времени в криптографии

В основе tlock лежит концепция Timelock Encryption (шифрование с временной блокировкой) и использование сети drand. Что такое drand? Это децентрализованный сервис, который генерирует криптографически безопасные, непредсказуемые и проверяемые случайные числа через фиксированные интервалы времени (например, каждые 3 секунды). Каждый такой интервал называется «раундом», и у каждого раунда есть уникальный, публично доступный «маяк случайности» (randomness beacon).

Реклама

Когда вы шифруете данные с помощью tlock, вы указываете не конкретный ключ, а будущий раунд drand или длительность, через которую данные должны стать доступны. tlock использует этот будущий раунд для генерации части ключа. Полный ключ для расшифровки может быть получен только тогда, когда сеть drand сгенерирует случайное число для этого конкретного раунда. До этого момента данные остаются надежно зашифрованными.

Интересно, что для расшифровки не требуется, чтобы вы или кто-либо еще активно участвовал в процессе. Достаточно, чтобы сеть drand продолжала работать и публиковать свои «маяки». Это делает систему устойчивой к цензуре и манипуляциям, поскольку никто не может ускорить или замедлить процесс расшифровки.

Ключевые возможности: Секреты, доступные по расписанию

Проект tlock предлагает несколько удобных способов взаимодействия с этой технологией.

1. Шифрование по времени или номеру раунда

Вы можете указать либо конкретную длительность (например, «через 10 дней»), либо точный номер раунда drand, после которого данные станут расшифровываемыми. Это дает гибкость в планировании.

Пример шифрования файла data.txt с возможностью расшифровки через 20 секунд, используя CLI-утилиту tle:

$ tle -a -D 20s -o=encrypted_data.PEM data.txt

А вот так выглядит расшифровка, когда время пришло:

$ tle -d encrypted_data.PEM

Все просто: никаких сложных ключей для запоминания или передачи! Только файл и знание, что время пришло.

2. Интеграция с другими методами шифрования

tlock не заставляет вас отказываться от привычных инструментов. Наоборот, он отлично дополняет их! Вы можете использовать tlock как дополнительный слой защиты, «обернув» уже зашифрованные данные. Например, можно сначала зашифровать файл с помощью age (отличный инструмент для шифрования с паролем или публичным ключом), а затем применить tlock, чтобы этот зашифрованный age-файл стал доступен только в будущем.

Шифрование данных с паролем через age, а затем временная блокировка через tle:

$ cat data.txt | age -p | tle -D 30s -o encrypted_data

Расшифровка в обратном порядке:

$ cat encrypted_data | tle -d | age -d -o data.txt

Это дает мощную комбинацию: данные защищены паролем (или ключом), а сам доступ к ним ограничен по времени.

3. Go-библиотека для разработчиков

Для тех, кто хочет встроить Timelock Encryption в свои приложения, tlock предлагает удобную Go-библиотеку. Это позволяет создавать собственные инструменты или интегрировать функциональность в существующие системы, например, для управления доступом к данным в блокчейн-проектах или для автоматизации раскрытия информации.

Пример использования библиотеки для шифрования:

// Открываем файл для шифрования
in, err := os.Open("data.txt")
// ... обработка ошибок ...
defer in.Close()

// Подключаемся к сети drand (mainnet quicknet)
host := "https://api.drand.sh/"
chainHash := "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
network, err := http.NewNetwork(host, chainHash)
// ... обработка ошибок ...

// Указываем длительность, через которую файл можно будет расшифровать
duration := 10 * time.Second

// Определяем номер раунда, соответствующий этой длительности
roundNumber := network.RoundNumber(time.Now().Add(duration))

// Буфер для зашифрованных данных
var cipherData bytes.Buffer

// Шифруем данные
if err := tlock.New(network).Encrypt(&cipherData, in, roundNumber); err != nil {
	log.Fatalf("encrypt: %v", err)
	return
}

4. Мультиязычная поддержка

Помимо основной Go-реализации, существуют совместимые версии на других языках: tlock-js для JavaScript/TypeScript и tlock-rs для Rust. Это открывает двери для широкого спектра приложений и интеграций в различные экосистемы.

Под капотом: Немного о криптографии

Безопасность tlock опирается на несколько проверенных криптографических примитивов:

  • Схема Identity-Based Encryption (IBE): Позволяет шифровать данные для определенного «идентификатора» (в данном случае — для конкретного раунда drand) без необходимости предварительного обмена ключами.
  • Пороговая схема BLS-подписей (Threshold BLS): Используется в сети drand для генерации случайных чисел. Она гарантирует, что для создания каждого «маяка случайности» требуется согласие большинства участников сети, что делает ее устойчивой к атакам со стороны отдельных злоумышленников.
  • Гибридное шифрование с Chacha20Poly1305: tlock не шифрует весь файл напрямую IBE. Вместо этого он шифрует небольшой случайный симметричный ключ с помощью IBE, а уже этот ключ используется для шифрования основного содержимого файла с помощью быстрого и безопасного алгоритма Chacha20Poly1305. Это стандартная и очень эффективная практика в современной криптографии.

Важно отметить, что текущая реализация не является «квантово-устойчивой». Это означает, что теоретически, если будет создан достаточно мощный квантовый компьютер, он сможет взломать используемые алгоритмы. Однако, как отмечают разработчики, это маловероятно в ближайшие 5-10 лет, и tlock обеспечивает «долгосрочную безопасность» в этом временном горизонте.

Ключевой аспект безопасности — это доверие к сети drand. Если вы доверяете, что большинство узлов сети drand действуют честно, то вы можете быть уверены, что ваши данные не будут расшифрованы раньше срока. Основная сеть drand (League of Entropy) работает с 2019 года и считается очень надежной, в отличие от тестовых сетей, которые предназначены только для экспериментов.

Практические сценарии: Где пригодится tlock?

Давайте посмотрим на несколько реальных примеров, где tlock может быть незаменим:

  • Отложенное раскрытие информации: Журналист может зашифровать свои материалы и настроить их автоматическую расшифровку, если он не выйдет на связь в течение определенного времени. Это страховка от цензуры или физического воздействия.
  • Управление криптоактивами: В децентрализованных автономных организациях (DAO) можно зашифровать доступ к казначейству или важным функциям, чтобы они стали доступны только после завершения определенного этапа проекта или по истечении срока голосования.
  • Планирование событий: Организаторы мероприятий могут зашифровать детали расписания или списки спикеров, чтобы они раскрылись точно в момент анонса, избегая утечек.
  • Безопасные бэкапы: Можно зашифровать резервные копии важных данных, которые будут доступны только через несколько лет, обеспечивая их конфиденциальность на долгий срок.

Выводы: Стоит ли попробовать?

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

Если вы работаете с конфиденциальными данными, планируете отложенные публикации, создаете децентрализованные приложения или просто хотите добавить новый уровень контроля над информацией, tlock определенно заслуживает вашего внимания. Он открывает новые горизонты для того, как мы думаем о хранении и передаче секретов.

Попробуйте tle CLI-утилиту уже сегодня, чтобы ощутить магию шифрования по расписанию! И, конечно, загляните в репозиторий на GitHub, чтобы изучить исходный код и внести свой вклад в этот увлекательный проект.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.