Криптография .NET для лицензионных ключей? - PullRequest
14 голосов
/ 03 ноября 2008

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

В основном входные данные будут:

название компании
основной номер версии
Дата создания
срок годности
имеет функцию1:
имеет функцию2:
имеет функцию3:

например. Acme Inc 5.0 20081102 20081102 0 1 0

Похожие: Какой встроенный алгоритм криптографии .NET является наиболее безопасным?

Ответы [ 6 ]

10 голосов
/ 04 ноября 2008

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

7 голосов
/ 03 ноября 2008

Если вы выполняете проверку на стороне клиента, вы хотите использовать асимметричное шифрование. Таким образом, вам не нужно раздавать закрытый ключ клиенту. Я бы сгенерировал подпись RSA, используя SHA-256 и 2048-битный ключ. Если вы сделаете это, криптографические операции не будут слабым звеном. Взломщик может, конечно, изменить код, чтобы пропустить этап проверки, но никакой криптографический алгоритм не поможет этому.

Если вы выполняете проверку на стороне сервера, я бы выбрал HMAC на основе SHA-256.

3 голосов
/ 23 февраля 2010

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

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

Основные функции CryptoAPI для подписи и проверки: CryptSignHash и CryptVerifySignature , см. Пример C Программа: подписывание хеша и проверка подписи хеша .

Эквивалентом .Net Framework являются RSAPKCS1SignatureFormatter и RSAPKCS1SignatureDeformatter классы.

1 голос
/ 23 февраля 2010

Вам нужно сделать 4 вещи:
№ 1: контрольная сумма вашего приложения (MD5, с пользовательским контекстом md5)
- контекст MD5 должен быть зашифрованно инициализирован
- Сравните контрольную сумму зашифрованного личного / открытого ключа
№ 2: контрольная сумма текстового сегмента вашего запущенного приложения
№ 3: Использовать 4096-битное шифрование частного-открытого ключа RSA для лицензии
Нет 4: Зашифруйте все важные строки, такие как «Неправильный ключ» или «Ключ в порядке»

1 голос
/ 03 ноября 2008

Здесь также уместны ответы на ваш другой вопрос: Какой встроенный алгоритм криптографии .NET наиболее безопасен?

0 голосов
/ 07 ноября 2008

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

Сообщение в блоге содержит видео и исходный код.

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

Исходный код написан на C # и использует алгоритмы Triple DES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...