Ключи продуктов шифрования: шифрование с открытым и закрытым ключом - PullRequest
1 голос
/ 17 июня 2010

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

Я генерирую наши ключи продукта на основе

  • имя клиента (которое может быть строкой переменной длины)
  • 6-значный серийный номер.

Было бы хорошо, если бы ключ продукта имел бы управляемую длину (16 символов или около того)

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

Каков соответствующий механизм для выполнения вышеуказанных требований?

ПРИМЕЧАНИЕ: это не остановит пиратство; это снижает вероятность того, что начинающие пользователи установят компоненты, которые им не нужны / неавторизованы для использования.

Ответы [ 3 ]

1 голос
/ 17 июня 2010

.NET поддерживает шифрование с открытым ключом различными способами, например http://msdn.microsoft.com/en-us/library/ms867080.aspx. Сказав это, вы получите лишь уверенность в том, что кто-то, имеющий полный доступ к опубликованному коду, не сможет выдатьсобственные ключи продукта.Ничто из этого не мешает клиенту установить патч для принятия что-нибудь в качестве действительного ключа.Вот тут и запутывается.

0 голосов
/ 17 июня 2010

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

Я выполнил сериализацию фрагмента данных в двоичный файл. Данные включали в себя хэшированное название компании, код операции / дату истечения срока действия, а также оставляли место для будущих требований. Затем я разбросал биты по массиву, чтобы запутать его. Затем я сопоставил каждые 5 бит двоичного массива с 32-символьным алфавитом кода авторизации (0-9, a-z, исключая I / O / Q / S для удобства чтения по телефону).

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

Как и в случае с вашей проблемой, она не была предназначена для остановки взломщиков кода на Bletchley Park , но была достаточной, чтобы не дать обычному офисному работнику что-то сделать, не следуя процедуре компании. И, учитывая эту сферу, был очень эффективным.

0 голосов
/ 17 июня 2010

Даже не пытайтесь увлечься антипиратством. Это того не стоит. Я взломал бесчисленное количество приложений (молчаливо), и .NET самые простые из FAR. Но в действительности все они относительно легки с достаточным опытом. Если вы мне не верите, проверьте isohunt некоторое время.

tl; dr: Это проигрышная битва. Не борись с этим. Если вы действительно хотите выиграть, подайте в суд на нарушителей - но даже это заставляет вас проигрывать.

...