TLS协议深度解析:挖掘现代网络安全防御的底层技术

news2024/9/25 21:19:06

正常简单的通讯

1、服务器生成一对密钥,公钥A、私钥A
2、浏览器请求服务器时,服务器把公钥A传给浏览器
3、浏览器随机生成一个对称加密的密码S,用公钥A加密后传给服务器
4、服务器接收后,用私钥A解密,得到密钥S
5、浏览器和服务器都知道密钥S,就可以使用密钥S加密数据然后传输
这样看起来可以通讯,但是是有漏洞的。

中间人攻击

1、服务器生成一对密钥,公钥A、私钥A。
2、浏览器请求服务器时,服务器准备把公钥A传给浏览器;此时中间人X,生成也生成一对密钥,公钥B、私钥B,X劫持到公钥A后替换成自己的公钥B,发给浏览器。
3、浏览器无法分辨公钥B是否是服务器的,生成一个对称加密密钥S,公钥B加密后准备传给服务器,其实传给了中间人X。
4、中间人收到后,使用私钥B解密拿到密钥S,然后再使用公钥A加密传给服务器
5、服务器收到后使用私钥A解密也拿到密钥S。
6、浏览器和服务器使用密钥S加密后传输数据,此时中间人X也是持有密钥S,劫持到数据包后使用密钥S就能解密。
这种情况,服务器和客户端都不会发现异常,因为客户端无法确认收到的公钥是不是服务器的。因为公钥是明文形式传播的。如何证明公钥是服务器的,就出现CA机构?

CA机构

CA机构相当于现实中的“派出所”,数字证书就相当于“身份证”。

数字证书

网站在使用HTTPS之前,需要向CA机构申领一份数字证书,数字证书包含服务器的信息(包含版本号、序列号、签名算法、颁发者、网站服务器公钥(RSA签名公钥)等信息

数字签名

**证书会被修改吗?**证书中会包含一段私钥加密的签名,是将证书的内容进行HASH得出。如果证书被篡改,签名会对不上。这个签名就是数字签名,用来防伪的技术。
image.png

证书生成

a、CA机构有非对称加密的私钥和公钥,(私钥保存在CA服务器上,公钥(其实是CA机构证书链上的根证书的公钥)预装在各个操作系统、电脑上、Android等)
b、CA机构对证书数据X进行HASH(证书数据包括版本号、序列号、HASH签名算法、颁发者、服务器的公钥等)
c、用CA的私钥对HASH值H进行加密,得到数字签名S,并添加到证书上就是数字证书。

证书验证

a、浏览器拿到证书后,通过证书链验证颁发者是否可信,然后得到数据T,以及签名S
b、用预装的CA机构证书链上的根证书的公钥对S进行解密,得到H
c、使用证书里的HASH签名算法,对数据T进行HASH得到H1,此时H1应该等于H,说明未被篡改

质疑思考

a、**证书会被掉包吗?**证书里包含了网站的信息(包括域名等),证书如果被替换,浏览器能知道访问的网站和证书是否一致
b、**为什么数字签名要HASH一次?**证书信息一般比较长(**为什么不能只用非对称加密?**非对称加密算法可以加密的数据长度有上限,否则会报错或者需要分割加密效率极低),使用HASH算法得到证书信息的摘要,将数据变短能提高加密和传输的效率,也能更安全
c、怎么确保CA的公钥时可信的?各个操作系统、电脑上、Android设备上会预装一些CA机构的根证书,根证书中包含公钥,验证的时候通过证书链,以根证书为起点,层层信任。
d、**TLS每次都会传递密钥吗?**服务器会给每个客户端维护一个Session ID,将密钥存到对应的Session ID下,客户端请求的是时候携带Session ID(表示恢复之前的会话,如果Session ID为空时,表示不用恢复客户端和服务器重新协商密钥),服务器就会使用对应的密钥进行加密,不需要重新协商密钥。

TLS协议

TLS协议的作用
1、认证用户和服务器,确保数据发送到正确的客户机和服务器;
2、加密数据以防止数据中途被窃取;
3、维护数据的完整性,确保数据在传输过程中不被改变。

分为两层:记录层和握手层
上层-握手层包含4个协议
**握手协议 **进行身份认证、协商共享密钥
**更改密码规范协议 **根据握手协议协商的结果,切换加密密码套件
**应用数据协议 **通信双发进行数据传输的协议
**警告协议 **当以上过程发生错误时通知对方
下层-记录层
记录层协议
**添加消息头 **给数据添加消息头后封装交给TCP层
**分片重组 **发送方将数据分割成小的数据块,接收方可以将小数据块重组
**数据压缩解压缩 **对数据进行压缩和解压缩
**加密解密 **对数据进行加解密和解密

完整的握手过程

第一次握手:客户端发送

Client Hello 客户端Hello包
**Version **客户端支持的最高版本号
**Random **客户端随机数,每次握手都会重新生成(可以防止重放攻击),用于后续生成密钥
**Session ID **会话ID用于恢复会话,第一次是空表示不恢复会话,在后续的连接中,服务器可以借
助会话ID在自己的缓存中找到对应的会状态,这样只需1RTT既可以完成握手,完整
的握手协议2RTT(2次网络往返)才能完成握手
**Cipher Suites **客户端支持的所有密码套件,按优先级排列
**Compression Methods **压缩方法
**Extension **扩展数据
image.png

16进制数据分析
# 16 03 03 00 be 01 00 00 ba 03 03 64 c4 d9 0a 37 40 a3 af d6 27 66 d1 bb 29 d0 53 c8 e0 dc 14 16 06 cf d1 1a 40 eb c0 d3 67 48 57 00 00 26 c0 2c c0 2b c0 30 c0 2f c0 24 c0 23 c0 28 c0 27 c0 0a c0 09 c0 14 c0 13 00 9d 00 9c 00 3d 00 3c 00 35 00 2f 00 0a 01 00 00 6b 00 00 00 0f 00 0d 00 00 0a 68 61 6f 2e 71 71 2e 63 6f 6d 00 05 00 05 01 00 00 00 00 00 0a 00 08 00 06 00 1d 00 17 00 18 00 0b 00 02 01 00 00 0d 00 1a 00 18 08 04 08 05 08 06 04 01 05 01 02 01 04 03 05 03 02 03 02 02 06 01 06 03 00 23 00 00 00 10 00 0e 00 0c 02 68 32 08 68 74 74 70 2f 31 2e 31 00 17 00 00 ff 01 00 01 00 

16 03 03 00 be
Record Header 		记录头	
16 			握手类型 0x16
03 03 		协议版本为3.3(也称为TLS 1.2)
00 be 		接下来是190字节的握手消息

01 00 00 ba
Handshake Header	握手头
01 			握手消息类型(客户端hello)
00 00 ba  	接下来是186字节的客户端hello数据

03 03 
Client Version 		客户端协议版本为3.3,也称为TLS 1.2

64 c4 d9 0a 37 40 a3 af d6 27 66 d1 bb 29 d0 53 c8 e0 dc 14 16 06 cf d1 1a 40 eb c0 d3 67 48 57
Client Random 		32位客户端随机数

00
Session ID 			会话ID,长度为0表示没有会话ID


00 26 c0 2c c0 2b c0 30 c0 2f c0 24 c0 23 c0 28 c0 27 c0 0a c0 09 c0 14 c0 13 00 9d 00 9c 00 3d 00 3c 00 35 00 2f 00 0a 
Cipher Suites 		密码套件
00 26 			38字节的密码套件数据
c0 2c			Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (0xc024)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
                Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
                Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003d)
                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)

01 00
Compression Methods 	压缩方法
01 			1字节的压缩方法如下
00 			0表示没有压缩

00 6b
Extensions Length		扩展数据长度为107字节

00 00 00 0f 00 0d 00 00 0a 68 61 6f 2e 71 71 2e 63 6f 6d 00 05 00 05 01 00 00 00 00 00 0a 00 08 00 06 00 1d 00 17 00 18 00 0b 00 02 01 00 00 0d 00 1a 00 18 08 04 08 05 08 06 04 01 05 01 02 01 04 03 05 03 02 03 02 02 06 01 06 03 00 23 00 00 00 10 00 0e 00 0c 02 68 32 08 68 74 74 70 2f 31 2e 31 00 17 00 00 ff 01 00 01 00 
Extension 				扩展数据

第二次握手:服务器发送

Server Hello 服务器Hello包
**Version **服务器端的版本号
Random 服务器端的随机数,用于生成密钥
Cipher Suite 服务器从浏览器密码套件中选择一个回复
**Compression Methods **压缩方法
**Extension **扩展数据
image.png
注意:
密码套件结构:密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法
_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 _
ECDHE 密钥交换算法(短暂-椭圆曲线-迪菲-赫尔曼)
RSA 签名算法,证书里的公钥用的是RSA算法,用于身份验证
AES_128_GCM 对称加密,数据加密,分组模式是 GCM
SHA256 数据摘要算法,用于证书的签名和验签
TLS_RSA_WITH_AES_128_GCM_SHA256 表示密钥交换算法和签名算法都是RSA

16 03 03 00 54 
Record Header 		记录头	
16 			握手类型 0x16
03 03 		协议版本为3.3(也称为TLS 1.2)
00 54 		接下来是84字节的握手消息

02 00 00 50
Handshake Header	握手头
01 			握手消息类型(服务器hello)
00 00 50  	接下来是80字节的服务器hello数据

03 03
Server Version 		服务器协议版本为3.3,也称为TLS 1.2

54 49 db a3 2d d9 b1 6e d3 0d 05 4a c8 56 a1 1d 94 9b 2a f3 3c 75 e4 a9 a9 da e2 50 22 c8 7d 04 
Server Random 		服务器随机数

00
Session ID  		会话ID

c0 2f 
Cipher Suite		加密套件
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)

00
Compression Method	压缩方法00表示不压缩

00 28
Extensions Length 	接下来扩展数据长度为40字节

ff 01 00 01 00 00 00 00 00 00 0b 00 04 03 00 01 02 00 23 00 00 00 10 00 0b 00 09 08 68 74 74 70 2f 31 2e 31 00 17 00 00
Extension  			

Certificate 服务器的证书信息
包含X.509证书链,主证书第一个,之后是中间证书、根证书
证书包含:版本号、序列号、签名算法、颁发者、网站服务器公钥(RSA签名公钥)
用CA的私钥加密的证书的摘要信息,即证书签名
image.png

16 03 03 0b a8
Record Header 
16 						握手类型 0x16
03 03 					协议版本为3.3(也称为TLS 1.2)
0b a8 					接下来是2984字节的握手消息

0b 00 0b a4 
Handshake Header
0b 						握手消息类型(服务器certificate)
00 0b a4   				接下来是2980字节的服务器certificate数据

00 0b a1 
Certificates Length 	证书链的长度为 2977字节

00 06 8f 
Certificate Length 		第一个证书的长度为 1679字节

30 82 06 8b 30 82 05 73 a0 ......
Certificate				证书内容

00 05 0c
Certificate Length		第二个证书的长度为1292

30 82 06 8b 30 82 05 73 a0 ......
Certificate				证书内容






Server Key Exchange 密钥交换
**Curve Type **曲线类型
**Named Curve **曲线名称,选择x25519,即确定好椭圆曲线基点G
G确定好之后,服务器会生成一个随机数做为x25519的私钥Server PrivKey,保存在本地不公开,再根据G和Server PrivKey计算出椭圆曲线的公钥Server Pubkey(公钥/私钥都是临时的,只在本次会话中使用,图中的Pubkey)传送给客户端
为确保Pubkey不被中间人篡改,服务端会用RSA签名算法给Pubkey做个签名,RSA私钥保存再服务器,RSA公钥已经放在证书中传给客户端(签名算法是私钥签名,公钥验签)。
image.png

Server Hello Done 服务器所有握手信息都发送完毕
image.png

第三次握手:客户端发送

第三次握手之前,客户端会先验证服务器的证书
1、证书链是否可信
2、证书是否吊销
3、证书是否在有效期内
4、证书中的域名是否是当前要访问的域名

证书链的验证过程:

一般情况下,服务器向CA申请的证书不是根证书,而是中间证书签发的,所以客户端其实是拿到了一个证书链,百度的证书层次结构有三级:
image.png
1、客户端收到百度的证书后,发现这个证书的签发者不是根证书,就无法根据本地已有的根证书中的公钥去验证百度证书是否可信。于是,客户端根据百度证书中的签发者,找到该证书的颁发机构是GlobalSign RSA OV SSL CA 2018,然后向 CA 请求该中间证书。
2、请求到证书后发现GlobalSign RSA OV SSL CA 2018证书是由GlobalSign签发的,由于GlobalSign它是根证书,也就是自签证书。应用软件会检查系统中有没有预装CA根证书,如果有则可以利用根证书中的公钥去验证 GlobalSign RSA OV SSL CA 2018 证书,如果发现验证通过,就认为该中间证书是可信的。
3、GlobalSign RSA OV SSL CA 2018 证书被信任后,可以使用 GlobalSign RSA OV SSL CA 2018证书中的公钥去验证baidu.com证书的可信性,如果验证通过,就可以信任baidu.com证书
其实客户端最开始只信任根证书GlobalSign的证书,然后GlobalSign信任GlobalSign RSA OV SSL CA 2018,最后GlobalSign RSA OV SSL CA 2018又信任baidu.com证书,最终客户端也信任baidu.com证书
4、baidu.com证书可信后,客户端会得到RSA的公钥,并对服务端的Pubkey进行签名验证
操作系统中保存的根证书
image.png
Client Key Exchange 客户端生成的椭圆曲线公钥发给服务器
证书验证通过后,客户端会根据服务器给的椭圆曲线算法生成一对自己的临时密钥Client PrivKey和 Client PubKey,并将Client PubKey用证书中的RSA公钥进行加密后发给服务器,就是图中的Pubkey
image.png
完成后客户端和服务端共享信息:Client Random、Server Random、椭圆曲线类型和名称、基点G、服务器椭圆曲线的公钥、客户端的椭圆曲线公钥。
此时客户端就可以计算会话密钥,会话密钥是基于对称加密的,会话密钥取决于主密钥,而组成主密钥的关键参数市预主密钥,密钥交换就是交换双方的预主密钥
1、客户端临时私钥、服务端临时公钥、以及椭圆曲线算法,计算出预主密钥(premaster secret),服务器也可以算出相同的预主密钥
pre_master_secret = ClientPrivKey * ServerPubKey
2、客户端随机数、服务端随机数、预主密钥,计算出主密钥(master secret)
PRF伪随机函数函数
master_secret = PRF(pre_master_secret, “master secret”, ClientHello.random + ServerHello.random)
3、客户端随机数、服务端随机数、主密钥 计算出最终的会话密钥,包含对称加密密钥,消息认证码密钥、初始化向量。
key_block = PRF(master_secret, “key expansion”, server_random + client_random)
因为 TLS 设计者不信任客户端或服务器「伪随机数」的可靠性,为了保证真正的完全随机,把三个不可靠的随机数混合起来,那么「随机」的程度就非常高了,足够让黑客计算出最终的会话密钥,安全性更高。
Change Cipher Spec 消息表示客户端已生成加密密钥,并切换到加密模式(密钥规格变更协议)
Encrypted Handshake Message 消息发送到服务器进行校验,这个对称加密密钥是否成功
image.png
客户端将之前所有的握手数据做一个HASH,再用最后协商好的对称加密算法对数据做加密。发送到服务器进行验证。

第四次握手:服务器发送

服务器在收到客户端Client Key Exchange消息后,这时可以拿到 Client Random、Server Random、客户端临时公钥Client PubKey,先计算出预主密钥(ClientPubKey * ServerPrivKey),再分别计算出主密钥和最终的会话密钥,这块可参考客户端计算密钥一样的。
New Session Ticket 服务器给客户端的Session ID,用于恢复会话
Change Cipher Spec 告诉客户端,服务端已生成密钥,请求客户端切换加密模式。
Encrypted Handshake Message 服务器对握手的所有数据用协商好的对称加密算法加密,供客户端校验。
image.png
此时整个握手完毕,已经建立一个安全的通信隧道,可以传输数据。

双方发送应用数据协议

image.png
整个握手过程完毕之后,我们会看到应用数据协议 “Application Data Protocol: http-over-tls”,之后我们的客户端/服务端建立一个安全通信隧道,就可以发送应用程序数据了。

在 RSA 握手中密钥交换:

1、客户端向服务器发送一条明文 “hello” 消息,其中包括他们要使用的协议版本、受支持的密码套件列表和称为“客户端随机数”的随机数据短字符串。
2、服务器使用其证书、首选密码套件和一个不同的随机数据短字符串(称为“服务器随机数”)响应(以明文格式)。
3、客户端验证证书,创建另一组随机数据46字节,称为“预主密钥(premaster secret)”。客户端从服务器的证书中获取公钥,加密预主密钥,并将其发送到服务器;只有拥有私钥的人员才能解密预主密钥。
4、该服务器解密“预主密钥”。注意,这是唯一一次使用私钥!
5、客户端和服务器都有客户端随机数、服务器随机数和预主密钥。根据这三个数计算得到主密钥,再通过主密钥计算得到会话密钥,会话密钥市对称的,会话期间的所有后续通信都用这些新会话密钥进行加密。

前向安全性问题:

RSA密钥交换的简单性也是它最大的弱点。用于加密预主密钥的服务器公钥,一般会保持多年不变。任何能够接触到对应私钥的人都可以恢复预主密钥,并构建相同的主密钥,从而危害到会话安全性。
对目标的攻击并不需要实时进行,强大的对手可以制定长期行动。攻击者会记录所有加密的流量,耐心等待有朝一日可以得到密钥。比如,计算机能力的进步使暴力破解成为可能;也可以通过法律强制力、政治高压、贿赂或强行进入使用该密钥的服务器来取得密钥。只要密钥泄露,就可以解密之前记录的所有流量了。
TLS中其他常见的密钥交换方式都不受这个问题的影响,被称为支持前向保密。使用那些密钥交换时,每个连接使用的主密钥相互独立。泄露的服务器密钥可以用于冒充服务器,但不能用于追溯解密任何流量。

为什么HTTPS的包可以被抓到?
首先抓包之前,fiddler会提示安装自己的根证书到操作系统(我们主动把它添加到了受信任的根证书颁发机构,所以我们计算机是认可这个证书的)
1、fiddler截获客户端发送的HTTPS,然后伪装成客户端向服务器发送请求
2、服务器返回数据,fiddler截获服务器的CA证书,用跟证书的公钥进行解密,验证服务器数字签名,获取服务器CA证书的公钥,然后fiddler伪造自己的CA证书,冒充服务器证书发给客户端,此时Fiddler就是中间人,可以截获客户端和服务器之间的数据。
3、Fiddler的根证书是能抓包的关键,这也是Fiddler伪造的CA证书能够获得客户端和服务器端信任的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习心得08:OpenGL

我是想学习一下如何编程,这本书大多介绍的是原理。这两个完全是一回事。所以我又买了另外一本看看。

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER(二)

文章目录 TASK系列解析文章OptimizeByNLP1.get_nlp_info()定义问题规模2.get_bounds_info()定义约束边界约束3.get_starting_point()定义初值4.eval_f()求解目标函数5.eval_grad_f()求解梯度6.eval_g()求解约束函数7.eval_jac_g()求解约束雅可比矩阵8.eval_h()求解黑塞矩阵9. f…

2023年9月CDGA/CDGP数据治理认证考试报名,找弘博创新

据DAMA中国官方网站消息,2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启,相关事宜通知如下: 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…

四年级上册思维导图怎么绘制?简单漂亮绘制方法分享

四年级上册思维导图怎么绘制?思维导图是一种非常实用的工具,它可以帮助我们将复杂的想法和信息以图形化的方式呈现出来,让我们更加清晰地理解问题,并且更加容易地进行思考和决策。如果你需要绘制思维导图的话,那么今天…

抖店开通后要做的基础搭建,店铺快速起店的关键,建议认真看完

我是王路飞。 你是不是以为开通抖店之后,就没啥事了,可以直接选品上架了? 错了! 在你选品上架之前,还有一步非常关键,就是店铺的基础搭建。 如果一些基础功能你没开通、设置没做好的话,是会…

C高级 第二天 shell指令

写一个1.sh脚本,将以下内容放到脚本中: 在家目录下创建目录文件,dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中 把当前目录下的的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1…

buuctf web 前5题

目录 一、[极客大挑战 2019]EasySQL 总结: 二、[极客大挑战 2019]Havefun 总结: 三、[HCTF 2018]WarmUp 总论: 四、[ACTF2020 新生赛]Include 总结: 五、[ACTF2020 新生赛]Exec 总结: 一、[极客大挑战 2019]…

leetcode897. 递增顺序搜索树(java)

递增顺序搜索树 题目描述中序遍历代码演示 递归专题 题目描述 难度 - 简单 LC - 897. 递增顺序搜索树 给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子…

[.NET学习笔记] - Thread.Sleep与Task.Delay在生产中应用的性能测试

场景 有个Service类,自己在内部实现生产者/消费者模式。即多个指令输入该服务后对象后,Service内部有专门的消费线程执行传入的指令。每个指令的执行间隔为1秒。这里有两部分组成, 工作线程的载体。new Thread与Task.Run。执行等待的方法。…

大学生如何进行有效的时间管理?用待办清单APP高效管理个人时间

大学生的课外时间比较多,为了避免珍贵的时间被浪费,个人时间管理成为必不可少的技能。合理利用时间不仅能提高学习效率,还能充分发展自己的兴趣爱好和个人能力。那么,大学生如何实现有效的时间管理呢? 要实现有效的时…

GPT与BERT模型

NLP任务的核心逻辑是“猜概率”的游戏。BERT和GPT都是基于预训练语言模型的思想,通过大量语料训练得到语言模型。两种模型都是基于Transformer模型。 Bert 类似于Transformer的Encoder部分,GPT类似于Transformer的Decoder部分。两者最明显的在结构上的差…

【Matlab】Matlab实现数据的动态显示方法

Matlab实现数据的动态显示方法 主要为大家详细介绍了Matlab使用Plot函数实现数据动态显示方法,具有一定的参考价值,感兴趣的小伙伴们可 以参考一下 对于真实系统或者仿真平台,数据是增量式的产生的。Matlab除了强大的矩阵运算外,还…

PHP实践:用Yconf配置扩展为项目插上性能的翅膀

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

发布自定义node包,实现自定义脚本命令

比方说yarn,cnpm,vite等命令,无需执行node xxxx,可以自定义执行并完成一些操作 创建一个文件夹如下 在index.js中输入 #!/usr/bin/env node console.log(hello world);在package.json中添加 {...,"bin": {"pack…

USB——硬件控制器分类(OHCI UHCI EHCI xHCI)))

文章目录 OHCIUHCIEHCIxHCIKHCI HCI:Host Controller Interface 主机控制器接口 OHCI、UHCI都是USB1.1的接口标准 EHCI是对应USB2.0的接口标准 xHCI是USB3.0的接口标准 OHCI 全称为 Open Host Controller Interface,这是一种 USB 控制器标准&#…

陇剑杯2023线上wp

1. hard_web hard_web_1 题目内容:服务器开放了哪些端口,请按照端口大小顺序提交答案,并以英文逗号隔开(如服务器开放了 80 81 82 83 端口,则答案为 80,81,82,83) 半开放扫描 端口开放状态 攻击机发送 SYN 请求连接此端口靶机…

八、Linux中的用户与文件权限

1、普通用户与特权用户 (1)在Linux中,和windows中一样。用户分为普通用户和特权用户。 特权用户:拥有系统管理的绝对权限。普通用户:普通用户的权限受到限制,只拥有基本的权限,某些操作没有权限。 (2)Linux中的特权…

瑞芯微RK3588开发板:虚拟机yolov5模型转化、开发板上python脚本调用npu并部署 全流程

目录 0. 背景1. 模型转化1.1 基础环境1.2 创建python环境1.3 将yolov5s.pt转为yolov5s.onnx1.4 将yolov5s.onnx转为yolov5s.rknn 2. 开发板部署2.1. c版本2.1. python版本(必须是python 3.9) 3. 性能测试 0. 背景 全面国产化,用瑞芯微rk3588…

YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

soft-nmslink 1、复制到utils-general.py下 2、找到nms的代码,在它前面复制过来就行 3、在之前的nms模块下修改,注释 4、选择iou的地方,默认正常的 5、xxtrue即可 6、训练的时候开启,会增加训练成本 7、在test的时候用 8、密集…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Maven目录结构和idea的整合

Maven工程目录结构约束(约束>配置>代码) 项目名 src【书写源代码】 main【书写主程序代码】 java【书写java源代码】resources【书写配置文件代码】 test【书写测试代码】 java【书写测试代码】 pom.xml【书写Maven配置】 测试步骤(进入项目名根目录【在根…