<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link rel="Stylesheet" type="text/css" href= "../../default.css" /> <meta http-equiv="Content-Type" content= "text/html; charset=utf-8" /> <title>Алгоритмы шифрования серийных номеров</title> <style type="text/css"> </style> </head> <body> <h1>Алгоритмы шифрования серийных номеров</h1> <p>Надежность ключей системы лицензирования основывается на применении асимметричных алгоритмов шифрования. В текущей версии реализован алгоритм RSA с длиной ключа от 1024 до 16384 бит. В будущих версиях планируется добавление других алгоритмов, основанных на ECC, а также схем, совмещающих симметричные и асимметричные шифры.</p> <p>Используемый алгоритм уникален для каждого продукта. Ключи, созданные с одним алгоритмом, не подойдут к другому, поэтому смена алгоритмов после создания хоть одной лицензии не допускается. Модуль защиты, располагающийся в защищаемой программе, "знает" каким алгоритмом должен быть зашифрован серийный номер и не примет ключ, созданный другим алгоритмом или тем же алгоритмом, но с другими параметрами (скажем, с другой длиной ключа).</p> <h3>Алгоритм RSA</h3> <p>Шифрование серийного номера алгоритмом RSA происходит по следующей схеме:</p> <ul> <li><strong>Добавление случайных данных в начало номера</strong> - метод основывается на RFC2313, однако реализация немного отличается от описаной там. В начало серийного номера добавляютя байты: 00 02 NN...NN 00, где NN..NN - от 8 до 16 случайных ненулевых байт. Количество байт выбирается случайным, однако принимается во внимание длина серийного номера и максимальная вместительность ключа.</li> <li><strong>Добавление случайных данных в конец номера</strong> - окончательное количество байт в серийном номере должно равняться количеству бит в ключах алгоритма, деленному на 8. Серийный номер дополняется до этого числа байт случайными данными. В результате получается следующий формат серийного номера: 00 02 NN..NN 00 DD..DD MM..MM, где NN - набор случайных ненулевых байтов, DD - исходный серийный номер, MM -набор случайных байтов (в т.ч. и нулевых). Суммарная длина последовательности должна равняться количеству бит, применяемому в алгоритме, деленному на 8.</li> <li><strong>Шифрование</strong> - производится по стандатной схеме, реализованной во многих библиотеках, работающих с большими числами. Генератор на PHP содержит всю необходимую информацию в открытом виде.</li> <li><strong>Упаковка</strong> - полученный после шифрования набор байт кодируется в base-64 - это и есть серийный номер, который отправляется покупателю.</li> </ul><br /> <br /> <br /> <br /> <br /> <hr noshade="noshade" size="1" /> <div align="center"> © 2006-2015 Copyright VMProtect Software </div> </body> </html>