← 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 продукт · 100 ключей · Без банковской карты · keys.sublimearts.io

About

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

Did you find this helpful?