【问题标题】:How do you safely store an encryption key in .Net?如何在 .Net 中安全地存储加密密钥?
【发布时间】:2010-08-05 20:49:27
【问题描述】:

如果您有一个 .Net 应用程序(或任何其他应用程序),您如何安全地存储内部加密密钥?我不是在谈论用户输入的键,而是在程序本身中硬编码的键,用于在程序的其他实例之间进行通信。例如,如果您有一个点对点类型的程序,您可能想要加密数据包,以便确定您正在与 您的 程序的另一个实例对话,而不是其他人的。我的解决方案是将密钥硬编码到客户端中,然后以这种方式简单地加密/解密所有内容。

但是,我想知道在 .Net 中这样做是否安全。我没有广泛使用 Reflector 或类似的东西,但据我所知,从 CIL 解构 .Net 应用程序听起来相当容易。对于拥有这些应用程序之一的人来说,去寻找我的幻数会是微不足道的吗?

【问题讨论】:

  • 你需要研究一下混淆软件。

标签: .net encryption reflector


【解决方案1】:

绝对没有办法验证连接另一端的可执行文件是您编写的那个。如果你用一个密钥加密一个密钥,你将第二个密钥存储在哪里?如果您 Diffie-Hellman 使用服务器获取密钥,那么您在哪里存储该密钥? (提示:在内存中,可以从那里转储然后读取)。这是一个你永远无法解决的递归问题。

我了解到 AOL Instant Messenger 的服务器会定期轮询 AIM 客户端以获取特定代码地址的哈希值(即计算 SHA1(address1 -> address2)),如果哈希值不正确,则断开客户端。这是因为重新分发可执行文件是非法的(并且在每两个间隔之间建立一个哈希表是不可行的),所以这只是一个法律挑战而不是技术挑战。

如果您想要的软件真的很努力地击败逆向工程(并且实际上做得很好),请尝试将调试器附加到 Skype :-)

【讨论】:

【解决方案2】:

您也可以尝试将自定义加密/解密算法放入 C++ 库中,然后使用互操作来来回整理数据。

【讨论】:

    【解决方案3】:

    您可以生成一个非对称密钥(每个会话?),而不是硬编码密钥。您可以将公钥发送给对等方,使用此密钥,对等方可以加密只有您可以解密的消息。

    非对称加密很慢,你的对等方也可以发送一个用你的公钥编码的对称密钥,它只用于这个会话。

    如果确实需要存储机密数据,可以使用ProtectedData 类。您可以在设置期间调用它,以存储您的秘密(密钥)。

    【讨论】:

    • 但是 byte [] secret = { 0, 1, 2, 3, 4, 1, 2, 3, 4 }; 是否可以通过在 Reflector 中打开 .exe 来显示?
    • 如果你把它放在另一个 dll 中并将那个 dll 嵌入到你的程序集中,它不会在反射器中打开......但它仍然可以被提取和打开。分层保护并将反编译的门槛提高到大多数人不会打扰的水平是您可以使用纯托管代码做的所有事情。
    • 你的申请值多少钱?我现在每小时得到 0 美元的报酬,而且我是调试器的野兽 :-)
    • Re ProtectedData:阅读类/方法文档,它说保护依赖于当前用户帐户。考虑到将由其他用户运行的应用程序,这将有何帮助?如果您在使用您的用户帐户构建密钥时保护了密钥,那么您将是唯一能够检索该密钥/运行该软件的人。没有其他用户能够正确运行该软件,使其无法分发。对吗?
    • @toolmakersteve,您也可以在范围内使用“LocalMachine”。
    【解决方案4】:

    如果密钥存储在程序的可执行代码或资源中(或在 Windows TCB 中使用可执行代码中的密钥),那么只要付出足够的努力,就可以对其进行解码。

    因为最终有了可执行文件,无论您添加什么保护,他们都拥有获取它所需的所有信息(因为解码代码也已到位)。

    开始:

    • 不要创建自己的机制,有太多简单的方法可以破坏安全性(专家通常需要多次尝试才能做到正确)。
    • 想想你试图保护的东西的价值,以及那些可能攻击它的人可用的资源。如果保护的价值不大,您就不需要那么多保护。
    • 除非您保护像Aldermaston 这样的地方,否则您不需要High Security

    KISS 原则会很好地为您服务。

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 2015-07-04
      • 1970-01-01
      • 2014-06-24
      • 2018-03-16
      • 1970-01-01
      • 2012-01-11
      • 2015-11-24
      相关资源
      最近更新 更多