2

我想将数据从服务器软件发送到客户端软件,以这样一种方式加密,即只有服务器(私有软件)可以加密该特定数据,但任何客户端都可以解密它。

起初我认为 RSA 将是一个解决方案,但据我了解,我想向后使用它:我可以使用服务器上的公钥加密数据,并使用私钥在客户端上解密。这可以正常工作,除非有人可以从私钥中导出公钥。那是对的吗?如果是这样,是否有其他选择?

提前致谢。

4

2 回答 2

3

您要做的是对服务器发送的数据进行数字签名。所有客户端都可以验证这个数字签名,以证明只有服务器可以创建它。

它的工作原理如下:您的服务器计算数据的哈希并使用服务器上的一些私钥(签名密钥)加密哈希。然后服务器将消息(纯文本)和哈希发送给客户端。当客户端获得这两条数据时,他们使用服务器的公钥(验证密钥)对加密的哈希进行解密。现在客户端可以自己计算纯文本消息的哈希值,并将其与服务器发送的哈希值进行比较。如果两个哈希值匹配,则客户端知道消息一定来自服务器,而不是其他任何人。

注意:您以纯文本形式发送消息,因此该系统没有保密性。这种签名机制只保证完整性和真实性。如果您还需要保密,您可以使用传统加密来加密消息,而不是以纯文本形式发送。

TLS会做这类事情,因此您可以考虑将其用作数据通道。

于 2012-05-30T02:33:30.473 回答
1

您的要求几乎是 TLS 的单向身份验证模式(前 SSL)的教科书描述,也称为服务器端身份验证。基本上,这就是您每次访问 https 网站时都会发生的情况。

但是假设您了解 https,我想您尝试通信的不是 http 数据,而是其他一些协议。这就是 TLS 的亮点:它在传输层上实现,因此与任何应用程序数据协议无关,您可以通过 TLS 加密/身份验证的套接字发送任意数据。

TLS 经过实战考验,与安全传输协议一样好。您自己推出的任何东西都可能不太安全 - 安全协议设计是最难做好的事情之一。

于 2012-05-30T08:20:10.950 回答