保护和验证从服务器到客户端的数据



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

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

提前谢谢。

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

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

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

TLS 会执行此类操作,因此您可以考虑将其用作数据通道。

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

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

TLS经过实战测试,几乎与安全传输协议一样好。你自己推出的任何东西都很可能不太安全 - 安全的协议设计是最难做到的。

最新更新