繁体   English   中英

使用 OpenSSL / AES 的网络加密解释

[英]Network Encryption with OpenSSL / AES explained

我对此很陌生,所以我遵循了一些教程,并在 C++ 中为客户端 - 服务器之间使用公钥和私钥的数据包制作了一个加密/解密示例。

结果很有希望,工作也很好,但我很困惑,真的很困惑,我不能犯错误(尤其是在商业环境中)。

请向我解释我应该如何使用加密/解密,目前我有:

  • 使用公钥加密并使用私钥解密的流量
  • 使用私钥加密并使用公钥解密的流量

我需要了解并知道哪个是正确的方法用法,这是我的理解(请不要笑):

**

  • SERVER(使用私钥加密流量)-> CLIENT(使用公钥解密流量)
  • CLIENT(使用公钥加密流量)-> SERVER(使用私钥解密流量)

**

所以我的问题如下:

  • 这是我所拥有的正确吗?
  • 公钥是否转到客户端,而私钥留在服务器上?
  • 是否还有其他可能发生的安全问题?

非常感谢

您想了解非对称加密(公钥加密)。 基本上来说,每一方都会生成一对密钥 - (私钥和公钥,以某种方式相关)。

了解 OpenSSL 与 ssl 证书有关,您必须了解这一点才能使用 ssl。 尝试阅读: 为初学者解释的 SSL。

它与服务器-客户端没有必然关系。

例如,您有一对钥匙。

然后,你的公钥发送给你的朋友,朋友用你给他的公钥加密数据并发送给你。

现在,您可以使用您的私钥解锁(解密)加密的数据。

您可以在以下资源中了解这一重要主题:

  1. 来自维基:公钥密码学
  2. 解释视频:解释加密类型
  3. 非对称加密解释:视频
  4. 公钥加密视频:以 Diffie-Hellman 为例
  5. 为了更深入的理解: RSA算法解释+示例

密码学很复杂,您应该在使用它们之前完全理解这些协议,尤其是在商业环境中。 所以Ofer Arial是对的,有必要进一步阅读。

但是你问的是好事,因为你的例子实际上是错误的。 这里是更正的版本:

  • A 使用 B 的公钥加密流量 -> B 使用 B 的私钥解密流量
  • B 使用 A 的公钥加密流量 -> A 使用 A 的私钥解密流量

我使用 A 和 B 而不是服务器和客户端,因为这同样适用于任何类型的连接:服务器-客户端、客户端-客户端、服务器-服务器。

概述显示服务器和客户端都有自己的密钥对。 一般情况下,发送方总是使用接收方的公钥加密,接收方使用自己的私钥解密。

你的版本有什么问题? 好吧,每个拥有公钥的人都可以读取发送到客户端的流量,因此加密没有意义。

除了加密之外,连接还需要身份验证,因此每一方都知道(加密的)消息实际上来自正确的人。 所以密钥对也用于认证:

  • A 使用 A 的私钥对流量进行签名 -> B 使用 A 的公钥验证流量是否来自 A
  • B 使用 B 的私钥对流量进行签名 -> A 使用 B 的公钥验证流量是否来自 B

使用相同的密钥对进行加密和认证

  • 私钥用于解密签名
  • 公共密钥用于加密验证

现在,A 和 B 如何获得公钥,他们如何确保获得正确的公钥? 要么您亲自见面并互相传递,要么使用可信赖方的证书

这只是一个简短的答案,但如前所述,进一步阅读是必要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM