2010-06-17 4 views
1

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

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

  • имени клиента (который может быть переменной длиной строки)
  • 6 цифр серийного номера.

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

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

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

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

ответ

1

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

+0

Это не дает мне ответа на вопрос, который был «Что такое соответствующий механизм для этого с вышеуказанными требованиями?» –

+0

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

+0

Конечно, чтобы избежать исправления, есть такая вещь, как подписание кода. – ErikHeemskerk

-2

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

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

+1

Это не ответ на мой вопрос. –

+1

«Использование несанкционированного использования компонентов» звучит много, как антипиратство. –

+1

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

-2

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

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

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

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

+0

Зачем изобретать колесо? Генерируйте 128-битное число и используйте его как значение соли, когда вы передаете объединенное название компании и связанную с ней информацию с SHA-1. Дайте им число, в которое нужно войти. С другой стороны, программное обеспечение будет выполнять один и тот же расчет и сравнить его хэш с тем, что пользователь вводил. Запустите obfuscater в программном обеспечении, чтобы скрыть общий секрет. Все сделано. Эта схема достаточно безопасна, не требует никаких усилий и не требует каких-либо новых алгоритмов, которые могли бы иметь огромные отверстия для всего, что вы знаете. –

+0

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

Смежные вопросы