【问题标题】:Decrypt data on client machine解密客户端机器上的数据
【发布时间】:2015-09-02 12:05:29
【问题描述】:

如果我想在服务器上加密数据,并将其发送到我已经实现并发送给客户的客户端程序,我是否可以将解密密钥和算法存储在客户端程序中,而不会冒险逆向工程我的客户端程序将使用户能够解密我发送的所有数据。 也就是说,我希望我的客户端程序控制它解密的内容和不解密的内容。

谢谢 济济

【问题讨论】:

    标签: encryption server client


    【解决方案1】:

    您可以毫无风险地对算法进行硬编码。安全性必须基于密钥的保密性,而不是算法的保密性。

    要秘密存储解密密钥,您可以使用密钥库。

    我不知道您使用的是哪种语言,但 Java 包含自己的密钥库,而对于 C,您可以通过 NSS 获得密钥库。要打开这些密钥库,您需要一个密码,用户可以在客户端应用程序启动时输入该密码。

    如果您的客户端运行在 linux 和 gnome 上,那么您也可以使用 Gnome 的密钥环,在这种情况下,用户无需输入密码即可打开密钥环(登录密码也用于打开密钥环) .

    【讨论】:

    • 非常感谢。我想象它是那样的。这将是一个 .Net 解决方案,我假设 .Net 具有类似于密钥库的东西。但我不确定这是否是我想要的!实际上,我不希望用户在客户端进行任何交互来执行解密。那么我的应用程序是否有可能在没有任何交互的情况下自行解密?
    • ...如果不是,并且我选择使用上述方法,我该如何将客户端应用程序分发给客户。是否每个客户端都必须获得唯一的密钥库密码,解密密钥和密钥库是客户端分发包的一部分吗?
    • 密钥分发本身就是一个完整的主题。您可以手动分发密钥(将其放在笔式驱动器中,并在安装应用程序时将其添加到密钥库中)。或者您可以在自动安装期间创建密钥库并使用Diffie-Hellman 下载密钥。在这两种情况下,用户都必须提供密钥库密码才能打开它。我想知道您的问题是否无法使用 SSL 解决...尽管最近出现了所有问题,但 TLS 1.2 仍然被认为是安全的。
    • 再次感谢。问题是我不希望服务器和客户端之间有任何进一步的通信,所以基本上我希望加密数据位于客户端上,并且应该是客户端并且只有客户端可以选择解密的内容和时间。想到一个想法:是否可以使用客户端程序集的一些 .Net 签名,以确保它是唯一可以检索解密密钥并使用它进行解密的程序集?再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2022-01-03
    • 2015-10-29
    • 1970-01-01
    • 2012-07-15
    • 2015-04-30
    相关资源
    最近更新 更多