网络安全
网络安全是保护网络通信免受窃听、篡改、冒充的机制。网络安全涉及加密、认证、密钥交换、证书管理等技术。
对称加密
对称加密使用相同的密钥加密和解密,算法简单、速度快。
对称加密算法
AES(Advanced Encryption Standard):最常用的对称加密算法,支持 128、192、256 位密钥。AES 是分组加密,分组长度 128 位,支持 ECB、CBC、CFB、OFB、CTR 等模式。
ChaCha20:Google 开发的流加密算法,性能好,适合移动设备。ChaCha20-Poly1305 是 AEAD(Authenticated Encryption with Associated Data)算法,同时提供加密和认证。
对称加密的问题
密钥分发:如何安全地交换密钥?密钥在网络上传输,可能被窃听。
密钥管理:多个通信对需要多个密钥,密钥管理复杂。
非对称加密
非对称加密使用公钥加密、私钥解密,或私钥签名、公钥验证。
非对称加密算法
RSA:基于大整数分解难题,密钥长度 1024、2048、4096 位。RSA 速度慢,不适合加密大量数据,通常用于加密对称密钥。
ECC(Elliptic Curve Cryptography):基于椭圆曲线离散对数难题,密钥长度 256、384、521 位。ECC 比 RSA 强度更高、密钥更短、速度更快。
非对称加密的应用
密钥交换:Diffie-Hellman 密钥交换,双方协商出共享密钥,不在网络上传输密钥。
数字签名:私钥签名,公钥验证。签名保证数据完整性、不可抵赖性。
证书:公钥证书绑定公钥和身份,防止中间人攻击。
TLS 协议
TLS 握手
客户端发送 Client Hello,包含支持的加密套件、随机数。
服务端回复 Server Hello,包含选择的加密套件、随机数、证书。
服务端发送证书,客户端验证证书。
(可选)服务端发送 Certificate Request,请求客户端证书。
(可选)服务端发送 Server Hello Done。
(可选)客户端发送证书,服务端验证证书。
客户端生成随机数,用服务端公钥加密,发送给服务端。双方根据客户端随机数、服务端随机数、预主密钥生成会话密钥。
客户端发送 Change Cipher Spec、Finished,表示后续消息用会话密钥加密。
服务端发送 Change Cipher Spec、Finished,表示后续消息用会话密钥加密。
双方使用会话密钥加密应用数据。
TLS 版本
SSL 2.0:已淘汰,存在安全漏洞。
SSL 3.0:已淘汰,存在 POODLE 攻击。
TLS 1.0:已淘汰,存在 RC4 弱加密算法。
TLS 1.1:已淘汰,存在 RC4 弱加密算法。
TLS 1.2:当前主流,支持 strong 加密套件。
TLS 1.3:最新版本,简化握手、0-RTT、移除不安全算法。
TLS 加密套件
加密套件格式:TLS_密钥交换_认证_加密_消息认证。
示例:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。
ECDHE:密钥交换算法(椭圆曲线 Diffie-Hellman 临时密钥)。
RSA:认证算法(RSA 证书)。
AES_128_GCM:加密算法(AES 128 位 GCM 模式)。
SHA256:消息认证算法(SHA-256)。
推荐加密套件:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。
TLS 的性能
TLS 握手增加 1-2 个 RTT,连接建立慢。
TLS 加解密占用 CPU,影响吞吐量。
优化措施:Session Resumption(会话恢复,减少握手)、TLS 1.3(0-RTT 握手)、硬件加速(AES-NI 指令集加速 AES)。
证书
X.509 证书
X.509 证书是公钥证书的标准格式,包含:版本、序列号、签名算法、颁发者、有效期、主题、公钥、扩展、签名。
证书链:Root CA(根证书)→ Intermediate CA(中间证书)→ Leaf Certificate(终端证书)。客户端验证证书链,确保证书可信。
证书颁发机构(CA)
CA 是颁发证书的可信第三方,如 DigiCert、Let's Encrypt。
CA 验证申请者的身份(如域名所有权),签发证书。
客户端信任 Root CA,验证证书链。
证书类型
DV(Domain Validation):验证域名所有权,适用于普通网站。
OV(Organization Validation):验证组织信息,适用于企业网站。
EV(Extended Validation):严格验证,适用于金融、支付网站。
Let's Encrypt
Let's Encrypt 是免费、自动化、开放的 CA,提供 90 天有效期的证书。
certbot 是 Let's Encrypt 的官方客户端,自动签发、续期证书。
常见网络攻击
中间人攻击
攻击者拦截通信,窃听、篡改数据。
防御措施:TLS 加密、证书验证、HSTS(HTTP Strict Transport Security)。
重放攻击
攻击者重放之前的请求,冒充合法用户。
防御措施:时间戳、nonce(随机数)、签名。
DDoS 攻击
攻击者发送大量请求,耗尽服务器资源。
防御措施:限流、黑名单、DDoS 防护服务(如 Cloudflare)。
SQL 注入
攻击者在输入中注入 SQL 代码,窃取或篡改数据。
防御措施:输入验证、参数化查询、ORM。
XSS 攻击
攻击者在页面中注入恶意脚本,窃取用户信息。
防御措施:输入验证、输出编码、CSP(Content Security Policy)。
网络安全是系统工程,需要加密、认证、密钥管理、防御攻击等多种技术。理解网络安全的原理和威胁,有助于构建安全的网络应用。