繁体   English   中英

在源代码中存储加密密钥的安全性如何?

[英]How secure is it to store an encryption key in source code?

此加密类是否足够安全? 或者有人可以反汇编我的二进制文件来找到密钥和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);
  }
}

这类似于这个问题这一个 ,但也似乎有一个明确的答案(据我可以理解-我承认自己对这个话题的一个初学者)。 请指教。 :)

是的,这很容易被打破。 任何具有Reflector(或ILSpy,或dotPeek,或......)等工具知识的开发人员都可以轻松识别加密功能并找到密钥。 拥有程序集的人甚至可以直接调用Decrypt ,而不需要解压缩密钥。

它足够安全吗? 这取决于,只有你能回答这个问题。 如果这是用于许可,则相当于在盒子上贴上“不要复制我的软件”。 另一方面,为经验丰富且坚定的攻击者制定一个难以破解的强大许可方案是一项艰巨的任务,您可能需要考虑是否值得付出努力。 就个人而言,我会花时间让软件变得如此精彩,以至于人们会想要付出代价,而不是阻止少数坏人不使用它。

不,这不安全。 即使是混淆,也很容易打破。 有人可以很快地制作一个keygen

您可以通过使用公钥加密解决密钥的问题,因此,只有公共部分将被包含在组件(和你保持私钥给自己)。

OTOH有人可以用它自己替换这个公钥......(制作一个补丁和一个keygen 。)所以你需要更多来保护你的代码,例如代码签名会有所帮助。

创建一个安全的DRM并不是一件容易的事(实际上IMO不可能)。 你可以投入比花费更多的时间(让其他人破解它)。 所以你可以:

a)用一个简单的方法来保持诚实的人诚实 ;

b)创建或购买(比你自己便宜)一些复杂的解决方案,但不是100%安全 - 但这可以给你一些额外的安全时间来销售你的应用程序;

从编译的程序集中窃取密钥非常容易。
您需要使用非对称加密(RSA)。

接下来,您将询问如何防止人们修改程序集以放入自己的公钥,或者删除整个许可证检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM