如何在应用程序中隐藏密钥?

时间:2010-12-31 22:13:37

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

他交换密钥的方法“确保”客户端是有效的而不是冒名顶替者。只是使用D-H安全地交换密钥不会那样做。为了获得相同的功能,他需要实现PKI系统。 SSL / TLS是为此目的而构建的,它下面将完成他所需要的工作。

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

答案 2 :(得分:0)

所以,你计划用一个特别难以撤销的方法隐藏你的秘密(可执行文件中的密钥),如果你知道方法的秘密,你只需要撤消它,你也需要隐藏它。如果您知道该方法的秘密,我们需要隐藏另一个秘密方法,需要另一个我们需要隐藏的秘密...

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