Насколько безопасно хранить ключ шифрования в исходном коде? - PullRequest
4 голосов
/ 16 октября 2011

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

internal static class Encryptor
{
  // Actual values are put here in my source
  private static readonly byte[] Key = { 0, 0, 0, 0, 0, 0, 0, 0 };
  private static readonly byte[] Iv = { 0, 0, 0, 0, 0, 0, 0, 0 };

  internal static String Encrypt(string source)
  {
    var des = new DESCryptoServiceProvider();
    var enc = des.CreateEncryptor(Key, Iv);
    var b = Encoding.ASCII.GetBytes(source);
    var encId = enc.TransformFinalBlock(b, 0, b.Length);
    return Convert.ToBase64String(encId);
  }

  internal static string Decrypt(string encrypted)
  {
    var des = new DESCryptoServiceProvider();
    var dec = des.CreateDecryptor(Key, Iv);
    var b = Convert.FromBase64String(encrypted);
    var decId = dec.TransformFinalBlock(b, 0, b.Length);
    return Encoding.ASCII.GetString(decId);
  }
}

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

Ответы [ 3 ]

6 голосов
/ 16 октября 2011

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

Достаточно ли он безопасен?Это зависит только от вас.Если это для лицензирования, это эквивалентно наклейке на коробку с надписью «Не копировать мое программное обеспечение».С другой стороны, создание надежной схемы лицензирования, которую сложно взломать для опытного и решительного злоумышленника, является большой задачей, и вы можете подумать, стоит ли это усилий.Лично я бы потратил свое время на то, чтобы сделать программное обеспечение настолько потрясающим, что люди захотят заплатить за него, а не мешать небольшому количеству плохих парней использовать его нелицензионно.

3 голосов
/ 16 октября 2011

Нет, это не безопасно. Это было бы легко сломать, даже с запутыванием. Кто-то может довольно быстро сделать keygen .

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

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

Создание безопасного DRM - нелегкая работа (на самом деле это невозможно IMO). Вы можете потратить гораздо больше времени, чем нужно (чтобы кто-то еще взломал его). Так что вы можете:

а) используйте простой, чтобы сохранить честность честных людей ;

b) создать или купить (дешевле, чем ваше) какое-то сложное решение, но не на 100% безопасное - но это может дать вам дополнительное безопасное время для продажи вашего приложения;

0 голосов
/ 16 октября 2011

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

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

...