# Генераторы ключей

Зачем они нужны?

Помимо VMProtect, серийные номера могут генерироваться другими программами - генераторами. Это нужно для автоматизации выдачи номеров без участия человека. Покупатель покупает продукт, регистратор делает HTTP-запрос на сайт производителя, там запускается программа-генератор и на основе данных о покупателе формирует серийный номер. Номер отправляется покупателю и производителю. Производитель вносит его в базу VMProtect вручную, через окно импорта лицензий.

Принцип работы

Система лицензирования VMProtect построена на асимметричных алгоритмах, поэтому для генерации серийных номеров требуется секретный ключ продукта. Этот ключ можно экспортировать в окне свойств продукта и передать программе-генератору подходящим для нее способом.

Программа-генератор вызывается регистратором через HTTP-запрос. Генератор на PHP может быть вызван напрямую, генератор в виде DLL - косвенно, но алгоритм остается одним и тем же:

- Получить данные о пользователе от регистратора
- Добавить необходимую информацию, которую указал производитель
- Сформировать серийный номер
- Зашифровать его одним из алгоритмов
- Передать результат регистратору

Существуют ли готовые генераторы?

С системой лицензирования поставляется три готовых генератора серийных номеров в виде DLL, для платформы .Net и реализованный на PHP.

Можно ли сделать свой генератор?

Можно. Формат серийного номера находится здесь, алгоритмы шифрования серийного номера описаны здесь.

Насколько это безопасно?

В общем случае - вполне безопасно. Однако есть несколько рекомендаций, которым стоит следовать:

- Используйте протокол HTTPS - если ваш регистратор умеет делать запрос по HTTPS, а ваш хостинг позволяет отвечать на такие запросы, то этот вариант предпочтительнее обычного HTTP, т.к. поток данных будет зашифрован и сгенерированный серийный номер сможет получить только регистратор.
- "Спрячьте" генератор - убедитесь, что генератор нельзя вызвать случайно. Адрес www.site.com/keygen.php - плохая идея. А вот www.site.com/abc123.php - уже лучше. Убедитесь, что на генератор нет внешних ссылок, что он не показывается при просмотре содержимого директории сайта и не помещайте его в служебные файлы типа robots.txt. Чем меньше известно о расположении генератора - тем лучше. Как вариант - можно вынести генератор на другой сайт.
- Убедитесь, что вас вызывает регистратор - в программе, обрабатывающей запрос от регистратора, необходимо проверить IP-адрес вызывающей стороны. Обычно регистраторы публикуют список адресов, с которых они могут вызвать генератор. Найдите такой у вашего регистратора и добавьте проверку. В случае несовпадения адреса, лучше не выдавать понятных ошибок. Не возвращайте ничего или верните ошибку 404. Не давайте повода понять, почему вызов оказался неудачен.
- Проверяйте входные параметры - в настройках продукта у регистратора обычно дается возможность указать строку запроса, который регистратор будет делать для получения лицензии. Скажем, вы хотите получать имя пользователя, адрес его электронной почты, дату продажи и номер заказа. Убедитесь при получении запроса, что все параметры переданы и что все они имеют корректный формат. Не отвечайте на запросы с ошибками. О любых ошибках уведомляйте себя отправкой e-mail со всеми параметрами, с которыми был вызван генератор. Это поможет разобраться в причинах проблемы.
- Добавьте "пароль" - укажите в запросе, посылаемом регистратором, дополнительный параметр - пароль. С неочевидным именем и значением. Проверяйте его на принимающей стороне. В случае несовпадения или отсутствия - не генерируйте номер.

© 2006-2015 Copyright VMProtect Software