密码学
目标
- 机密性(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算法基于大整数分解,通过选择两个大素数生成公钥和私钥,利用模幂运算实现加密(明文用公钥指数加密)和解密(密文用私钥指数解密),确保只有持有私钥的一方能够解密数据。具体过程为:
密钥协商算法
通信双方通过密钥协商算法协商出一个临时会话密钥,可用于消息的对称加密,且连接断开时自动消失
RSA密钥协商算法
RSA密钥协商算法通过客户端生成一个随机值作为会话密钥,使用服务端公钥加密后传给服务端,服务端收到后再使用私钥进行解密
DH密钥协商算法
DH密钥协商算法 通过双方交换公开参数并利用各自的私钥计算,生成一个共享的密钥,而无需直接传输密钥本身
椭圆曲线密码学
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)
- …
Leave a Reply