Что такое ключ программного обеспечения

Обновлено: 02.07.2024

Если потерян регистрационный ключ или серийный номер программы, восстановить данные бывает крайне затруднительно. Утилиты, о которых пойдет в речь в обзоре, позаботятся о создании резервной копии всех ключей и серийных номеров приложений, установленных в системе

  • Product Key Explorer 2.4.9
  • Recover Keys 4.0
  • KeysRecover
  • Belarc Advisor 8.1m
  • LicenseCrawler 0.0.42
  • SoftKey Revealer 2.2.4
  • Заключение

Потеря ключей для регистрации программы иногда становится проблемой гораздо большей, чем если бы был потерян ключ от квартиры. В последнем случае можно дождаться других членов семьи и открыть входную дверь их дубликатом, или, в крайнем случае, даже выбить дверь и вставить новый замок. Но если потерян регистрационный ключ или серийный номер от какой-нибудь программы, восстановить данные лицензии бывает крайне затруднительно. Причем в потере серийного номера не обязательно виноват сам пользователь. Разработчики ПО часто приклеивают к продаваемым коробочным версиям ярлыки с указанием серийного номера, а со временем такой номер может затереться или отклеиться. Чтобы избежать потери лицензионных данных, необходимо заранее сделать резервную копию всех ключей и серийных номеров программ, установленных в системе.

О программах, которые помогают автоматизировать этот процесс, мы и расскажем в сегодняшнем обзоре.

  • разработчик: Nsasoft
  • размер дистрибутива: 1,54 Мб
  • распространение: shareware
  • русский интерфейс: нет

Эта небольшая утилита – один из самых универсальных инструментов для восстановления регистрационной информации. Product Key Explorer поддерживает более тысячи различных программ. С помощью этой утилиты можно находить серийные номера к таким популярным приложениям, как Microsoft Office, VMware Workstation, CyberLink PowerDVD, Winamp, ZoneAlarm, Borland Delphi и пр.


После непродолжительного анализа системного реестра, Product Key Explorer составляет таблицу, в которой показывает приложения и серийные номера, используемые этими программами. При этом полученную информацию о ключах к программам можно не только сохранить или вывести на печать. Product Key Explorer может использовать эти данные для составления специального файла реестра, который очень удобно использовать при последующей переустановке системы с программами. Достаточно будет выполнить импорт такого файла, и в реестр будут добавлена информация о регистрационных данных всех приложений.

Для извлечения и расшифровки нужных данных из реестра необходимо обладать правами администратора. Но даже если программа запущена другим пользователем, с менее широкими правами, в настройках программы можно указать параметры учетной записи администратора – при этом будет открыт полный доступ к реестру.

  • разработчик: Nuclear Coffee
  • размер дистрибутива: 4,56 Мб
  • распространение: shareware
  • русский интерфейс: есть

Одна из особенностей программы Recover Keys – возможность сканирования как локального компьютера, так и удаленного. Эта функция программы работает лишь в том случае, если пользователь обладает соответствующими правами администратора.

Помимо серийного номера, Recover Keys идентифицирует ID программы, а также некоторую дополнительную информацию о регистрации – имя пользователя, на которого выполнена регистрация, и название компании.

В отличие от других аналогичных утилит, данная программа позволяет уточнить область поиска, указав разделы системного реестра, которые будут сканироваться - HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT и HKEY_USERS. Кроме этого, в настройках программы можно задать фильтр, выбрав из доступного списка приложений те, к которым необходимо найти серийный номер. В перечне программ, для которых данная утилита может считать из реестра ключ, продукция компаний Autodesk, Adobe, Sony, Norton и многих других. Полный список поддерживаемых приложений всегда можно просмотреть на официальном сайте.


В программе Recover Keys имеется удобный поиск, с помощью которого можно быстро найти ключ к определенной программе. Результат поиска информации об установленных приложениях можно сохранить в большое количество форматов: HTML, CSV, TXT, XML, XLS, DOC, RTF и PDF.

У этой программы существует также бесплатная версия, которая называется Magical Jelly Bean Keyfinder. Она может восстановить ключи примерно для трехсот приложений (Recover Keys работает более чем с двумя тысячами), не работает с Windows 7, Office 2010 и продуктами Adobe. В ней не предусмотрены возможности сканирования удаленных компьютеров, а отчеты можно сохранять лишь в двух форматах – TXT и CSV.

  • разработчик: Keys Recover
  • размер дистрибутива: 156 Кб
  • распространение: shareware
  • русский интерфейс: нет


Программа может сохранять текстовый файл с ключами или генерировать файл-отчет FoundKeys.HTML.

  • разработчик: Belarc
  • размер дистрибутива: 2,23 Мб
  • распространение: бесплатно
  • русский интерфейс: нет

Belarc Advisor выполняет анализ системы и выводит детальную информацию о компьютере – показывает список установленного ПО, отображает перечень установленных обновлений Windows, а также предоставляет информацию о конфигурации компьютера (включая данные о BIOS, носителях, материнской плате, контроллерах и пр.), показывает сведения о сетевых подключениях и т.д. Среди этой информации можно найти и данные о серийных номерах некоторых приложений.


  • разработчик: Martin Klinzmann
  • размер дистрибутива: 71 Кб
  • распространение: бесплатно
  • русский интерфейс: нет


Разработчик LicenseCrawler справедливо предполагает, что хранить на жестком диске такую конфиденциальную информацию, как сведения о лицензионных ключах, небезопасно. Поэтому в программу был добавлен специальный модуль для шифрования отчета. С помощью этой опции можно сохранить данные о регистрации в зашифрованный текстовый файл. Если такой файл открыть стандартным образом, например, используя для этого Блокнот, данные будут представлены хаотичным набором символов. Чтобы расшифровать информацию, нужно открыть этот файл в LicenseCrawler и ввести заранее заданный пароль.

  • разработчик: Mustafa Bugra Aktas
  • размер дистрибутива: 158 Кб
  • распространение: бесплатно
  • русский интерфейс: нет

Небольшую бесплатную утилиту SoftKey Revealer отличает, в первую очередь, высокая скорость работы – для определения всех данных программе может понадобится всего пара секунд. Данная программа очень проста в работе и не содержит никаких настроек. Достаточно просто запустить EXE-файл, после чего сразу же появится список установленных приложений с регистрационными данными.

Данные из SoftKey Revealer можно быстро импортировать в Word с помощью команды File > Copy to Word. Если нажать на кнопку Save, в директории, откуда была запущена утилита, будет сохранен текстовый файл со всей обнаруженной информацией.


К сожалению, список программного обеспечения, обнаруженный программой SoftKey Revealer, не очень точный, к тому же для отдельных приложений эта утилита вообще не определяет регистрационные данные, оставляя пустое место.

поскольку использование лицензионного ключа, как это обычно, мне интересно:

  1. как это обычно решается?
  2. как может Я генерирую ключ и как он может быть проверен приложением?
  3. как я могу также избежать публикации ключа в интернете и использования другими, которые не заплатили лицензию (ключ, который в основном не является "их").

Я думаю, что я также должен связать ключ с версией приложения так или иначе, чтобы можно было взимать плату за новые ключи в версиях функций.

что-нибудь еще, о чем я должен думать в этом сценарии?

предостережение: вы не можете запретить пользователям пиратство, но только облегчить честным пользователям делать правильные вещи.

предполагая, что вы не хотите делать специальную сборку для каждого пользователя, а затем:

  • создайте себе секретный ключ для продукта
  • имя пользователя
  • Concatentate имя пользователя и секретный ключ и хеш (например) и SHA1
  • распакуйте хэш SHA1 в виде буквенно-цифровой строки. Это индивидуальность "ключ продукта" пользователя
  • в программе выполните тот же хэш и сравните его с ключом продукта. Если равны, хорошо.

но, повторяю: это не помешает пиратству

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

просто подумал, что я действительно должен упомянуть об этом; если вы планируете извлечь из этого что-то еще, будьте осторожны.

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

В идеале вы хотели бы, чтобы ваши лицензионные ключи имели следующие свойства:

только ваша компания должна иметь возможность генерировать лицензионные ключи для ваших продуктов, даже если кто-то полностью реверсирует ваши продукты (что произойдет, я говорю от опыт.) Запутывание алгоритма или скрытие ключа шифрования в вашем программном обеспечении действительно не может быть и речи, если вы серьезно относитесь к контролю лицензирования. Если ваш продукт будет успешным, кто-то сделает ключевой генератор в течение нескольких дней с момента выпуска.

лицензионный ключ должен использоваться только на одном компьютере (или, по крайней мере, вы должны иметь возможность контролировать это очень плотно)

лицензионный ключ должен быть коротким и простым для ввода или диктуйте по телефону. Вы не хотите, чтобы каждый клиент звонил в службу технической поддержки, потому что они не понимают, содержит ли ключ "l" или "1". Ваш отдел поддержки поблагодарил бы вас за это, и у вас будут более низкие расходы в этой области.

Итак, как вы решаете эти проблемы ?

ответ прост, но технически сложен: цифровые подписи с использованием криптографии с открытым ключом. Лицензионные ключи должны быть подписаны "документы", содержащие некоторые полезные данные, подписанные закрытым ключом вашей компании. Подписи должны быть частью лицензионного ключа. Продукт должен проверить лицензионные ключи с соответствующим открытым ключом. Таким образом, даже если кто-то имеет полный доступ к логике вашего продукта, он не может генерировать лицензионные ключи, потому что у него нет закрытого ключа. Лицензионный ключ будет выглядеть так: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) Самая большая проблема здесь заключается в том, что классическая алгоритмы открытого ключа имеют большие размеры сигнатур. RSA512 имеет 1024-битную подпись. Вы не хотите, чтобы ваши лицензионные ключи до сотни символов. Одним из наиболее мощных подходов является использование криптографии эллиптических кривых (с осторожными реализациями, чтобы избежать существующих патентов). Ключи ECC как 6 времен более коротких чем ключи RSA, для такой же прочности. Вы можете дополнительно уменьшить размеры подписи, используя алгоритмы, такие как алгоритм цифровой подписи Шнорра (патент истек в 2008 году - хорошо :) )

ну, просто удалите избыточные символы, такие как" 1"," l"," 0"," o " из ваших ключей. Разделите строку лицензионного ключа на группы символов.

простой ответ-независимо от того, какую схему вы используете, ее можно взломать.

Не наказывайте честных клиентов системой, предназначенной для предотвращения хакеров, поскольку хакеры взломают ее независимо.

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

при создании ключа не забудьте объединить версию и номер сборки в строку, в которой вы вычисляете хэш. Таким образом, не будет ни одного ключа, который открывает все, что вы когда-либо выпустили.

после того, как вы найдете некоторые ключи или патчи, плавающие в Асталависта.ящик.СК Вы будете знать, что вам удалось сделать что-то достаточно популярным, что кто-то потрудился взломать. Радуйтесь!

кроме того, что уже было сказано.

вы даже не можете использовать аппаратные значения для создания ключа больше. Виртуальные машины теперь позволяют кому-то создавать образ "лицензированной" машины и запускать ее на любой платформе выбирать.

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

Если ваш продукт сложен, то своиственные вопросы поддержки будут создавать некоторую защиту для вас.

Он основан на системе" частичной проверки ключа", которая означает, что только подмножество ключа, которое вы используете для создания ключа, должно быть скомпилировано в ваш дистрибутив. Вы создаете ключи самостоятельно, поэтому реализация лицензии уникальна для вашего программного обеспечения.

Как указано выше, если ваш код можно декомпилировать, его относительно легко обойти большинство систем лицензирования.

Я не знаю, насколько подробно вы хотите получить

Они будут держать их от переключения машин после того, как у них есть ключ.

Я использовал Crypkey в прошлом. Это один из многих доступных.

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

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

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

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

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

в прошлом, я использовал библиотека лицензирования Treek много раз, потому что он заполняет эти требования и предлагает действительно хорошую цену. Он использует ту же защиту лицензии для конечных пользователей и себя, и никто не взломал до сих пор. Вы также можете найти хорошие советы на сайте, чтобы избежать пиратства и взлома.

невозможно полностью предотвратить пиратство программного обеспечения. Вы можете предотвратить случайное пиратство, и это то, что делают все лицензионные решения.

заблокированное лицензирование узла (машины) лучше всего, если вы хотите предотвратить повторное использование лицензионных ключей. Я использую Cryptlex около года для моего программного обеспечения. У него есть свободный план также, Так что если вы не ожидаете слишком много клиентов, вы можете использовать его бесплатно.

Как и некоторые другие упомянутые, я огромный противник враждебности к клиентам по умолчанию-то, что индустрия лицензирования печально известна. Поэтому я расширю хорошее решение для вашей проблемы, что также предлагает хороший клиент UX.

для начала вы упомянули, что у вас есть "ограниченная" версия вашего программного обеспечения, которую вы используете, чтобы попытаться преобразовать клиентов в "обновление" для дополнительных функций. Так что вы ищете лицензии для вашего продукта, например, клиент может приобрести лицензию на функция-X или особенность-Y.

Я построил кейген С учетом этого типа лицензирования. Keygen-это лицензионный REST API, который позволяет управлять учетными записями пользователей, лицензиями, а также отслеживать использование/ассоциации машин.

что бы я сделал, это настроить 2 типы лицензий (a политика в пределах Keygen) где одно основание политика для ограниченной бесплатной версии, а другая-политика для платной версии.

Я не уверен, что вы используете для платежей, но предположим, что вы используете что-то вроде Stripe (довольно стандартное в настоящее время), которое предлагает веб-перехватчиков. Keygen также имеет webhooks (используете ли вы его или нет, все это по-прежнему применимо). Вы можете интегрировать Keygen, чтобы поговорить с вашим поставщиком платежей, используя веб-крючки с обеих сторон (подумайте: customer.created ->создать базовую лицензию для клиента, license.created - >поручите клиента для новой лицензии).

таким образом, используя webhooks, мы можем автоматизировать создание лицензий для новых клиентов. Итак, как насчет проверки лицензии в самом приложении? Это можно сделать различными способами, но самый популярный способ-потребовать от вашего клиента ввести длинный лицензионный ключ в поле ввода, которое вы можете проверить; я думаю, что это Грозный способ обработки проверки лицензии в вашем приложении.

почему Я так думаю? Ну во-первых, вы требуете, чтобы ваш клиент вводил утомительно длинный лицензионный ключ, предназначенный для потребления машины, и во-вторых вы требуете, чтобы вы и ваш клиент отслеживали указанный утомительно длинный лицензионный ключ.

хорошо, так какая альтернатива? Я думаю, что лучшая альтернатива делает то, что все ваши клиенты привыкли: позволяет им создать учетную запись для вашего продукта с помощью электронной почты / пароля. Тогда вы можете свяжите все их лицензии и машины С этой учетной записью. Поэтому теперь вместо ввода лицензионного ключа они могут просто войти в систему, используя свои учетные данные.

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

теперь на проверку лицензии: всякий раз, когда ваш клиент входит в ваше приложение со своей электронной почтой/паролем, вы можете запросить их учетную запись пользователя для лицензий, которыми они владеют, чтобы определить, могут ли они использовать функция-X или особенность-Y. И так как ваше приложение теперь самообслуживание, вы можете позволить своим клиентам купить дополнительные функции прямо из вашего приложения!

Итак, мы ввели Т автоматизации нашей системы лицензирования, мы можем лицензировать отдельных особенности (т. е. ограниченная и полная версия), мы предложили высокий UX для наших клиентов и мы также разрешали одну из самых больших причин для запросы поддержки:восстановление лицензионного ключа.

в любом случае, это долго, но, надеюсь, это поможет кому-то!

Я один из разработчиков за Cryptolens платформа лицензирования программного обеспечения и работает над системами лицензирования с 14 лет. В этом ответе я включил несколько советов, основанных на опыте, приобретенном за эти годы.

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

преимущества сервера лицензионных ключей

в преимущества лицензионного сервера ключей в том, что:

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

соображения

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

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

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

защита секретных алгоритмов

I в большинстве случаев цель любого решения для лицензирования программного обеспечения-помочь честным людям быть честными (т. е. честные пользователи, которые готовы платить, не забывают платить после окончания пробной версии и т. д.).

тем не менее, у вас все еще может быть некоторый код, который вы никоим образом не хотите просочиться в общественность (например. алгоритм для прогнозирования цен на акции и т. д.). В этом случае единственный способ - создать конечная точка API что ваше приложение будет звонить каждый раз, когда метод должен быть выполненный. Для этого требуется подключение к интернету, но это гарантирует, что ваш секретный код никогда не выполняется клиентской машиной.

реализация

Если вы не хотите реализовать все самостоятельно, я бы рекомендовал взглянуть на в этом уроке (часть Cryptolens)

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

Так как использование лицензионного ключа вроде обычного, мне интересно:

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

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

Что-нибудь еще, о чем я должен думать в этом сценарии?

Предостережение: вы не можете запретить пользователям пиратство, а только упрощают честным пользователям правильные действия.

Предполагая, что вы не хотите делать специальную сборку для каждого пользователя, тогда:

Но, повторюсь: это не предотвратит пиратство

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

Просто подумал, что я действительно должен упомянуть об этом, хотя; если вы планируете извлечь что-то еще из этого, будьте осторожны.

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

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

Обычно ли включать ограничения в лицензионный ключ? Например, ограничения по времени, количество одновременных пользователей, модули для установки и т. Д.?

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

В идеале вы хотели бы, чтобы ваши лицензионные ключи имели следующие свойства:

Только ваша компания должна иметь возможность генерировать лицензионные ключи для ваших продуктов, даже если кто-то полностью обратный инжиниринг ваших продуктов (что произойдет, я говорю из опыта). Запутывание алгоритма или скрытие ключа шифрования в вашем программном обеспечении действительно исключено, если вы серьезно относитесь к контролю лицензирования. Если ваш продукт успешен, кто-то сделает генератор ключей в течение нескольких дней с момента выпуска.

Лицензионный ключ должен использоваться только на одном компьютере (или, по крайней мере, вы должны быть в состоянии контролировать это очень жестко)

Итак, как вы решаете эти проблемы?

Разве они не могут просто отредактировать программное обеспечение, добавляя / удаляя код, чтобы проверка полностью пропускалась?

@Pacerier Есть много вещей, от которых лицензионные ключи защищают компании-разработчики программного обеспечения. Модификация exe не является одним из них.

Простой ответ - независимо от того, какую схему вы используете, ее можно взломать.

Не наказывайте честных клиентов с помощью системы, предназначенной для предотвращения хакеров, так как хакеры взломают ее независимо от этого.

Простой хешированный код, связанный с их электронной почтой или подобным, вероятно, достаточно хорош. Аппаратные идентификаторы всегда становятся проблемой, когда людям нужно переустанавливать или обновлять оборудование.

согласен, вы не хотите расстраивать пользователей, которые фактически покупают ваш продукт! (обратите внимание, $, яблоко и т. д.)

MS, Apple и т. Д. Могут сойти с рук, поскольку они большие и предоставляют основные продукты, которые трудно найти в других местах или которые имеют большую рыночную тень, которую они могут использовать для принуждения людей. Маленький разработчик не может.

Схема подписи ключа pub / priv не может быть взломана для создания новых действительных ключей для пользователей, которые хотят запускать подписанный код, загруженный с сайта издателя, вместо взломанного программного обеспечения. тогда как хеш / симметричная схема может быть взломана для получения новых действительных лицензионных ключей, неотличимых от недействительных. Огромная разница.

При генерации ключа не забудьте объединить версию и номер сборки со строкой, по которой вы вычисляете хеш. Таким образом, не будет ни одного ключа, который разблокирует все, что вы когда-либо выпускали.

После того, как вы обнаружите, что некоторые ключи или патчи плавают в astalavista.box.sk, вы узнаете, что вам удалось сделать что-то достаточно популярное, чтобы кто-то потрудился взломать. Радуйтесь!

@thomthom Как насчет того, чтобы связать максимальную версию с ключом? Идея версии сама по себе правдоподобна и добавляет больше безопасности

@MarvinThobejane, чтобы связать максимальную версию, вы можете подписать максимальную разрешенную версию и сделать так, чтобы код немного повторял свою версию. но нет> = ops разрешено в sigs.

Помимо того, что уже было заявлено .

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

Если ваш продукт сложный, проблемы, связанные с поддержкой, создадут вам некоторую защиту.

Подписание предназначено для подтверждения происхождения программы, которую вы запустите. Если пользователь не заботится о происхождении, потому что он знает, что он изменен и взломан, взломщик удалит подпись или даже подпишет ее собственной подписью. Подписание перестает смешивать надежные сборки с ненадежными сборками.

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

Как указано выше, если ваш код можно декомпилировать, то относительно легко обойти большинство систем лицензирования.

Я один из разработчиков Cryptolens программной платформы лицензирования и работают на системы лицензирования , начиная с возраста 14. В этом ответе, я включил некоторые советы , основанные на опыте , приобретенном на протяжении многих лет.

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

Преимущества сервера лицензионных ключей

Преимущества использования сервера лицензионных ключей:

  1. Вы всегда можете обновить или заблокировать лицензионный ключ с немедленным вступлением в силу.
  2. каждый лицензионный ключ может быть привязан к определенному количеству компьютеров (это помогает предотвратить публикацию лицензионного ключа в Интернете для использования другими пользователями).

Соображения

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

Решение состоит в том, чтобы всегда подписывать ответ лицензионного ключа от сервера, используя криптосистему с открытым ключом, такую ​​как RSA или ECC (возможно, лучше, если вы планируете работать на встроенных системах). Ваше приложение должно иметь только открытый ключ для проверки ответа лицензионного ключа.

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

Защита секретных алгоритмов

В большинстве случаев цель любого решения по лицензированию программного обеспечения состоит в том, чтобы помочь честным людям быть честными (т. Е. Честные пользователи, которые готовы платить, не забывают платить по истечении пробного периода и т. Д.).

Однако у вас все еще может быть какой-то код, который вы никоим образом не хотите разглашать общественности (например, алгоритм для прогнозирования цен на акции и т. Д.). В этом случае единственный способ - создать конечную точку API. которую ваше приложение будет вызывать каждый раз, когда должен выполняться метод. Требуется подключение к Интернету, но это гарантирует, что ваш секретный код никогда не выполняется на клиентском компьютере.

Реализация

Если вы не хотите реализовывать все самостоятельно, я бы порекомендовал взглянуть на этот учебник (часть Cryptolens )

Один вопрос об ограничении сохраненного лицензионного ключа, чтобы он не был слишком старым: поскольку ПК может быть не подключен к Интернету, его дату и время всегда можно изменить обратно, чтобы они оставались на той же действительной дате?

Разве пользователи не могут обойти сервер онлайн-лицензий, определив петлевой хост в Windows? Я видел много пиратских приложений, которые я помню, Resharper и Matlab.

Я использовал Crypkey в прошлом. Это один из многих доступных.

Вы можете защищать программное обеспечение только до определенной степени с любой схемой лицензирования.

Я не знаю, насколько тщательно вы хотите получить

Вы могли бы заставить программу прислать вам это и что-то еще (например, имя пользователя и MAC-адрес ник)

Вы вычисляете код на основе этого и отправляете им по электронной почте ключ обратно.

они не дадут им переключаться между машинами после того, как у них будет ключ.

И не дают им заменить мертвый HD среди других талинов, что приводит к разочарованию. К сожалению, нет простого ответа, вам нужно сбалансировать доверие с базовыми механизмами лицензирования.

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

Я имел в виду использовать этот номер с другими вещами (MAC-адрес, полное доменное имя), может быть, бросить их все в хеш. Задача состоит в том, чтобы немного сложнее подделать все эти данные, чем в первую очередь для обратного инжиниринга программного обеспечения и удаления чека, потому что это всегда вариант.

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

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

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

Кроме того, расходы на техническую поддержку были огромны. Многие, МНОГИЕ раз пользователь использовал бы законно другой компьютер, чтобы попытаться запустить программное обеспечение, но хэш был другим, что привело к огромной технической поддержке. Короче говоря, то, что сказала шхуна - не наказывайте честных пользователей.

По моему мнению, если вы не используете веб-лицензирование, нет никакой реальной причины для защиты программного обеспечения вообще. Из-за головной боли, которую может вызвать DRM, несправедливо по отношению к пользователям, которые фактически заплатили за это.

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

Это все равно, что сказать, что нет никакого смысла иметь веб-сайт, потому что он уязвим для DDoS-атак .

@ jugg1es Нигде в своем комментарии он не сказал "нет смысла". Он просто указал на тот факт, что это уязвимость, которую следует учитывать.

Я твердо верю, что только система лицензирования на основе криптографии с открытым ключом является правильным подходом, потому что вам не нужно включать в ваш исходный код важную информацию, необходимую для генерации лицензии.

В прошлом я много раз использовал Библиотеку лицензирования Treek , потому что она полностью удовлетворяет этим требованиям и предлагает действительно хорошую цену. Он использует одинаковую лицензионную защиту для конечных пользователей и самого себя, и никто не взломал это до сих пор. Вы также можете найти хорошие советы на сайте, чтобы избежать пиратства и взлома.

Требует ли криптография с открытым ключом использование онлайн-службы активации? Я имею в виду, если его нет в исходном коде (я полагаю, вы имеете в виду и исполняемый файл), где еще это может быть?

Нет, вам не нужно использовать онлайн-сервис активации. Вы можете создавать файлы лицензий полностью в автономном режиме.

Ключ в том, что вы размещаете в коде только открытый ключ, который нельзя использовать для генерации лицензии. Только для его проверки.

Как и некоторые другие упомянутые выше, я являюсь огромным противником враждебного отношения к клиентам по умолчанию - то, на что индустрия лицензирования печально известна. Поэтому я остановлюсь на хорошем решении вашей проблемы, которое также предлагает хороший пользовательский UX .

Я создал Keygen с учетом этого типа лицензирования. Keygen - это лицензионный REST API, который позволяет управлять учетными записями пользователей, лицензиями, а также отслеживать использование / ассоциации компьютеров.

Я хотел бы установить два типа лицензий ( политика в Keygen), где один является базовой политикой для ограниченной бесплатной версии, а другой - политикой для платной версии.

Я не уверен, что вы используете для платежей, но давайте предположим, что вы используете что-то вроде Stripe (довольно стандартного в настоящее время), который предлагает веб-хук . У Keygen также есть webhooks (используете ли вы это или нет, все это по-прежнему применимо). Вы можете интегрировать Keygen, чтобы разговаривать с вашим платежным провайдером, используя веб-крюки с обеих сторон (подумайте: customer.created -> создать базовую лицензию для клиента, license.created -> взимать плату с клиента за новую лицензию).

Таким образом, используя webhooks, мы можем автоматизировать создание лицензий для новых клиентов. Так как насчет проверки лицензии в самом приложении? Это может быть сделано различными способами, но наиболее популярным является требование, чтобы ваш клиент ввел длинный лицензионный ключ в поле ввода, которое затем можно проверить; Я думаю, что это ужасный способ проверки лицензии в вашем приложении.

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

Ладно, а какая альтернатива? Я думаю, что лучшая альтернатива - сделать то, к чему привыкли все ваши клиенты: позволить им создать учетную запись для вашего продукта, используя адрес электронной почты / пароль . Затем вы можете связать все их лицензии и их машины с этой учетной записью. Так что теперь вместо ввода лицензионного ключа они могут просто войти в систему, используя свои учетные данные.

Какое преимущество это дает вам? Во-первых, это избавляет вас и ваших клиентов от необходимости отслеживать лицензионные ключи, поскольку все они обрабатываются за кулисами внутри их учетной записи пользователя, и самое главное: теперь вы можете предложить своим клиентам лицензию и машину для самообслуживания. активация! т. е. поскольку все их лицензии и машины связаны с их учетной записью пользователя, вы можете предложить им приобрести лицензию, когда они запустят ваше приложение на неизвестной машине.

Теперь перейдем к проверке лицензии : всякий раз, когда ваш клиент входит в ваше приложение со своим адресом электронной почты / паролем, вы можете запросить у его учетной записи пользователя лицензии, которыми они владеют, чтобы определить, могут ли они использовать Feature-X или Feature-Y . А поскольку ваше приложение теперь самообслуживается , вы можете позволить своим клиентам приобретать дополнительные функции прямо из вашего приложения!

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

В любом случае, это долго, но, надеюсь, кому-то поможет!

Не могу представить, чтобы DLL лицензировалась подобным образом в любой ситуации развития предприятия. Например, подумайте об автоматических сценариях сборки и развертывания. Или просто добавьте этот шаг ко многим, обычно необходимым для настройки машины разработчика. Для меня лицензионные ключи должны быть предварительно выданы, а не основаны на отдельных машинах, чтобы быть практичным

Полное предотвращение компьютерного пиратства невозможно. Вы можете предотвратить случайное пиратство, и именно это делают все решения по лицензированию.

Лицензирование на узле (машине) заблокировано, если вы хотите предотвратить повторное использование лицензионных ключей. Я уже почти год использую Cryptlex для своего программного обеспечения. У него также есть бесплатный план , поэтому, если вы не ожидаете слишком много клиентов, вы можете использовать его бесплатно.

Ваше программное обеспечение все еще может быть взломано, но для обычного взломщика вполне может быть достаточно отложить его, и эти простые шаги также предотвратят извлечение и повторное использование вашего кода.

Электронный ключ — это аппаратный инструмент, который используется для защиты ПО и электронных документов от незаконного копирования, несанкционированного применения или распространения третьими лицами. Также встречается другие его названия — электронная (или цифровая) подпись, etoken. Сегодня это обязательный реквизит для подтверждения подлинности ряда электронных документов. Его используют, чтобы зафиксировать определенное состояние информации — например, внесение или, наоборот, отсутствие каких-либо изменений с момента подписания документа.

ЭП или ЭЦП?

Техническая реализация

Электронный ключ подписи выполнен в виде микросхемы или микроконтроллера, оснащенного энергонезависимой памятью. Чаще всего это устройства в виде флеш-накопителя, который подключается к компьютеру или ноутбуку через USB-порт. Чуть реже выпускаются аппаратные ключи с LPT- или PCMCIA-интерфейсами.

Etoken

Иногда используется другое определение тому, что такое электронный ключ. Альтернативный вариант исполнения электронного ключа или etoken’а — программное приложение. Его также называют виртуальным электронным ключом. В таком формате особенно часто его используют для подтверждения банковских и других финансовых операций через интернет. Однако портативные устройства в виде USB-флешек считаются более защищенными, так как в них подтверждение каждой транзакции происходит внутри устройства, то есть физически не покидает его пределов.

Как получить персональный электронный ключ

Вариантов сделать это два: для тех, у кого уже есть ЭЦП, и тех, у кого ее еще нет. Один из самых популярных способов создания ЭП базируется на способе ассиметричного шифрования. При этом шифруется не весь файл целиком, а только часть — хэш. При этом генерируются два типа ключа: закрытый и открытый. С помощью открытого узнать значение закрытого невозможно, поэтому если он попадет в свободный доступ, у вас не будет поводов для волнений. Однако открытый ключ потребуется для расшифровки закрытого, по отдельности друг от друга они не представляют никакой ценности.

Для создания электронного ключа потребуется действующий сертификат, который подтверждает подлинность электронной подписи. Получить сертификат можно в любом Удостоверяющем центре, который прошел аккредитацию в Минкомсвязи РФ. Ознакомиться с перечнем всех доступных и выбрать ближайший к вам Удостоверяющий центр можно на официальном веб-сайте ведомства.

Как сделать точную копию электронного ключа? Для этого необходимо перенести его вместе с сертификатами на иное устройство — компьютер или ноутбук. Есть как минимум два способа сделать это на практике.

  1. Если ключей несколько (не более десяти штук), воспользуйтесь специальным программным обеспечением. Удобной и надежной в работе зарекомендовала себя программа CryptoPro. Главное — устанавливайте ее с официального сайта разработчика, а не с подозрительных веб-ресурсов, на которых может быть размещен зараженный вирусами дистрибутив;
  2. Если ключей и сертификатов к ним много, скопируйте исходные файлы, в которых содержится зашифрованная информация. Это более сложный и затратный по времени способ, который требует определенных знаний и опыта. Но именно к нему прибегают во многих организациях с большим количеством электронных ключей — от нескольких десятков до нескольких сотен.

Рекомендации по работе для пользователей ЭП

Разберемся подробно, для чего нужен электронный ключ и как его получить разным категориям населения. Электронная цифровая подпись массово используется в системах ЭДО, особенно для подготовки отчетности в налоговую индивидуальными предпринимателями. Им удобнее делать это в удаленном режиме, без посещения налоговой службы лично — так они экономят время и могут использовать его на развитие своего дела. Но при этом нужно учитывать, что нет универсального электронного ключа, который можно применять для разных задач. Отдельно придется получать квалифицированную ЭП для налоговой, подпись для ЕГАИС и электронных торгов. Однако временные затраты на эти мероприятия оправдывают себя в 100 % случаев, так как:

  1. Вы сокращаете расходы на ведение ЭДО;
  2. Вы не тратите время на посещение налоговой и других контролирующих органов;
  3. Вы можете принимать участие в Госзакупках и торгах, а также международной торговле.

Электронный ключ в налоговой

Как получить электронный ключ ИП?

В пакет документов, которые необходимо подать ИП, входят: паспорт гражданина РФ, свидетельство о регистрации индивидуального предпринимателя, СНИЛС, ИНН, выписка из ЕГРИП, платежные реквизиты.

Как получить электронный ключ юрлицам?

Им так же регулярно, как и ИП, приходится ставить электронную подпись. Но для получения электронного ключа они обязаны предъявить иной пакет документов:

  1. Приказ, который подтверждает назначение руководителя компании;
  2. Паспорт гендиректора (отсканированная копия первого разворота и страницы с пропиской);
  3. СНИЛС и ОГРН;
  4. ИНН организации;
  5. Платежные реквизиты.

Согласно действующему законодательству РФ электронная подпись выступает аналогом печати для юридического лица, но без физического его присутствия таким образом она не работает. Доступ к электронной подписи может иметь генеральный директор компании или другой ее представитель, наделенный приказом соответствующими полномочиями.

Если требуется изготовить усиленную цифровую подпись, сделать это можно в Удостоверяющем центре. Забрать ее оттуда имеет право только учредитель компании или гендиректор. Накопитель можно выбирать произвольно: токен или флеш-накопитель. В комплекте к такой электронной подписи всегда идет комплект ПО, которое устанавливается для обмена информацией с партнерами организации, а также ключ и сертификат. Все компоненты являются обязательными для использования.

Как получить электронный ключ физическому лицу?

Изначально электронные ключи были предназначены только для ИП и юрлиц, но в последнее время ими активно пользуются обычные интернет-пользователи (физические лица). Где им будет полезна электронная подпись:

Сколько стоит и как долго действует электронный ключ?

Электронный цифровой ключ это

Как избежать проблем при использовании электронных ключей

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

  1. Не подключайте электронный ключ к компьютеру, если аналогичный интерфейс (чаще всего USB) параллельно использует другое устройство. Если этого не избежать, для работы с электронным ключом установите отдельную физическую плату;
  2. Всегда обращайте внимание на реакцию операционной системы после подключения к устройству электронного ключа. Если она ведет себя некорректно, ключ не работает или работает не так, как вы ожидаете, немедленно обратитесь за помощью к специалистам;
  3. Если к компьютеру подключен электронный ключ, воздержитесь от подключения к нему других периферийных устройств с отдельным питанием (например, принтеров). Это может вывести из строя любое из этих устройств;
  4. Не подключайте одновременно к одному компьютеру несколько электронных ключей, даже если у вас есть необходимое количество портов. В некоторых случаях это оправдано и ключи даже предполагают параллельное подключение друг к другу, но в других ситуациях это может вызвать сбои, о которых производители не всегда предупреждают заранее.
  5. Не допускайте механического повреждения электронных ключей — в частности, падений, ударов и сильных вибраций. Также стоит оберегать их от воздействия критично низких и высоких температур, агрессивных сред, прямого ультрафиолетового воздействия;
  6. Внимательно отнеситесь к установке драйверов для электронных ключей. Не инсталлируйте те драйвера, которые по умолчанию предлагает операционная система, пользуйтесь только тем ПО, которое рекомендует поставщик решения.

Надеемся, из этой статьи понятно, что такое электронный ключ подписи, где и при каких обстоятельствах он используется и как его получить разным категориям населения — физическим лицам, юридическим лицам и индивидуальным предпринимателям.

Читайте также: