首先,如果我发现任何错误,请告诉我。
整个私钥和公钥概念让我困惑不已。据我所知,RSA 基本上同时使用公钥和私钥。公钥是公开未知的,这意味着每个人都可以得到它。
所以这就引出了一个问题:私钥的用途是什么?私钥对每个主机都是唯一的吗?它是固定的还是动态生成的?私钥是否通过网络发送以解密数据?如果是这样的话,为什么完全窃听连接的 MITM 不能窃取/获取/获得私钥?
问题太多了。我一直在重读以前的类似问题,但我并不想知道复杂的数学,我只是想知道基本概念。
感谢所有回答的人。
答案1
私钥是否会通过网络发送以解密数据? 如果是这样,为什么完全窃听连接的 MITM 无法窃取/获取/获得私钥?
事实并非如此,非对称加密的真正意义就在于参与者永远不需要互相发送私钥。
(例如,TLS 服务器或 SSH 主机仅提供其公钥和证明拥有私钥——几乎总是以可以使用公钥进行验证的方式计算的数字签名。
公钥和私钥总是成对出现(通常先生成私钥,然后再生成公钥)衍生的对称加密(英语:Private key cryptography)是一种加密技术,它是一种非对称加密,即用公钥加密的数据不能用同一个公钥再次解密,只能用相应的私钥解密。
因此,如果您谈论加密,总体流程大致如下:
- 接收者 R 有一对公钥/私钥。发送者 S 没有密钥,只有一些要发送的数据。
- 接收者 R 仅向发送者 S 提供其公钥。
- 发送者 S 使用 R 的公钥加密数据并将其发送给 R。
- R 使用自己的私钥解密收到的数据。
但请记住,数据加密并不是非对称加密的主要用途。当然,它有其用途,但绝大多数非对称加密都用于 1) 数字签名和 2) 密钥交换。
(数字签名是不对称的密码学,但不是不对称的加密。确实,创建 RSA 数字签名的算法看起来与用于 RSA 加密的算法类似 – 以至于有人说“签名是向后加密” – 但这非常具有误导性。)
数字签名则正好相反:一旦发送者使用自己的私钥签署了某些内容,接收者只要拥有相应的公钥就足以验证签名;根本不需要将私钥发送到任何地方。(同样,这就是为什么它被称为“非对称”加密。)
在大多数情况下,TLS 证书和 SSH 密钥的工作方式是签名;SSH 服务器向您发送一个临时签名,以证明它拥有其“主机”私钥,然后您的客户端向其发送另一个签名,以证明您拥有 id_rsa 私钥。(过去曾使用基于加密的方案来实现此目的,但现在不再使用;签名方案更加通用。)
您询问“主机”是否将 RSA 密钥发送给对方进行加密,以及这些密钥是固定的还是动态的。在大多数情况下(假设您指的是 TLS 或 SSH 等典型协议),答案是“以上都不是”,因为这些协议不使用首先使用 RSA 加密连接。
相反,在 TLS 和 SSH 中,密钥交换算法用于允许两个主机以某种方式创建对称密钥,然后将该密钥与传统对称算法(如 AES)一起使用。
密钥交换能可以使用普通的非对称加密来实现(例如服务器发送公钥,客户端用公钥加密对称密钥),但在实践中很少这样做;TLS 和 SSH 都倾向于使用专用的“密钥交换算法”(几乎总是 Diffie-Hellman 算法的变体),该算法允许两个主机生成密钥而无需实际将其发送给对方。
因此,实践中涉及几种不同类型的密钥,它们具有不同的生命周期:
如果服务器具有类似 TLS 的证书(或类似 SSH 的“主机密钥”),则该证书具有固定的密钥对,并且该密钥对几乎总是用于签名,而不是用于加密。
如果使用 Diffie-Hellman (DH) 密钥交换来建立加密,则两个主机通常每次都生成新的 DH 密钥。
当然,用于实际加密(AES)的临时对称密钥是动态生成的。
最后,如果客户有一个证书(就像 SSH 中的用户密钥对),它也是固定的,并且通常仅用于签署数据,而不是加密数据。
(当然,所有这些在协议甚至协议版本之间差异很大,例如,SSHv1 确实使用临时 RSA 密钥,而 SSLv3 确实支持使用固定 DH 密钥,有时证书的密钥用于加密而不是 DH,等等......)