最近在看《图解 HTTP 》看到了 HTTPS 这一章
前言:
SSL 使用混合加密机制,使用公开秘钥加密共享秘钥,在确保交换的共享秘钥是安全的情况下,使用共享秘钥进行通信
疑问:
1.每次发送报文时,发送端都会将共享秘钥与被加密的报文一起发送,公开钥保证第一次共享秘钥的交换是安全的,那后续呢?难道每次交换秘钥都要用公开称秘钥加密吗?
2.共享秘钥由客户端生成还是由服务器端生成?
3.我对共享秘钥的理解是不是有问题?我理解的是共享秘钥只有一个,每次发送报文时都要随报文一起发送。如果共享秘钥是相同的两个秘钥,由服务器生成,在第一次会话时服务器将其中一个交给客户端,那这样就能解释问题 1 和问题 2 了
1
opengps 2020-12-30 21:33:35 +08:00 1
公钥的出发点是公开,所以叫公钥。私钥同理。
早在 ssl 证书申请的时候,公钥私钥就已经生成好了,你拿到的是一对固定的密钥。 |
2
eason1874 2020-12-30 22:09:42 +08:00 1
共享密钥是算出来的,不是谁发给谁的。据我了解是这样:
客户端:hello,这是我能使用的版本、密码组合和这次加密用的客户端盐(随机字符串 A ) 服务器:hello,这是我的证书、密码组合和这次加密用的服务器盐(随机字符串 B ) 客户端:收到。这是我用你的证书公钥加密过的密钥盐(随机字符串 C ) 客户端:我决定用算法 1 客户端:这是我用盐 A 、B 、C 算出来的共享密钥加密的结束信号。 服务器:收到。这是我用盐 A 、B 、C 算出来的共享密钥加密的结束信号。 客户端&服务器:共享密钥一致,安全连接已建立。 |
3
Biwood 2020-12-30 22:09:45 +08:00 1
正好最近复习了,共享秘钥准确的说法叫“会话秘钥”,是由客户端和服务端的主密钥 + 同一个随机数各自生成的,一次会话只有一个会话秘钥。
SSL 握手完成之后,所有的加密和解密都是用这一个会话秘钥,也就是所谓的对称加密,而且这个秘钥是不需要每次都传送的,因为在客户端和服务器都已经算出这个秘钥了。 其实最关键得是 SSL 最后一步,从预主密钥( pre-master key )到主密钥( master key )这一步,用的是迪菲-赫尔曼密钥交换算法( D-H 算法)。客户端和服务端能够算出一个相同的主密钥,之后的会话秘钥都依赖主密钥而生成。 |
4
fiveelementgid 2020-12-30 22:14:16 +08:00 via Android 1
你可以试试用 curl -v https 网站
|
5
fiveelementgid 2020-12-30 22:18:11 +08:00 via Android
这书看过,你需要注意的是,只有一开始采用非对称加密密钥进行通信,这个主要是用于安全传输临时生成的对称密钥(session key),然后后续通信都是用 session key 加密进行通信(对称加密),主要还是为了节省算力
|
6
webshe11 2020-12-31 05:42:57 +08:00 via Android 1
这都是现代密码学的东西,论坛也不是讲课的地方,回复里也说不清,不如直接推荐一本书,也姓图解,叫《图解密码技术》,全看完就全明白了
防止思而不学则殆,还是看书好使,加油 |