← Blog
Руководство9 июля 2026·7 мин. чтения

Как проверить лицензию программы офлайн не доверяя файлу на диске.

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

Почему «просто кэшировать последний результат» на самом деле не работает

Очевидное решение — запомнить последнюю успешную проверку в локальном файле или реестре и пропустить сетевой запрос в следующий раз. Это решает проблему офлайна, но ничего не проверяет — это просто строка на диске, которую любой пользователь с текстовым редактором может переключить с false на true. Она также не истекает аккуратно (скопированный файл работает вечно на второй машине) и не может сказать вам, когда она была реально в последний раз проверена. Вы обменяли «нет офлайн-поддержки» на «офлайн-поддержку, которая на самом деле не является проверкой» — файлу доверяют, но не проверяют его.

Почему написать настоящую офлайн-проверку самому сложнее, чем кэшировать флаг

Настоящая офлайн-проверка означает, что приложение должно уметь доказать, что лицензия действительна, не спрашивая сервер, используя только данные, которые могли прийти исключительно от этого сервера. Для этого нужна пара приватный/публичный ключ (сервер подписывает, приложение хранит только публичную половину), компактный подписанный payload с лицензионным ключом, ID устройства и сроком действия, который приложение может сверить с часами, способ сделать подделку обнаруживаемой — переверните один байт, и подпись обязательно должна стать недействительной — и решение о том, как долго устаревший, но подписанный результат остаётся доверенным, прежде чем приложение будет вынуждено снова связаться с сервером. Ничто из этого не экзотическая криптография, но правильно всё это собрать — проверять подпись ещё до разбора payload, проверять каждое утверждение внутри него, выбрать разумное окно истечения — это именно то, что легко один раз тонко сделать неправильно и никогда этого не заметить.

Подписанные аренды: сервер подписывает, приложение только проверяет

Именно это и делает офлайн-проверка SublimeKeys. Каждый вызов activate/verify возвращает аренду (lease) — небольшой токен, подписанный Ed25519, содержащий лицензионный ключ, ID устройства, ID продукта и срок действия, действительный 7 дней. Ваше приложение кэширует его локально и проверяет подпись по публичному ключу, встроенному прямо в ваш собственный бинарник — приватный ключ никогда не покидает наш сервер, так что на диске пользователя нет ничего, что можно отредактировать в действительную аренду. Подделанная аренда немедленно проваливает проверку подписи, ещё до того, как её содержимое вообще разбирается. Когда 7-дневное окно истекает, следующая проверка тихо выходит в онлайн, получает свежую аренду, и цикл повторяется — так что полностью офлайн-машина остаётся доказуемо лицензированной до недели за раз, а отозванная лицензия обнаруживается при следующем подключении машины к сети.

Как это добавить — 3 шага с официальными SDK

1pip install sublimekeys (Python) или npm install sublimekeys (Node.js/Electron) — оба SDK уже содержат публичный ключ и логику проверки
2Вызовите activate() один раз с ключом пользователя — сохраняет подписанную аренду локально, без дополнительного кода
3Вызывайте verify() при каждом последующем запуске — сначала проверяет закэшированную аренду полностью офлайн и обращается к API только тогда, когда истекает 7-дневное окно доверия

Что это вам реально даёт

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

Кому это реально нужно

✈️

Путешествующие пользователи

Консультанты, выездные инженеры — все, чей ноутбук проводит реальное время офлайн между перелётами и клиентами.

🏢

Заблокированные корпоративные сети

Машины за файрволами, блокирующими исходящие API-вызовы ко всему, что явно не в белом списке.

🐍

Настольные инструменты на Python

pip install sublimekeys — офлайн-проверка встроена в официальный SDK.

Приложения на Electron

npm install sublimekeys — та же проверка подписанной арендой, ноль нативных зависимостей.

🔒

Изолированные / регулируемые среды

Машины, которые вообще не должны выходить в интернет, только изредка синхронизироваться.

Попробовать SublimeKeys бесплатно →1 продукт · 25 ключей · Без банковской карты · keys.sublimearts.io

About

Patrick Chen — инди-разработчик, стоящий за Sublimearts.io. Встроил офлайн-проверку в SublimeKeys, поняв, что каждое настольное приложение, продаваемое путешествующим или корпоративным пользователям, рано или поздно упирается в одну и ту же стену «нет интернета».

Did you find this helpful?