deep think


From cryptography to TLS

密码学

目标

  • 机密性(Confidentiality):由加密算法保证,确保信息只能被授权方访问,防止未授权者获取内容
  • 完整性(Integrity):由消息验证码(MAC)保证,确保信息在传输或存储过程中未被篡改或破坏
  • 身份验证(Authentication):由数字签名保证,确认通信双方的身份真实有效,防止冒充
  • 不可抵赖(Non-repudiation):由数字签名保证,确保发送方无法否认已发送的信息,提供行为证据

随机数

密码学中的密钥、初始化向量(IV)、盐值(Salt)等均采用随机数的形式,主要包括:

  • TRNG(True Random Number Generator):真随机数生成器,基于物理过程(如电子噪声、放射性衰变)生成随机数
  • PRNG(Pseudo Random Number Generator):伪随机数生成器,使用确定性算法和种子生成随机数序列

Hash 算法

Hash算法可以将任意长度的数据映射为固定长度的哈希值(通常称为摘要),主要包括:

  • MD5(Message Digest Method 5):128 bits,不够安全
  • SHA-2(Secure Hash Algorithm – 2)
  • SHA-256
  • SHA-512

对称加密算法

加密过程:通过一个算法和一个密钥(secret key)对明文(plaintext)进行处理,得到的不规则字符就是密文(ciphertext)

块密码算法

块密码算法将固定长度的明文块通过多轮操作(如替换、移位、混淆和密钥混合)转换为密文块,每轮使用不同的子密钥,最终输出加密后的数据。

当明文长度超过一个分组的长度时,需要对其进行分组,分组模式主要包括:

  • ECB(Electronic Codebook)模式:直接对每个明文块单独加密
  • CBC(Cipher Block Chaining)模式:每个明文块与前一个密文块异或后再加密,第一个块使用初始化向量(IV)进行异或
  • CTR(Counter)模式:使用计数器生成密钥流,与明文块异或生成密文块

消息验证码(MAC)

Hash 算法仅能保证消息的完整性,却无法证明消息是否被篡改,由此引入消息验证码(Message Authentication Code),通信双方利用同一个密钥计算MAC,MAC算法主要包括:

  • HMAC(基于Hash函数):使用哈希函数(如SHA-256、MD5等)和密钥生成MAC
  • CBC-MAC(基于分组密码):使用分组密码(如AES)在CBC模式下对消息加密,最后一块密文作为MAC

AEAD加密模式

加密算法不能提供完整性,加密的同时必须引入MAC算法避免消息被篡改,AEAD(Authenticated Encryption with Associated Data)加密模式在底层组合了加密算法和MAC算法,能够同时保证数据的机密性和完整性,AEAD加密模式主要包括:

  • CCM模式
  • GCM模式
  • ChaCha20-Poly1305

公开密钥算法

多种用途(加解密、数字签名等);成对密钥(公钥和私钥);运算缓慢(O(n)复杂度)

RSA算法

RSA算法基于大整数分解,通过选择两个大素数生成公钥和私钥,利用模幂运算实现加密(明文用公钥指数加密)和解密(密文用私钥指数解密),确保只有持有私钥的一方能够解密数据。具体过程为:

>Snipaste_2025-01-24_11-58-03

密钥协商算法

通信双方通过密钥协商算法协商出一个临时会话密钥,可用于消息的对称加密,且连接断开时自动消失

RSA密钥协商算法

RSA密钥协商算法通过客户端生成一个随机值作为会话密钥,使用服务端公钥加密后传给服务端,服务端收到后再使用私钥进行解密

>d2

DH密钥协商算法

DH密钥协商算法 通过双方交换公开参数并利用各自的私钥计算,生成一个共享的密钥,而无需直接传输密钥本身

>547px-DiffieHellman

椭圆曲线密码学

ECC(Elliptic Curve Cryptography,椭圆曲线密码学) 是一种基于椭圆曲线数学的公钥密码学方法,与RSA相比,它在相同安全性下使用更短的密钥,具有更高的效率 ECC可以结合公开密钥算法,如DH算法结合ECC可以组成ECDH,在ECC中,k就是私钥,g就是基点,kg基于公式运算最终得到公钥,通过公钥很难计算出私钥k

数字签名

私钥拥有者使用密钥签署一条消息,然后发送给任意的接收方,接收方使用私钥对应的公钥进行签名的验证

签名生成流程

  • 发送者对消息计算摘要值
  • 发送者用私钥对摘要值进行签名得到签名值
  • 发送者将原始消息和签名值一同发送给接收者

签名验证流程

  • 接收者接收到消息后,拆分出消息和消息签名值A
  • 接收者使用公钥对消息进行运算得到摘要值B
  • 接收者对摘要值B和签名值A进行比较,如果相同表示签名验证成功,否则就是验证失败

TLS

数字证书

公开密钥算法中,网络通信会存在中间人攻击,因此在TLS协议中需要引入PKI(Public Key Infrastructure)技术解决身份验证的问题,PKI是证书管理流程的集合体,其中以PKI X.509标准使用最为广泛,X.509证书即为符合PKI X.509标准的证书

根据PKI X.509标准,PKI主要组成为:

  • 服务器实体:申请证书的实体,如某个域名
  • CA机构:证书签发机构
  • RA机构:注册机构,审核服务器实体
  • 证书仓库:存放CA颁发的证书
  • 证书校验方:校验证书真实性的软件,如浏览器

TLS 协议格式

TLS协议包括TLS记录层协议和TLS握手协议,记录层协议封装和处理所有上层子协议的消息,添加消息头,握手协议基于双方都认可的密码套件协商出密钥快,握手协议格式为:

-------------------------------------------------|----------------------------------------------
type(1 byte) | version(2 bytes) | length(2 bytes) | type(1 byte) | length(3 bytes) | content
------------------------------------------------- |----------------------------------------------
            记录层协议消息头                                  握手协议

记录层协议消息头中的type包括:

  • CHANGE_CIPHER_SPEC(0x14)
  • ALERT(0x15)
  • HANSHAKE(0x16)
  • APPLICATION_DATA(0x17)

握手协议中的type包括

  • CLIENT_HELLO(0x01)
  • SERVER_HELLO(0x02)
,

Published by


Leave a Reply

Your email address will not be published. Required fields are marked *