https://missing.csail.mit.edu/
https://missing-semester-cn.github.io/
https://www.bilibili.com/video/BV14E411J7n2
思否主页:https://segmentfault.com/u/wine99
笔记
- 2019 年本讲的内容为与 2020 年的普通,标题为 安全与隐私,更注重于计算机用户可以如何增强隐私保护和安全
- 相关课程:计算机系统安全 (6.858)
- 相关课程:密码学 (6.857以及6.875)
- 不要试图创造或者修改加密算法
- Cryptographic Right Answers: 解答了在一些应用环境下“应该使用什么加密?”的问题
熵
熵(Entropy) 度量了不确定性并可以用来决定密码的强度。
熵的单位是 比特 。对于一个均匀分布的随机离散变量,熵等于 log_2(所有可能的个数,即 n)
。 扔一次硬币的熵是1比特。掷一次(六面)骰子的熵大约为2.58比特。
使用多少比特的熵取决于应用的威胁模型。大约40比特的熵足以对抗在线穷举攻击(受限于网络速度和应用认证机制)。而对于离线穷举攻击(主要受限于计算速度),一般需要更强的密码 (比如80比特或更多)。
散列函数
密码散列函数 (Cryptographic hash function) 可以将任意大小的数据映射为一个固定大小的输出。散列函数具有如下特性:
- 确定性(deterministic):对于不变的输入永远有相同的输出。
- 不可逆性(non-invertible):对于
hash(m) = h
,难以通过已知的输出h
来计算出原始输入m
。 - 目标碰撞抵抗性/弱无碰撞(target collision resistant):对于一个给定输入
m_1
,难以找到m_2 != m_1
且hash(m_1) = hash(m_2)
。 - 碰撞抵抗性/强无碰撞(collision resistant):难以找到一组满足
hash(m_1) = hash(m_2)
的输入