Статический или случайный IV для файла лицензии - PullRequest
0 голосов
/ 05 июля 2010

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

На данный момент у меня есть

  • Закрытый ключ RSA, который шифрует мой AES.ключ
  • Один ключ AES / CBC, который шифрует данные
  • Открытый ключ RSA

И AES, и открытый ключ жестко запрограммированы на устройстве.

Как мне поступить с IV при запросе лицензии, должен ли я создать статическую на устройстве или отправить новую с каждой новой лицензией, которую я создаю?

Ответы [ 2 ]

2 голосов
/ 05 июля 2010

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

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

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

РЕДАКТИРОВАТЬ:

Если я могу сделать предложение, я думаю, что книга Начало криптографии с Java была бы мудрым вложением. В него включены примеры использования библиотеки Bouncycastle. Вы можете бесплатно загрузить примеры с того же сайта.

2 голосов
/ 05 июля 2010

Не глупо ли это предложение?

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

И чтобы ответить на этот вопрос, вы должны использовать новый случайный IV для каждого шифрования AES / CBC.

...