Ключ продукта , также известный как программный ключ, серийный ключ или ключ активации , — это специальный программный ключ для компьютерной программы . Он подтверждает, что копия программы является оригинальной.
Ключи продукта состоят из серии цифр и/или букв. Эта последовательность обычно вводится пользователем во время установки программного обеспечения, а затем передается функции проверки в программе. Эта функция манипулирует последовательностью ключей в соответствии с математическим алгоритмом и пытается сопоставить результаты с набором допустимых решений.
Стандартная генерация ключей, когда ключи продукта генерируются математически, не полностью эффективна для предотвращения нарушения авторских прав на программное обеспечение , поскольку эти ключи могут распространяться. Кроме того, с улучшением связи в результате развития Интернета , более сложные атаки на ключи, такие как взломы (устранение необходимости в ключе) и генераторы ключей продукта , стали обычным явлением.
Из-за этого издатели программного обеспечения используют дополнительные методы активации продукта , чтобы проверить, что ключи являются как действительными, так и нескомпрометированными. Один метод назначает ключ продукта на основе уникальной особенности компьютерного оборудования покупателя, которую нельзя так легко скопировать, поскольку она зависит от оборудования пользователя. Другой метод включает требование однократной или периодической проверки ключа продукта с помощью интернет-сервера (для игр с онлайн-компонентом это делается каждый раз, когда пользователь входит в систему). Сервер может деактивировать немодифицированное клиентское программное обеспечение, представляющее недействительные или скомпрометированные ключи. Модифицированные клиенты могут обходить эти проверки, [1] но сервер все равно может отказать этим клиентам в информации или общении.
Ключи розничных продуктов Windows 95 имеют вид XXX-XXXXXXX. [2] Чтобы определить, действителен ли ключ, Windows 95 выполняет следующие проверки:
Если все проверки пройдены, ключ продукта действителен. Следовательно, ключ продукта 000-0000000 будет считаться действительным при этих условиях.
OEM-ключи Windows 95 имеют вид XXXXX-OEM-XXXXXXX-XXXXX.
Windows XP использует идентификатор установки, идентификатор продукта и ключ продукта для активации. [3] [4]
Идентификатор установки представляет собой 50-значную десятичную строку, которая разделена на 5 групп по шесть цифр в каждой с 2 цифрами в конце, что имеет вид XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XX. Идентификатор установки регенерируется каждый раз при запуске msoobe.exe.
Самая правая цифра в каждой группе идентификатора установки является контрольной цифрой.
Удаление контрольных цифр приводит к получению 41-значного десятичного кодированного 136-битного целого числа с множественной точностью , которое хранится в прямом порядке байтов как массив байтов .
Нижние 16 байтов идентификатора установки зашифрованы, тогда как самый значимый байт хранится в открытом виде. Криптографический алгоритм, используемый для шифрования идентификатора установки, представляет собой фирменный четырехраундовый шифр Фейстеля . Поскольку блок входных байтов, передаваемый шифру Фейстеля, делится на два блока одинакового размера, этот класс шифров обычно применяется к входным блокам, состоящим из четного числа байтов, в данном случае — нижние 16 из 17 входных байтов. Раундовая функция шифра — алгоритм дайджеста сообщения SHA-1 , зашифрованный четырехбайтовой последовательностью.
Пусть + обозначает конкатенацию двух байтовых последовательностей, ^ — операцию XOR , L и R — левую и правую восьмибайтовые входные половины для одного раунда, L' и R' — выходные половины указанного раунда, а First-8() — функцию, которая возвращает первые восемь байтов дайджеста сообщения SHA-1.
Тогда один раунд расшифровки выглядит следующим образом.
L' = R ^ First-8(SHA-1(L + Key))
Р' = Л
Результатом расшифровки являются 16 байт открытого текста, которые вместе с 17-м незашифрованным байтом будут интерпретироваться как четыре двойных слова в прямом порядке байтов, за которыми следует один байт.
H1 и H2 указывают конфигурацию оборудования, с которой связан идентификатор установки. P1 и P2, а также оставшийся байт P3 содержат идентификатор продукта, связанный с идентификатором установки.
Идентификатор продукта состоит из пяти групп десятичных цифр, например, AAAAA-BBB-CCIC-DDEEE.
Сопоставление идентификатора продукта в десятичном представлении и его двоичного кодирования в двойных словах P1 и P2 и байте P3 приведено в следующей таблице.
Ключ продукта имеет вид XXXXX-XXXXX-XXXXX-XXXXX-XXXXX. Каждый символ — это одна из следующих 24 букв и цифр: BCDFGHJKMPQRTVWXY 2 3 4 6 7 8 9
25 символов ключа продукта образуют кодировку по основанию 24 двоичного представления ключа продукта. Ключ продукта представляет собой целое число с множественной точностью длиной около 115 бит, которое хранится в порядке байтов little endian в массиве из 15 байт. Из этих 15 байтов наименее значимые четыре байта содержат исходный ключ продукта в порядке байтов little endian. Наименее значимый бит удаляется путем сдвига этого 32-битного значения влево на одну позицию бита. Одиннадцать оставшихся байтов образуют цифровую подпись, позволяющую проверить подлинность ключа продукта с помощью жестко закодированного открытого ключа.
Для получения компонента CCCIS добавляется контрольная цифра, которая выбирается таким образом, чтобы сумма всех цифр, включая контрольную цифру, делилась на семь. Для проверки ключа продукта доступно более одного открытого ключа . Если проверка с первым открытым ключом не удалась, пробуется второй и т. д. Компонент DD идентификатора продукта указывает, какой из открытых ключей в этой последовательности был успешно использован для проверки ключа продукта.
Конфигурация оборудования, связанная с идентификатором установки, представлена двумя двойными словами H1 и H2. Для этой цели двойные слова делятся на двенадцать битовых полей.
Если стыковка возможна, механизм активации будет более терпимым по отношению к будущим модификациям оборудования. Если присутствует компонент оборудования, соответствующий одному из оставшихся десяти битовых полей, соответствующее битовое поле содержит ненулевое значение, описывающее компонент. Значение ноль отмечает компонент оборудования как отсутствующий. Все компоненты оборудования идентифицируются строкой идентификации оборудования, полученной из реестра. Хеширование этой строки дает значение для соответствующего битового поля.
Результат хэширования получается путем подачи строки идентификации оборудования в алгоритм дайджеста сообщения MD5 и выбора необходимого для битового поля количества бит из предопределенных мест в результирующем дайджесте сообщения. Для разных битовых полей используются различные предопределенные места. Кроме того, нулевой результат хэширования исключается путем вычисления . Где BitFieldMax — это максимальное значение, которое может быть сохранено в рассматриваемом битовом поле, например, 1023 для 10-битового битового поля, а 'x % y' обозначает остаток от деления x на y. Это приводит к значениям от 1 до BitFieldMax. Полученное значение затем сохраняется в соответствующем битовом поле.
Битовое поле, связанное с объемом оперативной памяти, доступной операционной системе, рассчитывается иначе, чем другие битовые поля, как показано в таблице.
Обратите внимание, что объем оперативной памяти извлекается путем вызова функции GlobalMemoryStatus(), которая сообщает на несколько сотен килобайт меньше, чем физически установленный объем оперативной памяти. Таким образом, 128 МБ оперативной памяти обычно классифицируются как «между 64 МБ и 127 МБ».
wpa.dbl — это зашифрованная RC4 база данных, в которой хранятся информация об истечении срока действия, идентификатор подтверждения активированной установки, значения битовых полей, представляющие текущую конфигурацию оборудования, и значения битовых полей, представляющие конфигурацию оборудования на момент активации продукта и т. д. Текущая конфигурация оборудования автоматически обновляется каждый раз при изменении конфигурации оборудования, чтобы отразить изменения, в то время как значения, представляющие конфигурацию оборудования на момент активации продукта, фиксируются. При оценке необходимости повторной активации значения битовых полей текущей конфигурации оборудования сравниваются с конфигурацией оборудования на момент активации.
Сравниваются все битовые поля, за исключением неиспользуемого поля и поля «dockable». Если более трех из этих десяти битовых полей изменились в текущей конфигурации оборудования с момента активации продукта, требуется повторная активация.
Если бит 31 из H2 указывает, что наш компьютер поддерживает док-станцию, сравниваются только семь из десяти битовых полей, упомянутых выше. Битовые поля, соответствующие хост-адаптеру SCSI, контроллеру IDE и графической плате, опускаются. Из этих оставшихся семи битовых полей только до трех могут изменяться без необходимости повторной активации.
Некоторые из наиболее эффективных защит ключей продукта являются спорными из-за неудобств, строгого соблюдения, суровых штрафов и, в некоторых случаях, ложных срабатываний. Некоторые ключи продукта используют бескомпромиссные цифровые процедуры для обеспечения соблюдения лицензионного соглашения.
Ключи продукта несколько неудобны для конечных пользователей. Их не только нужно вводить каждый раз при установке программы, но пользователь также должен быть уверен, что не потеряет их. Потеря ключа продукта обычно означает, что программное обеспечение бесполезно после удаления, если только перед удалением не используется приложение для восстановления ключей (хотя не все программы поддерживают это). [5]
Ключи продукта также представляют новые способы, с помощью которых распространение может пойти не так. Если продукт поставляется с отсутствующими или недействительными ключами, то сам продукт бесполезен. Например, все копии Splinter Cell: Pandora Tomorrow изначально отправлялись в Австралию без ключей продукта. [6]
Существует множество случаев постоянного запрета, наложенного компаниями, обнаружившими нарушения в использовании. Обычно онлайн-система немедленно помещает в черный список учетную запись, пойманную на использовании кряков или, в некоторых случаях, читов. Это приводит к постоянному запрету. Игроки, желающие продолжить использование программного обеспечения, должны повторно его купить. Это неизбежно привело к критике мотивов постоянного запрета. [ необходима цитата ]
Особенно спорной является ситуация, которая возникает, когда ключи нескольких продуктов связаны друг с другом. Если продукты зависят от других продуктов (как в случае с пакетами расширения ), компании обычно запрещают все связанные продукты. Например, если поддельный ключ используется с пакетом расширения, сервер может запретить легитимные ключи от оригинальной игры. Аналогично, с сервисом Steam от Valve все продукты, которые купил пользователь, привязаны к одной учетной записи. Если эта учетная запись заблокирована, пользователь потеряет доступ ко всем продуктам, связанным с той же учетной записью. [7]
Этот «мультибан» весьма спорен, поскольку он запрещает пользователям использовать продукты, которые они законно приобрели и использовали. [ необходима цитата ]
Баны применяются серверами немедленно после обнаружения кряков или читов, обычно без вмешательства человека. Иногда законные пользователи ошибочно считаются нарушившими лицензию и банятся. В крупных случаях ложных срабатываний они иногда исправляются (как это произошло в World of Warcraft . [8] ) Однако отдельные случаи могут не получить никакого внимания. [ необходима цитата ]
Распространенной причиной ложных срабатываний (как в случае с World of Warcraft выше) являются пользователи неподдерживаемых платформ. Например, пользователи Linux могут запускать приложения Windows через такие уровни совместимости, как Wine и Cedega . Эта комбинация программного обеспечения иногда активирует античит-программное обеспечение игрового сервера, что приводит к бану, поскольку Wine или Cedega являются уровнем совместимости API Windows для Linux, поэтому сервер игры считает их сторонним (читерским) программным обеспечением. [9] [ необходима цитата ]