安全和密码学 --The Missing Semester of Your CS Education
目录
密码学是构建数字信任的基石。
本文浅析密码学在现实工具中的应用,涵盖
1)熵 2)散列函数 3)加密体系;
一、熵与密码强度
1.1 熵的数学定义
熵(Entropy)的计算公式:
H = log₂(n)
其中n为可能的组合数
1.2 密码强度评估
密码类型 | 熵值计算 | 示例密码 |
---|---|---|
4单词组合 | 4×log₂(100000) ≈ 66.4 bits | correcthorsebatterystaple |
8字符混合密码 | log₂(62⁸) ≈ 47.5 bits | rg8Ql34g |
1.3 破解时间估算
- 4单词密码:约1.5×10¹⁹年
- 8字符密码:约1.5×10⁷年
二、密码散列函数
2.1 核心特性
$ printf 'hello' | sha1sum
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
- 确定性
- 不可逆性
- 碰撞抵抗性
2.2 应用场景
- Git内容寻址存储
- 软件完整性验证
- 密码承诺机制
三、密钥体系
3.1 对称加密(AES)
openssl aes-256-cbc -salt -in plain.txt -out encrypted.bin
3.2 非对称加密(RSA/ED25519)
ssh-keygen -t ed25519 -o -a 100
3.2.1)Q1:为什么私钥能解开公钥上的锁?
A:大数定理。具体见下文:
非对称加密算法的数学设计–RSA算法为例
3.2.2)Q2:数字签名是什么?
A:[下文括号内,代表函数的x ]
- 发送方:签名 = 私钥加密 [ hash(发送的消息) ];
- 接收方:hash_1= 公钥解密[签名];
- THEN 比较:得到的hash_1 VS hash_2(收到的消息);
- IF 相等,证明:收到的消息 = 发送的消息;
密码学中的数字签名是什么?
定义: 数字签名是一种基于密码学的技术,用于验证数据的真实性、完整性和不可否认性。它类似于现实中的手写签名,更安全、不可伪造。
核心原理:
非对称加密
:使用一对密钥(公钥和私钥)。
- 私钥:由签名者秘密保存,用于生成签名。
- 公钥:公开分发,用于验证签名。
哈希函数:通常先对消息生成唯一的哈希值(摘要),再对哈希值签名,提高效率。
工作流程:
- 签名生成:发送方用私钥对消息的哈希值加密,生成签名。
- 签名验证:接收方用发送方的公钥解密签名,得到哈希值,再对比自己计算的哈希值是否一致。
作用:
- 身份认证:确认消息来源(谁签的名)。
- 完整性:确保消息未被篡改。
- 不可否认性:签名者事后无法否认自己的签名。
常见算法:RSA、ECDSA(比特币使用)、EdDSA等。
3.3 密钥生成函数(KDF)
- 密码存储方案:
KDF(password + salt)
- 推荐迭代次数:≥100,000次
四、信任模型对比
模型类型 | 代表产品 | 验证方式 | 适用场景 |
---|---|---|---|
首次信任 | Signal | Safety Number比对 | 即时通讯 |
信任网络 | PGP | 密钥签名链 | 邮件加密 |
社交证明 | Keybase | 社交媒体验证 | 跨平台身份 |
五、典型应用案例
5.1 SSH身份验证流程
5.2 全盘加密方案
- Linux: LUKS + cryptsetup
- Windows: BitLocker
- macOS: FileVault
5.3 密码管理器架构
+----------------+
| 主密码 |
+--------+-------+
↓
+----------------+
| KDF生成密钥 |
+--------+-------+
↓
+----------------+
| AES加密密码库 |
+----------------+
六、安全实践建议
- 启用两步验证(2FA)
- 使用密码管理器生成高熵密码
- 定期更新SSH密钥(推荐ED25519)
- 验证下载文件的哈希值
- 对敏感提交进行GPG签名
七、扩展练习
# 验证文件完整性
curl -LO https://debian.org/checksums
sha256sum -c SHA256SUMS
# 创建签名提交
git commit -S -m "安全更新"
git show --show-signature
s://debian.org/checksums
sha256sum -c SHA256SUMS
创建签名提交
git commit -S -m "安全更新"
git show --show-signature
杂项:
Q3:“挖比特币”为什么叫“挖”?到哪里挖?
- 类似一次种哈希计算竞赛。
- 需要通过计算“挖掘”才能获得;
- 矿工通过解决复杂数学难题(哈希计算)来竞争记账权,成功者获得比特币奖励,过程需要消耗算力(类似“挖”的劳力)。
- 涉及区块链技术。