# 主题九:安全和密码学
熵的单位是比特。
熵是信息的单位,借用了热力学的概念。熵实现了对信息的度量。
热力学中的熵是用来衡量体系的混乱程度,同样在信息学中,熵是用来衡量信息的混乱程度,也就是信息的真实性的概率大小。
发生的概率越大,则熵越小,因为混乱度小。反之发生的概率越小,熵就越大,因为混乱度大。
具体可以参考这篇文章:通俗理解信息熵 。
散列函数可以将任意大小的数据映射为一个固定大小的输出。
git 采用 SHA-1 散列函数,可以将任意大小的数据映射为 160 比特(可被40位十六进制数表示)的输出。
例如:
$ printf 'hello' | sha1sum
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
1
2
2
散列函数的特征:
- 确定性:对于不变的输入永远有相同的输出。
- 不可逆性:对于hash(m) = h,难以通过已知的输出h来计算出原始输入m。
- 目标碰撞抵抗性/弱无碰撞:对于一个给定输入m_1,难以找到m_2 != m_1且hash(m_1) = hash(m_2)。
- 碰撞抵抗性/强无碰撞:难以找到一组满足hash(m_1) = hash(m_2)的输入m_1, m_2(该性质严格强于目标碰撞抵抗性)。
这里提一下,密码和口令是不同的,密码存储到数据库中并非密文,而是经过运算后的结果。口令则是存储本身。也就是直接查看数据库中的信息是看不出密码的,但是却能够看出口令。
sha-1 是哈希函数的一种,因为确定性,也就是任何一个输出值都是唯一的。所以 git 采用哈希值作为提交的标志。
有些镜像文件也采用哈希值的唯一来确定软件。
将密码进行散列函数的运算后,可以对抗穷举法的攻击。
对称加密算法,根据明文和key 可以生成密文。也可以逆转,根据密文和 key 生成明文。
非对称加密采用公钥和私钥的方式来实现加密解密。明文根据公钥进行加密生成密文,密文在根据私钥解密生成明文。公钥对外公布,私钥则不对外公布。
非对称加密可以用于,电子邮件加密,聊天加密,软件签名。