作者回复: 1)结论正确,但是解释不太妥当。HTTPS 可以达到数据在网络传输过程中的可靠性,但是支付过程是一个复杂和综合性的行为,涉及到的过程和角色远不只有 HTTPS 连接和它的客户端、服务端,因此 HTTPS 的安全性结论无法推广到整个支付过程和支付行为的安全性结论。
2)性能是一个非常重要的因素,说得很好,因为非对称性加密的性能要比对称性加密的性能差很多,特别是在被加密数据量比较大的时候,但它的问题在于无法把密钥传递到对端,因此我们才使用了非对称加密的方式来帮助做到这一点。但是,还有其它原因,比如说,对称性密钥是每次会话生成的,会话以外自动失效,这就像武功唯快不破一样,通常很短的时间就更换掉了;如果使用非对称性加密方式来传输实际数据,因为它只在最开始的时候生成一次,而不是每次会话都生成,因此在传输中同一个公钥会被发给多个不同的客户端,因此第三方的中间人可以使用这个公开的公钥解密服务端发给其它客户端的数据,这显然不具备安全性。
作者回复: 这是一个很好的问题。
有“公钥加密,私钥解密”,但其实也有“私钥加密,公钥解密”。
从消息保密的角度来说,一般我们都是使用公钥加密,私钥解密。这样才能让消息保密,即便被第三方窃取了消息,消息内容也不会泄露。如果是这个用途,那么你说的完全正确。
但是 non-repudiation 则是反过来,使用私钥加密,目的就是让对方,以及可能出现的第三方使用公钥解密,这样大家都能证明消息已经确实被发送了,因为在私钥没有泄露的情况下,这条消息是无法被创建的,这也就使得“否认”(repudiation)变得不可能。
作者回复: 这种方式(传统 RSA 方式)下,C 是通过非对称密钥加密的,因此攻击者拿到加密后的 C,却无法解密。最后的对称密钥的计算,需要解密后的 C。
至于 A 和 B 因子的引入,是为了提高 pre-master 的随机性。
作者回复: 对。对于证书做摘要得到指纹,这个指纹无论是发布方还是客户端得到的,它们必须一致,要不然校验就失败了。
作者回复: 这个取决于你自己吧 :) 理解内容最重要。
作者回复: 1. 是会话密钥
2. 这就不会了,因为前面的机制保证了会话密钥仅此两份
作者回复: 👍
作者回复: 感谢回答。
正确,但不完整,你可以看看别人的回答。
作者回复: 感谢答复!
第一问,回答举的例子非常好,HTTPS 只能保证连接的可靠,如果连接目标都是错的,那么安全性就无从谈起。
第二问,描述的内容也是正确的,当然,两者都有可以补充的内容。
关于你的三个问题:
1. 无论是客户端还是服务端,对前面所有的传输的数据做一次摘要,再解密对端传过来的消息,二者进行比较。
2. 摘要,其实就是指一种单向的哈希算法,比如 MD5、SHA-1。
3. 这个我不清楚怎样设定。
作者回复: 好问题!
目前的 TLS 机制无法单独保证 Repudiation(否认),请注意我在文中也写到“第四个问题还需要引入数字签名来解决”。
Repudiation 的解决,必须要靠类似数字签名这样的机制:A 必须收到 B 经过对方私钥加密的消息,这样 A 再使用 B 的公钥解密。而公钥是公开的,也是通过证书等权威形式认证的,所有人都是可以拿到的,公证方一使用 B 的公钥解密,就可以证明这条消息确实来自 B,那么 B 也就无法否认事实了。当然,实际操作的过程中私钥加密的未必是原始信息,也可以是原始信息的散列值,从而保证效率,但效果是一样的,这也是我们看到的数字签名的原理。
作者回复: 加密的内容包含了前面连接过程所有传输的数据,并进行摘要,得到的这个数据串,发送到对端;而对端也拥有所有的数据,经过同样的摘要,那么它应该和对端传过来的摘要相等。这个过程对于客户端和服务端来说都是类似的。