# Алгоритмы шифрования серийных номеров

Надежность ключей системы лицензирования основывается на применении асимметричных алгоритмов шифрования. В текущей версии реализован алгоритм RSA с длиной ключа от 1024 до 16384 бит. В будущих версиях планируется добавление других алгоритмов, основанных на ECC, а также схем, совмещающих симметричные и асимметричные шифры.

Используемый алгоритм уникален для каждого продукта. Ключи, созданные с одним алгоритмом, не подойдут к другому, поэтому смена алгоритмов после создания хоть одной лицензии не допускается. Модуль защиты, располагающийся в защищаемой программе, "знает" каким алгоритмом должен быть зашифрован серийный номер и не примет ключ, созданный другим алгоритмом или тем же алгоритмом, но с другими параметрами (скажем, с другой длиной ключа).

### Алгоритм RSA

Шифрование серийного номера алгоритмом RSA происходит по следующей схеме:

- Добавление случайных данных в начало номера - метод основывается на RFC2313, однако реализация немного отличается от описаной там. В начало серийного номера добавляютя байты: 00 02 NN...NN 00, где NN..NN - от 8 до 16 случайных ненулевых байт. Количество байт выбирается случайным, однако принимается во внимание длина серийного номера и максимальная вместительность ключа.
- Добавление случайных данных в конец номера - окончательное количество байт в серийном номере должно равняться количеству бит в ключах алгоритма, деленному на 8. Серийный номер дополняется до этого числа байт случайными данными. В результате получается следующий формат серийного номера: 00 02 NN..NN 00 DD..DD MM..MM, где NN - набор случайных ненулевых байтов, DD - исходный серийный номер, MM -набор случайных байтов (в т.ч. и нулевых). Суммарная длина последовательности должна равняться количеству бит, применяемому в алгоритме, деленному на 8.
- Шифрование - производится по стандатной схеме, реализованной во многих библиотеках, работающих с большими числами. Генератор на PHP содержит всю необходимую информацию в открытом виде.
- Упаковка - полученный после шифрования набор байт кодируется в base-64 - это и есть серийный номер, который отправляется покупателю.

© 2006-2015 Copyright VMProtect Software