数据安全基础与密码学考察
密码学是数据安全的核心基石,面试中常通过“原理对比→场景落地→协议理解”三层递进来考察深度。本章聚焦对称/非对称加密、哈希与数字签名、SSL/TLS三大模块,每个模块以“问答卡片”形式展开,附公司侧重点与面试官画像,帮助你在40分钟内建立完整回答框架。
问答卡片一:对称与非对称加密
面试题:“请解释对称加密和非对称加密的区别,并举例说明各自的应用场景。”
回答框架(五步法):
- 识别类型:考察加密算法分类与安全模型。
- 核心原理:对称加密用同一密钥加密解密(如AES、DES);非对称加密用公钥加密、私钥解密(如RSA、ECC)。
- 关键区别:速度、密钥管理、安全假设。对称快但密钥分发困难;非对称慢但无需共享密钥。
- 场景举例:对称→文件加密、数据库TDE;非对称→SSL证书、数字信封。
- 安全要点:实际中常混合使用(如TLS用非对称交换对称密钥)。
| 维度 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1个(共享) | 2个(公钥+私钥) |
| 典型算法 | AES-256、ChaCha20 | RSA-4096、ECC secp256r1 |
| 速度 | ~1 GB/s | ~10 MB/s(RSA) |
| 密钥分发 | 需安全信道 | 公钥可公开 |
| 典型场景 | 磁盘加密、VPN传输 | 数字签名、证书 |
简短示例:
// 对称:AES-256-CBC 加密文件
openssl enc -aes-256-cbc -in plain.txt -out encrypted.enc -K -iv
// 非对称:RSA-4096 加签
echo "message" | openssl dgst -sha256 -sign private.pem -out signature.bin
追问示例:“如果对称加密的密钥分发困难,如何解决?” – 可答:使用非对称加密协商对称密钥(如ECDHE密钥交换),或利用KMS/HSM集中分发。
避坑提示:不要混淆“公钥加密”和“私钥签名”。面试常见错误:说“用私钥加密数据”。正确理解:私钥用于签名(证明身份),公钥用于加密(保证机密性)。
问答卡片二:哈希与数字签名
面试题:“哈希函数和数字签名的关系是什么?为什么数字签名要先用哈希?”
回答框架:
- 类型识别:考察签名原理与哈希特性。
- 核心原理:哈希将任意长度消息映射为固定摘要(抗碰撞+单向);数字签名=摘要+私钥加密+公钥验证。
- 关键区别:哈希无密钥,签名需密钥对;哈希不能防伪造,签名可验证来源。
- 场景举例:软件发布SHA-256校验+PGP签名;HTTPS证书验证。
- 安全要点:先哈希再签名可大幅提升效率(一次签名覆盖任意大小文件)。
| 算法 | 输出长度 | 安全性状态 | 典型用途 |
|---|---|---|---|
| MD5 | 128 bit | 已攻破(碰撞) | 仅做校验 |
| SHA-1 | 160 bit | 已攻破(SHAttered) | 弃用 |
| SHA-256 | 256 bit | 安全(推荐) | 签名、证书、密码存储 |
| SHA-3 | 可变 | 安全 | 新兴标准 |
简短示例:
// 哈希 + 签名流程(Golang 伪代码)
digest := sha256.Sum256(data)
signature, _ := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, digest[:])
// 验证
err := rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, digest[:], signature)
追问示例:“哈希碰撞对数字签名有何影响?” – 回答:如果攻击者能构造两个相同哈希的合法和恶意文件,可让用户签署合法文件但实际恶意文件被验证通过。因此必须使用抗碰撞哈希(SHA-256及以上)。
避坑提示:不可以用哈希代替签名(哈希无法证明来源),也不可以用加密代替哈希(加密不抗篡改)。数字签名是“加密+哈希”的组合。
问答卡片三:SSL/TLS 握手协议
面试题:“描述TLS 1.3的握手过程,并说明相比1.2的主要改进。”
回答框架:
- 类型识别:考察协议细节与版本差异。
- 核心原理:TLS 1.3握手仅需1个RTT(首次)或0-RTT(预共享密钥)。
- 关键区别:移除不安全算法(RSA密钥交换、CBC模式),强制使用ECDHE与AEAD。
- 场景举例:HTTPS、MQTT over TLS、gRPC安全传输。
- 安全要点:前向安全性(ECDHE临时密钥)、精简握手步骤降低延迟。
TLS 1.3 握手步骤:
- ClientHello(支持套件、Key Share扩展)
- ServerHello + 证书 + 签名 + 服务端Key Share
- 客户端验证证书并计算共享密钥,发送Finished
- 服务端验证Finished,握手完成,开始加密通信
| 对比项 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| RTT(首次连接) | 2 | 1 |
| 密钥交换 | 可选RSA/DHE/ECDHE | 仅ECDHE(必须) |
| 对称加密 | 多种(包括CBC) | 仅AEAD(AES-GCM/ChaCha20-Poly1305) |
| 握手消息 | 多轮协商 | 压缩为2次往返 |
| 降级保护 | 无 | 强制版本协商 |
简短示例:
# 使用 curl 查看 TLS 1.3 握手(需要 openssl 1.1.1+)
curl -v --tls-max 1.3 https://www.cloudflare.com 2>&1 | grep -i "tls"
# 输出示例:TLSv1.3 (IN), TLS handshake, Finished
追问示例:“前向安全性如何保证?” – 关键:使用临时DH密钥对,每次会话生成新的私钥;即使服务器长期私钥泄露,也无法解密过去记录。TLS 1.3强制ECDHE实现前向安全。
避坑提示:不要跳过证书验证环节(如说“只关注密钥交换”)。面试官常追问CA证书链验证、吊销检查(OCSP)。回答握手时主动提及证书校验可加分。
公司侧重点与面试官画像
| 公司类型 | 侧重点 | 常见考查 |
|---|---|---|
| 互联网大厂(BAT/字节) | 自研密码库(如BoringSSL)、性能优化 | TLS 1.3细节、性能对比、国密适配 |
| 金融/支付 | 合规与安全(国密SM2/SM3/SM4) | 国密算法原理、证书链、密钥生命周期 |
| 云厂商(AWS/阿里云) | SSL卸载、HTTPS加速 | TLS握手优化、session ticket复用 |
| 安全咨询 | 协议漏洞(如BEAST/POODLE) | 历史漏洞原理及修复方案 |
面试官画像:典型为“技术深度型”面试官,常由资深安全工程师或密码学博士担任。他们追求准确性与边界知识:能问出“RSA 4096比特的安全强度相当于多少比特AES密钥?”、“ECDHE中如何保证生成的共享密钥唯一?”等问题。回答时建议使用精确术语,避免模糊表述。
加分技巧:在回答每类问题时,主动对比其他模块(如“数字签名与加密的区别”)体现知识关联;提及实际项目中的性能数据(如“AES-256-GCM在Xeon上可达20 Gbps”)可拉高印象分。