Lecture9 安全与密码学
Note
本节仅仅是简单介绍计算机安全与密码学的一些概念。在没有接受过专业培训前,不要使用自己创造的加密协议。
熵
熵(entropy)是对随机性的一种度量,用于量化随机性,在确定密码强度时很有用。
随机性和熵以bit为单位,这里的bit意义和信息论中的bit相同。
熵的计算方式是 \(\log_2(\# possible)\) ,单位为bit,括号内是可能性数量。熵直接反映了暴力破解的难易。
??? note “例子”
抛硬币的结果有两种可能,对应2个可能性数量,故熵为1bit。
同理掷骰子大约有2.6bit熵。
对于比较重要的信息,可以用熵在40bit以上的密码。特别重要的信息,可以用熵在80bit以上的密码。
哈希函数
哈希函数的具体原理可以前往我的FDS(数据结构基础)笔记看下。
哈希函数(hash function)能够将任意长度的输入数据压缩为固定长度的输出,是一个输出一个数据数且难以逆推的函数,很适合用于加密。哈希函数的输出叫哈希值。
重要属性
- 哈希函数是不可逆的。
难以从哈希值反推输入。
- 哈希函数是抗碰撞的。
认为不同输入不可能产生相同哈希值。
承诺机制
在没有硬币的情况下玩抛硬币游戏,可以一个人在脑海中想出抛硬币结果,让另一个人猜,双方再对接一下。但无论是想的人先说还是猜的人先说都会导致作弊的可能性。
这时我们可以让想的人先将结果输入加密哈希函数,得到哈希值,这样就做出了承诺。
密钥生成函数
密钥生成函数(key derivation function/KDF)和哈希函数相似,但是有一个区别是,这类函数计算速度较慢。
让计算速度较慢的一个目的是为了对付暴力破解。
对称加密
原理
对称加密系统用到一个KDF用于生成随机的高熵密钥,以及一对函数用于加密和解密。
KDF会生成一个密钥,如何加密函数通过密钥启动,将明文加密为密文。解密函数亦通过密钥启动,将密文解密为明文。
性质
- 拥有密钥才能解密密文。
- 用相同密钥解密相同密文能得到相同明文。
盐值
[自制双语字幕] 计算机教育缺失的一课(2020) - 第9讲 - 安全和密码学_哔哩哔哩_bilibili
37:54
非对称加密
原理
非对称加密系统同样用到一个KDF用于生成随机的高熵密钥,但是这里KDF会生成一对密钥,而不是一个 —— 一个公钥(public key),一个私钥(private key)。公钥是可以公开的。
加密函数通过公钥启动,加密明文为密文;解密函数通过私钥启动,解密密文为明文。
任何人都可以使用我的公钥进行加密,然后将密文发给我,我可以使用我的私钥解密这些密文——只要加密用的是和我的私钥匹配的公钥。
签名与验证
用于接收者向发送者发出请求,验证收到的信息是否是正确的。
\(sign(meg,private key)\rightarrow signature\)
\(verify(signature,public key)\rightarrow bool\)
密钥分发
很显然,非对称加密有个问题是,发送者需要确认拿到的公钥是目标接收者的公钥。这是一个 引导问题。
略