关于 HTTPS 我有一个疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
zhao1014
V2EX    HTTP

关于 HTTPS 我有一个疑问

  •  
  •   zhao1014 2020-12-30 21:26:41 +08:00 2602 次点击
    这是一个创建于 1746 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看《图解 HTTP 》看到了 HTTPS 这一章

    前言:

    SSL 使用混合加密机制,使用公开秘钥加密共享秘钥,在确保交换的共享秘钥是安全的情况下,使用共享秘钥进行通信

    疑问:

    1.每次发送报文时,发送端都会将共享秘钥与被加密的报文一起发送,公开钥保证第一次共享秘钥的交换是安全的,那后续呢?难道每次交换秘钥都要用公开称秘钥加密吗?

    2.共享秘钥由客户端生成还是由服务器端生成?

    3.我对共享秘钥的理解是不是有问题?我理解的是共享秘钥只有一个,每次发送报文时都要随报文一起发送。如果共享秘钥是相同的两个秘钥,由服务器生成,在第一次会话时服务器将其中一个交给客户端,那这样就能解释问题 1 和问题 2 了

    第 1 条附言    2020-12-30 23:16:49 +08:00
    感谢大佬们的解答,我稍微总结一下自己的理解:

    1.共享秘钥并非伴随报文发送,而是客户端和服务器各自计算得出

    2.仅使用共享秘钥时,客户端发起请求,并在请求中附加一个随机字符串,服务器接收该字符串,客户端和服务器各自根据该字符串计算出主秘钥,此时双方均持有相同的主秘钥

    3.之后的会话,消息发送方会生成随机字符串,并通过该字符串和主秘钥配合算出会话秘钥,使用会话秘钥加密,发送报文时,该字符串会随报文一起发送

    4.消息接收方接收到被加密的报文和字符串,使用该字符串和自己的主秘钥配合算出会话秘钥,使用会话秘钥解密

    5.之所以共享秘钥不安全,是因为第一次发送的字符串有可能被截获,如果发送该字符串时是安全的,那么后续即使随机字符串被截获,也不能解密报文,因为没有主秘钥

    6.因此,使用非对称加密保护第一次传输的随机字符串

    (细节应该有不少问题,没有深入研究过,看到大佬讲的盐的概念临时搜了一下才明白什么意思)
    6 条回复    2020-12-31 05:42:57 +08:00
    opengps
        1
    opengps  
       2020-12-30 21:33:35 +08:00   1
    公钥的出发点是公开,所以叫公钥。私钥同理。
    早在 ssl 证书申请的时候,公钥私钥就已经生成好了,你拿到的是一对固定的密钥。
    eason1874
        2
    eason1874  
       2020-12-30 22:09:42 +08:00   1
    共享密钥是算出来的,不是谁发给谁的。据我了解是这样:

    客户端:hello,这是我能使用的版本、密码组合和这次加密用的客户端盐(随机字符串 A )
    服务器:hello,这是我的证书、密码组合和这次加密用的服务器盐(随机字符串 B )

    客户端:收到。这是我用你的证书公钥加密过的密钥盐(随机字符串 C )
    客户端:我决定用算法 1
    客户端:这是我用盐 A 、B 、C 算出来的共享密钥加密的结束信号。

    服务器:收到。这是我用盐 A 、B 、C 算出来的共享密钥加密的结束信号。

    客户端&服务器:共享密钥一致,安全连接已建立。
    Biwood
        3
    Biwood  
       2020-12-30 22:09:45 +08:00   1
    正好最近复习了,共享秘钥准确的说法叫“会话秘钥”,是由客户端和服务端的主密钥 + 同一个随机数各自生成的,一次会话只有一个会话秘钥。

    SSL 握手完成之后,所有的加密和解密都是用这一个会话秘钥,也就是所谓的对称加密,而且这个秘钥是不需要每次都传送的,因为在客户端和服务器都已经算出这个秘钥了。

    其实最关键得是 SSL 最后一步,从预主密钥( pre-master key )到主密钥( master key )这一步,用的是迪菲-赫尔曼密钥交换算法( D-H 算法)。客户端和服务端能够算出一个相同的主密钥,之后的会话秘钥都依赖主密钥而生成。
    fiveelementgid
        4
    fiveelementgid  
       2020-12-30 22:14:16 +08:00 via Android   1
    你可以试试用 curl -v https 网站
    fiveelementgid
        5
    fiveelementgid      2020-12-30 22:18:11 +08:00 via Android
    这书看过,你需要注意的是,只有一开始采用非对称加密密钥进行通信,这个主要是用于安全传输临时生成的对称密钥(session key),然后后续通信都是用 session key 加密进行通信(对称加密),主要还是为了节省算力
    webshe11
        6
    webshe11  
       2020-12-31 05:42:57 +08:00 via Android   1
    这都是现代密码学的东西,论坛也不是讲课的地方,回复里也说不清,不如直接推荐一本书,也姓图解,叫《图解密码技术》,全看完就全明白了
    防止思而不学则殆,还是看书好使,加油
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     881 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 121ms UTC 21:48 PVG 05:48 LAX 14:48 JFK 17:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86