TLS协议分析 (三) record协议

TLS1.2 AEAD GCM TLS1.2 AEAD GCM的计算 TLS1.2中记录层协议对数据的保护方法支持三种算法: (源自RFC 5246中6.2.3) Null or Standard Stream Cipher CBC Block Cipher AEAD Ciphers 我在抓包的过程中,发现算法套件是AES_GCM, 因此是属于AEAD Ciphers,AEAD的另一种算法是CCM,这里不做介绍,感兴趣的可以去... 阅读详情

4. record 协议

record协议做应用数据的对称加密传输,占据一个TLS连接的绝大多数流量,因此,先看看record协议
图片来自网络:
图片

Record 协议 — 从应用层接受数据,并且做:

  1. 分片,逆向是重组
  2. 生成序列号,为每个数据块生成唯一编号,防止被重放或被重排序
  3. 压缩,可选步骤,使用握手协议协商出的压缩算法做压缩
  4. 加密,使用握手协议协商出来的key做加密/解密
  5. 算HMAC,对数据计算HMAC,并且验证收到的数据包的HMAC正确性
  6. 发给tcp/ip,把数据发送给 TCP/IP 做传输(或其它ipc机制)。

4.1. SecurityParameters

record层的上述处理,完全依据下面这个SecurityParameters里面的参数进行:

struct {
    ConnectionEnd  entity;
    PRFAlgorithm   prf_algorithm;
    BulkCipherAlgorithm    bulk_cipher_algorithm;
    CipherType     cipher_type;
    uint8          enc_key_length;
    uint8          block_length;
    uint8          fixed_iv_length;
    uint8          record_iv_length;
    MACAlgorithm   mac_algorithm;
    uint8          mac_length;
    uint8          mac_key_length;
    CompressionMethod  compression_algorithm;
    opaque         master_secret[48];
    opaque         client_random[32];
    opaque         server_random[32];
} SecurityParameters;

record 层使用上面的SecurityParameters生成下面的6个参数(不是所有的CipherSuite都需要全部6个,如果不需要,那就是空):

 client write MAC key
 server write MAC key
 client write encryption key
 server write encryption key
 client write IV
 server write IV

当handshake完成,上述6个参数生成完成之后,就可以建立连接状态,连接状态除了上面的SecurityParameters,还有下面几个参数,并且随着数据的发送/接收,更新下面的参数:

  • compression state
    当前压缩算法的状态。
  • cipher state
    加密算法的当前状态,对块加密算法比如aes,包含密码预处理生成的轮密钥(感谢温博士指出) “round key”,还有IV等;对于流加密,包含能让流加密持续进行加解密的状态信息
  • sequence number
    每个连接状态都包含一个sequence number,并且读和写状态有不同的sequence number。当连接开始传输数据时,sequence number必须置为0. sequence number 是uint64类型的,并且不得超过 $ 2^{64}-1$ 。s. Sequence number不得回绕。如果一个TLS实现无法避开回绕一个sequence number,必须进行重协商。sequence number在每个record被发送时都增加1。并且传输的第1个Record必须使用0作为sequence number。

此处有几个问题值得思考:

(1). 为什么MAC key , encryption key, IV 要分别不同?

在密码学中,对称加密算法一般需要encryption key,IV两个参数,MAC算法需要MAC key参数,因此这3个key用于不同的用途。
当然,不是所有的算法都一定会用到这3个参数,例如新的aead型算法,就不需要MAC key。

(2). 为什么client和server要使用不同的key
如果TLS的双方使用相同的key,那么当使用stream cipher加密应用数据的时候,stream cipher的字节流在两个方向是一样的,如果攻击者知道TLS数据流一个方向的部分明文(比如协议里面的固定值),那么对2个方向的密文做一下xor,就能得到另一个方向对应部分的明文了。

还有,当使用 aead 比如 aes-gcm 做加密的时候,aead标准严格要求,绝对不能用相同的 key+nonce 加密不同的明文,故如果TLS双方使用相同的key,又从相同的数字开始给nonce递增,那就不符合规定,会直接导致 aes-gcm 被攻破。

参考:
http://crypto.stackexchange.com/questions/2878/separate-read-and-write-keys-in-tls-key-material

4.2. record层分段

如上图所示,对要发送的数据流,首先分段,分段成如下格式:

struct {
    uint8 major;
    uint8 minor;
} ProtocolVersion;enum {
    change_cipher_spec(20), alert(21), handshake(22),
    application_data(23), (255)
} ContentType;struct {
    ContentType type;
    ProtocolVersion version;
    uint16 length;
    opaque fragment[TLSPlaintext.length];
} TLSPlaintext;
  • version字段
    ,定义当前协商出来的TLS协议版本,例如 TLS 1.2 version 是 { 3, 3 }
  • length字段
    即长度,tls协议规定length必须小于 214,一般我们不希望length过长,因为解密方需要收完整个record,才能解密,length过长会导致解密方需要等待更多的rtt,增大latency,破坏用户体验,参考 [Web性能权威指南] 链接 http://book.douban.com/subject/25856314/ TLS那一章。
  • type字段
    ,用来标识当前record是4种协议中的哪一种,

record压缩 : TLS协议定义了可选的压缩,但是,由于压缩导致了 2012 年被爆出[CRIME攻击,BREACH攻击] 链接 https://en.wikipedia.org/wiki/CRIME ,所以在实际部署中,一定要禁用压缩。
http://www.unclekevin.org/?p=640
http://www.freebuf.com/articles/web/5636.html

4.3. record层的密码学保护

record层的密码学保护:

经过处理后的包格式定义如下:

struct {
    ContentType type;
    ProtocolVersion version;
    uint16 length;    select (SecurityParameters.cipher_type) {    
        case stream: GenericStreamCipher;        
        case block:  GenericBlockCipher;        
        case aead:   GenericAEADCipher;
    } fragment;
} TLSCiphertext;

TLS协议设计目标中的 1.保密(encryption) 2.完整性(authentication) ,和防重放就在这里实现。
实现方式有3类:

  1. Block Cipher (CBC mode of operation) + HMAC:例如 aes-128-cbc+hmac-sha256
  2. Stream Cipher (RC4) + HMAC
  3. Authenticated-Encryption using block cipher (GCM/CCM 模式):例如 aes-128-gcm

1.Block Cipher+HMAC 和 2.Stream Cipher + HMAC 的各类算法目前(2015年)都已经爆出各种漏洞(后文解释),目前最可靠的是 3.Authenticated-Encryption 类的算法,主要就是aes-gcm,下一代的TLS v1.3干脆只保留了3.Authenticated-Encryption,把1和2直接禁止了(所以。。。你真的还要继续用aes-cbc吗?)。

GCM模式是AEAD的,所以不需要MAC算法。
GCM模式是AEAD的一种,AEAD 的 作用类似于 Encrypt-then-HMAC ,例如 Sha256 + Salt + AES + IV

此处需要介绍一个陷阱。
在密码学历史上,出现过3种加密和认证的组合方式:

  1. Encrypt-and-MAC
  2. MAC-then-Encrypt
  3. Encrypt-then-MAC

在TLS协议初定的那个年代,人们还没意识到这3种组合方式的安全性有什么差别,所以TLS协议规定使用 2.MAC-then-Encrypt,即先计算MAC,然后把 “明文+MAC” 再加密(块加密或者流加密)的方式,做流加密+MAC,和块加密+MAC。
但是,悲剧的是,近些年,人们发现 MAC-then-Encrypt 这种结构导致了 很容易构造padding oracle 相关的攻击,例如这在TLS中,间接形成被攻击者利用,这间接导致了 BEAST 攻击 , Lucky 13攻击 (CVE-2013-0169), 和 POODLE 攻击 (CVE-2014-3566).

目前因此,学术界已经一致同意: Encrypt-then-MAC 才是最安全的!
tls使用的是 MAC-then-Encrypt 的模式,导致了一些问题。
具体比较,参见:
http://cseweb.ucsd.edu/~mihir/papers/oem.pdf
https://www.iacr.org/archive/crypto2001/21390309.pdf
http://crypto.stackexchange.com/questions/202/should-we-mac-then-encrypt-or-encrypt-then-mac
https://news.ycombinator.com/item?id=4779015
http://tozny.com/blog/encrypting-strings-in-android-lets-make-better-mistakes/

鉴于这个陷阱如此险恶,学术界有人就提出了,干脆把Encrypt和MAC直接集成为一个算法,在算法内部解决好安全问题,不再让码农选择,避免众码农再被这个陷阱坑害,这就是AEAD(Authenticated-Encryption With Addtional data)类的算法,GCM模式就是AEAD最重要的一种。

4.4. record层的密码学保护—MAC

TLS record 层 MAC的计算方法:

MAC(MAC_write_key, seq_num +
        TLSCompressed.type +
        TLSCompressed.version +
        TLSCompressed.length +
        TLSCompressed.fragment);

其中的seq_num是当前record的 sequence number,每条record都会++,
可以看到把 seq_num,以及record header里面的几个字段也算进来了,这样解决了防重放问题,并且保证record的任何字段都不能被篡改。

算完MAC,格式如下:

stream-ciphered struct {
    opaque content[TLSCompressed.length];
    opaque MAC[SecurityParameters.mac_length];
} GenericStreamCipher;

然后根据SecurityParameters.cipher_type,选择对应的对称加密算法进行加密,分类解说如下:

4.5. record层的密码学保护—stream cipher

stream cipher:
算stream cipher,stream cipher的状态在连续的record之间会复用。
stream cipher的主力是RC4,但是目前RC4已经爆出多个漏洞,所以实际中基本不使用流加密没法,详情请见:

https://tools.ietf.org/html/rfc7457#section-2.5

[[FreeBuf] RC4加密已不再安全,破解效率极高] 链接 http://www.freebuf.com/news/72622.html

http://www.imperva.com/docs/HII_Attacking_SSL_when_using_RC4.pdf

4.6. record层的密码学保护— CBC block cipher

CBC模式块加密
TLS目前靠得住的的块加密cipher也不多,基本就是AES(最靠谱,最主流),Camellia,SEED,(3DES,IDEA之类已经显得老旧,DES请禁用),加密完的格式如下:

struct {
  opaque IV[SecurityParameters.record_iv_length];
  block-ciphered struct {
      opaque content[TLSCompressed.length];
      opaque MAC[SecurityParameters.mac_length];
      uint8 padding[GenericBlockCipher.padding_length];
      uint8 padding_length;
  };
} GenericBlockCipher;

这个值得说道说道,因为我们码农平常在业界还能看到很多用AES-CBC的地方,其中的几个参数:

IV
: 要求**必须用密码学安全的伪随机数生成器(CSPRNG)**生成,并且必须是不可预测的,在Linux下,就是用用/dev/urandom,或者用 openssl 库的 RAND_bytes()。

注意:TLS 在 1.1版本之前,没有这个IV字段,前一个record的最后一个block被当成下一个record的IV来用,然后粗大事了,这导致了 [BEAST攻击] 链接 http://www.openssl.org/~bodo/tls-cbc.txt 。
所以,TLS1.2改成了这样。
(还在使用CBC的各位,建议关注一下自己的IV字段是怎么生成出来的。如果要用,最好和TLS1.2的做法保持一致)。

其中 SecurityParameters.record_iv_length 一定等于 SecurityParameters.block_size.
例如 AES-256-CBC的 IV 一定是16字节长的,因为AES 128/192/256 的block size都是16字节。

padding
使用CBC常用的PKCS 7 padding(在block size=16字节这种情况下,和pkcs 5的算法是一回事,java代码里面就可以这么用这个case里,和pkcs 5的结果是一样的)
padding_length
就是PKCS 7 padding的最后一个字节

注意2个险恶的陷阱:

  1. 实现的代码必须在收到全部明文之后才能传输密文,否则可能会有BEAST攻击
  2. 实现上,根据MAC计算的时间,可能进行时间侧通道攻击,因此必须确保—运行时间和padding是否正确无关。

4.7. record层的密码学保护— AEAD cipher

AEAD
到了我们重点关注的AEAD,AEAD是新兴的主流加密模式,是目前最重要的模式,其中主流的AEAD模式是 aes-gcm-128/aes-gcm-256/chacha20-poly1305

AEAD加密完的格式是:

struct {
   opaque nonce_explicit[SecurityParameters.record_iv_length];
   aead-ciphered struct {
       opaque content[TLSCompressed.length];
   };
} GenericAEADCipher;

AEAD ciphers的输入是: key,nonce, 明文,和 “additional data”.
key是 client_write_key 或者 the server_write_key. 不需要使用 MAC key.

每一个AEAD算法都要指定不同的nonce构造算法,并指定 GenericAEADCipher.nonce_explicit 的长度.
在TLS 1.2中,规定很多情况下,可以按照rfc5116 section 3.2.1的技术来做。其中record_iv_length是nonce的显式部分的长度,nonce的隐式部分从key_block作为 client_write_iv和 and server_write_iv得出,并且把显式部分放在 GenericAEAEDCipher.nonce_explicit 里.

在TLS 1.3 draft中,做了更改:

  1. 规定 AEAD算法的 nonce的长度规定为 max(8 bytes, N_MIN),即如果N_MIN比8大,就用N_MIN; 如果比8小,就用8。

  2. 并且规定 N_MAX小于8字节的AEAD不得用于TLS。

  3. 规定TLS AEAD中每条record的nonce通过下面的方法构造出来:
    64bit的sequence number的右侧填充0,直到长度达到iv_length。然后把填充过的sequence number和静态的 client_write_iv或 server_write_iv (根据发送端选择)做异或(XOR)。异或完成后,得到的 iv_length 的nonce就可以做每条record的nonce用了。

    AEAD输入的明文就是 TLSCompressed.fragment (记得上面的介绍吗?AEAD是MAC和encrypt的集成,所以输入数据不需要在算MAC了).

    AEAD输入的additional_data 是:

additional_data = seq_num + TLSCompressed.type +
    TLSCompressed.version + TLSCompressed.length;

“+” 表示字符串拼接。
可以看到,此处类似上面的MAC计算,算入了seq_num来防重放,type,version,length等字段防止这些元数据被篡改。

AEADEncrypted = AEAD-Encrypt(write_key, nonce, plaintext,
    additional_data)

解密+验证完整性:

TLSCompressed.fragment = AEAD-Decrypt(write_key, nonce,
    AEADEncrypted,
    additional_data)

如果解密/验证完整性失败,就回复一条 fatal bad_record_mac alert 消息.

aes-gcm的iv长度,nonce长度,nonce构成等,后续再深入探讨。

4.8. record层的密码学保护— Key扩展

Key 扩展

TLS握手生成的master_secret只有48字节,2组encryption key, MAC key, IV加起来,长度一般都超过48,(例如 AES_256_CBC_SHA256 需要 128字节),所以,TLS里面用1个函数,来把48字节延长到需要的长度,称为PRF:

key_block = PRF(SecurityParameters.master_secret,    "key expansion",
    SecurityParameters.server_random +
    SecurityParameters.client_random);

然后,key_block像下面这样被分割:

client_write_MAC_key[SecurityParameters.mac_key_length]
server_write_MAC_key[SecurityParameters.mac_key_length]
client_write_key[SecurityParameters.enc_key_length]
server_write_key[SecurityParameters.enc_key_length]
client_write_IV[SecurityParameters.fixed_iv_length]
server_write_IV[SecurityParameters.fixed_iv_length]

TLS使用HMAC结构,和在CipherSuite中指定的hash函数(安全等级起码是SHA256的水平)
来构造PRF,

首先定义P_hash,把(secret,seed)扩展成无限长的字节流:

P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +
    HMAC_hash(secret, A(2) + seed) +
    HMAC_hash(secret, A(3) + seed) + ...

其中”+”表示字符串拼接。
A() 定义为:

A(0) = seed
A(i) = HMAC_hash(secret, A(i-1))

TLS的 PRF 就是把 P_hash 应用在secret上:

 PRF(secret, label, seed) = P_<hash>(secret, label + seed)

其中 label 是一个协议规定的,固定的 ASCII string.

要注意的是,TLS 1.3里面已经废弃了这种方式,改为使用更靠谱的 HKDF,HKDF 也是 html5的WebCryptoAPI的标准算法之一。

​ 本文转自微信后台团队,如有侵犯,请联系我们立即删除

OpenIMgithub开源地址:

https://github.com/OpenIMSDK/Open-IM-Server

OpenIM官网 : https://www.rentsoft.cn

**OpenIM官方论坛: ** https://forum.rentsoft.cn/

更多技术文章:

开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
https://forum.rentsoft.cn/thread/3

【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理
https://forum.rentsoft.cn/thread/4

【OpenIM原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型
https://forum.rentsoft.cn/thread/1

你该了解的TLS通信创建过程 TLS协议通过握手阶段协商会话密钥,确保通信的保密性、完整性和身份认证。TLS 1.3优化为1-RTT握手,使用ECDHE实现前向保密,通过证书链验证服务器身份,最终用AEAD算法加密应用数据。关键要素包括SNI选择证书、ALPN协商协议、mTLS客户端认证等。相比TLS 1.2,1.3减少了消息数量并默认支持PFS。证书主要用于身份验证而非数据加密,业务数据最终由对称密钥保护。工程中需注意证书校验、会话恢复等常见问题。 阅读详情

相关推荐

CTF流量分析进阶:TLS隐写题通用解法与Wireshark实战

流量分析是网络安全与数字取证领域的核心技术,它通过解析网络数据包来还原事件或发现异常。其原理在于网络协议在传输过程中会留下丰富的元数据和特征,即使应用层内容被加密,协议握手、字段格式和数据包形态等信息仍可能暴露关键线索。这项技术的价值在于能够在不破解核心加密的前提下,通过侧信道分析和协议逆向思维发现隐藏信息,在CTF竞赛、安全审计和威胁狩猎等场景中至关重要。本文聚焦于TLS隐写这一典型场景,探讨如何利用Wireshark工具,从TLS握手阶段的**证书信息**、**SNI扩展**等明文字段,以及加密数据的包

weixin_33713503的博客 1355

计算机网络重要协议汇总及解释笔记

TLS 安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。 该协议由两层组成: TLS 记录协议(TLS Record)和 TLS握手协议(TLS Handshake)。 TLS握手协议 TLS握手协议使双方(服务器和客户端)在应用协议层(如HTTP,SMTP等)传输或接收到数据的第一个字节前,就记录层(TLS记录协议)的安全参数达成一致,鉴别彼此(交换密钥...

永远在奔跑的学习者 1万+

Allegro17.2 出gerber文件详细流程 - 干货

Allegro17.2 出gerber文件详细流程 - 干货

u010614434的博客 1万+

【学习笔记】TLS/SSL握手之Records

本篇介绍了TLS握手中Record的概念及组成部分

Taki_UP的博客 1619

微信小程序OCR身份证识别实战:从拍照到信息提取全流程解析

本文详细解析了微信小程序中OCR身份证识别的全流程实现,从环境配置、拍照上传到OCR核心识别及安全优化。通过微信开发者工具和OCR插件,开发者可快速构建高效的身份信息采集系统,提升用户体验和数据安全性。重点介绍了图像处理、加密传输及混合云架构等企业级解决方案。

j0k1l2m3n的博客 457

一文解释电路中常用电子元器件应用和选型01

电容和二极管是电路中最常用的两个电子元器件,种类和系列众多,这里简单总结一下应用场景和选型方式 电容(Capacitor) 电容的种类(20种以上)和应用非常广泛,但是我经常遇到的无非就是下面这几种: 应用 1.隔直流。 2.旁路(去耦) 3.耦合 4.滤波 5.温度补偿 6.计时 7.调谐 8.整流 9.储能 种类 1. 陶瓷电容 2. 云母电容 3. 铝电解电容 4. 钽

weixin_43904073的博客 2236

【网络安全技术】传输层安全——SSL-TLS

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…所以能看到的是TLS头、TCP头,IP头和MAC头。对了之后,首先,如果先前服务器要了客户端的证书,客户端会先把他的证书回给服务器。

qq_53058639的博客 1628

Ubuntu22.04上如何用Docker一键部署Ragflow+Ollama(附CUDA配置避坑指南)

本文详细介绍了在Ubuntu22.04系统上使用Docker一键部署Ragflow+Ollama的完整流程,特别提供了CUDA配置的避坑指南。从硬件兼容性检查、驱动安装到容器网络配置,手把手教你搭建本地化大模型环境,解决CUDA驱动冲突等常见问题,助力开发者快速构建AI应用开发平台。

weixin_26875109的博客 284

TLS1.2 RFC5246详解

注:本文省略了部分开发协议才涉及到的内容,如字段类型的定义以及字段长度的运算,主要聚焦理解tls协议的运作方式,用于问题定位 tls协议包含2层协议:TLS Record 协议和TLS Handshake协议,底层采用可靠传输协议(如TCP),TLS Record协议通过如下方式实现数据的安全传输: 链路是私有的,使用对称加密方式对应用数据进行加密。对每条链路来说,对称加密使用的key是各自独...

SkyChaserYu的博客 5453

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 673

图文教程本地部署开源扣子Coze Studio工作流并接入 Gemini 大模型(windows亲测) Coze Studio 本地部署、Gemini 模型接入、开源 AI 工具平台、大模型工作流搭建

本文介绍了在Windows系统本地部署开源AI工具平台Coze Studio并接入Google Gemini大模型的完整教程。主要内容包括:1) 环境准备要求(Docker等);2) 获取源码和配置Gemini模型(需API密钥);3) 通过Docker Compose部署服务;4) 浏览器访问验证。文章指出该平台适合私有化部署,支持智能体和工作流搭建,但也存在插件系统不完善等局限。最后提供了相关资源链接,为开发者实现本地AI解决方案提供了实用指南。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2780

TLS协议分析 (二) 架构总览

二. TLS协议的原理 1. 自顶向下,分层抽象 构建软件的常用方式是分层,把问题域抽象为多层,每一层的概念定义为一组原语,上一层利用下一层的组件构造实现,并被上一层使用,层层叠叠即成软件。 例如在编程语言领域中,汇编语言为一层,在汇编上面是C/C++等静态编译语言,C/C++之上是python/php/lua等动态类型脚本语言层,之上常常还会构造领域特定的DSL 在网络架构中,以太网是一层,其上是ip协议的网络层,ip之上是tcp等传输层,tcp之上是http等应用层 密码学通信协议也是分层构造得到。

OpenIM的博客 1607

国科大学习资料--机器人智能控制_袁如意老师PPT后习题答案(学长精心整理)

人工神经元激活函数的作用是什么? 答:激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。 人工神经网络的学习规则有哪些?各有何特征? 答:大类可以分为无监督学习算法、有监督学习算法和强化学习。其中无监督学习算法指只有输入信息,没有期望的输出信息,如Hebb学习规则,神经元连接强度的变化与两个相互连接的神经元的激活水平成正比。竞争学习法则:网络各输出单元相互竞争,最后达到只有一个最强者激活。有监督学习算法指同时提供输入信息和对应的期望输出信息,如误差学习(Delta学

无名何许人的博客 1486

浅析TLS 1.2协议

转自:https://segmentfault.com/a/1190000014740303 一、TLS 1.2 简介 TLS概述:TLS和他的前身SSL,都是提供在计算机网络上安全通信的密码学协议,最常见就是用于HTTPS中,用来保护Web通信的。 发展史:网景公司开发了原始的SSL协议,SSL 1.0因为本身存在着严重的安全问题,所以从未被公开发布。只有SSL 2.0和SSL 3.0是被公开发布和使用的。后来为了对SSL进行标准化,推出了TLS,TLS 1.0就对应着SSL 3.0

jason9211的专栏 3237

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 407

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HTTPS - 揭秘 TLS 1.2 协议完整握手过程

关注并将「趣谈前端」设为星标定期推送技术干货/优秀开源/技术思维HTTPS 是建立在 SSL/TLS 传输层安全协议之上的一种 HTTP 协议,相当于 HTTPS = HTTP + SSL/TLS。第一篇文章 “HTTPS - 通俗易懂的阐述 HTTPS 协议,解决面试难题” 更多是理论上的一些阐述,能解决一些面试及常见问题,例如 “SSL/TLS” 的关系是什么?文中...

趣谈前端 5789

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

嵌入式HTTPS下载中断:TLS record缓冲区过小的排查与修复

TLS record是TLS协议传输层的基本数据单元,其载荷长度上限为16KB。在嵌入式设备中,由于内存受限,协议栈常将record缓冲区裁剪至4KB或8KB。当服务器发送满载16KB的record时,缓冲区溢出导致连接中断。本文从HTTPS下载失败的现象出发,结合mbedTLS配置,讲解如何通过抓包定位、对照实验和代码走查确认根因,并对比多种修复方案。该问题在固件升级、物联网设备远程更新等场景中尤为常见,掌握缓冲区配置与排查方法对保障设备通信稳定性至关重要。

weixin_29168675的博客 239

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SSL/TLS 协议简介与实例分析

作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SSL的安全问题。 1. RFC documents about SSL/TLS RFC-2246: The TLS Protocol Version 1.0 详细讲述了TLS1.

sdulibh的专栏 2766

TLS协议分析

TLS协议分析   https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=timeline&amp;isappinstalled=0   最近发现密码学很有意思,刚好还和工作有点关系,就研究了一下,本文是其中一部分笔记和一些思考。 密码学理论艰深,概念繁多,...

weixin_34049948的博客 310

SSL/TLS抓包出现提示Ignored Unknown Record

SSL/TLS抓包出现提示Ignored Unknown Record 出现这种提示有两种情况。第一种,抓包迟了,部分SSL/TLS的协商数据没有获取,Wireshark无法识别和解析。第二种,数据包使用了特殊的协...

4486

HTTPS\TLS协议过程的详细补充

HTTPS\TLS协议过程的详细补充 目录HTTPS\TLS协议过程的详细补充1、TCP三次握手准备阶段:第一次握手:第二次握手:第三次握手:总结2、TLS/SSL 握手阶段一Client Hello阶段二Server Hello阶段三Certificate阶段四Server Key Exchange阶段五Server Hello Done阶段六Client Key Exchange阶段七3、TLS/SSL数据传输Application DataEncryted Alert4、四次挥手第一次挥手:第二次挥手

Ds的博客 3471

TLS协议分析 (六) handshake协议扩展

转自:http://chuansong.me/n/1281554652943 5.11. handshake  — Finished 在 ChangeCipherSpec 消息之后,应该立即发送 Finished 消息,来确认密钥交换和认证过程已经成功了。ChangeCipherSpec 必须在其它握手消息和 Finished 消息之间。 Finished 消息是第一条用刚刚协商

zhangtaoym的博客 2805

HTTPS 传输优化详解之动态 TLS Record Size

笔者在过去分析了诸多可以减少 HTTPS 传输延迟的方法,如分布式 Session 的复用; 启用 HSTS,客户端默认开启 HTTPS 跳转;采用 HTTP/2 传输协议;使用 ChaCha20-Poly1305 算法减少移动端 CPU 运算时间等。 通过这些方法,可以在很大程度上优化 HT...

chuaiyu6226的博客 233
上一篇: TLS协议分析 (二) 架构总览
下一篇: TLS协议分析 (四) handshake协议概览
OpenIM
博客等级 码龄5年 295粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值