【问题标题】:How to hide keys in application?如何隐藏应用程序中的键?
【发布时间】:2011-06-02 03:11:36
【问题描述】:

我有一个 C++ 客户端/服务器应用程序,其中客户端和服务器是我的可执行文件。每次在客户端和服务器之间建立连接时,我都会为该会话生成一个新的加密密钥,我希望传输此会话密钥并使用客户端和服务器中内置的静态密钥加密此会话密钥。

但是,在我的可执行文件上运行字符串会显示静态键。

如何在我的客户端和服务器应用程序中隐藏嵌入的静态密钥,以便它们不容易被提取,从而允许有人解码我的会话密钥。

【问题讨论】:

    标签: c++ encryption man-in-the-middle


    【解决方案1】:

    他交换密钥的方法“确保”客户是有效的而不是冒名顶替者。仅使用 D-H 安全地交换密钥不会这样做。为了获得相同的功能,他需要实现一个 PKI 系统。 SSL/TLS 就是为此目的而构建的,在它下面将满足他的需要。

    您需要为您的服务器创建一个 CA 并签署客户端证书,以确保他们是他们所说的身份。

    【讨论】:

    • +1 指出 D-H 易受 MITM 影响,并建议 PKI。
    • 我不喜欢“确保”...他的方法是破坏密码学,但我知道你的意思,他想要的方法是确保抵抗MITM,所以我也 +1。
    • @Ninefingers 我同意这就是为什么我把确保放在 qoutes 中。我应该用不同的措辞来表达他的意图,而不是实际发生的事情。我感谢 +1。
    【解决方案2】:

    这个问题的解决方案不涉及尝试隐藏键(这通常是不可能的)。例如,Diffie-Hellman key exchange 允许客户端和服务器协商一个新的秘密会话密钥,而无需通过网络发送它。

    【讨论】:

      【解决方案3】:

      因此,您计划使用一种特别难以撤消的方法来隐藏您的秘密(可执行文件中的密钥),该方法只有在您知道该方法的秘密时才能撤消,您还需要使用新的方法来隐藏它超级秘密方法,只有在您知道该方法的秘密时才能撤消,我们需要用另一个秘密方法隐藏该秘密方法,该秘密方法需要我们需要隐藏的另一个秘密......

      这是一个“问题溢出”。我希望你能看到你不会用这种方式解决它。为每台计算机生成密钥(ssh/sshd 执行此操作)并保护它们。上面同样的问题实际上也适用,因为如果我得到了那个密钥,它仍然可以玩,但是这样你就不会将它硬编码到你的解决方案中,这意味着修复一个受损的密钥要容易得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        • 2012-02-05
        • 2018-08-12
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多