Skip to content

Lecture9 安全与密码学

:material-circle-edit-outline: 约 905 个字 :material-clock-time-two-outline: 预计阅读时间 3 分钟

Note

本节仅仅是简单介绍计算机安全与密码学的一些概念。在没有接受过专业培训前,不要使用自己创造的加密协议。

熵(entropy)是对随机性的一种度量,用于量化随机性,在确定密码强度时很有用。

随机性和熵以bit为单位,这里的bit意义和信息论中的bit相同。

熵的计算方式是 \(\log_2(\# possible)\) ,单位为bit,括号内是可能性数量。熵直接反映了暴力破解的难易。

??? note “例子” 抛硬币的结果有两种可能,对应2个可能性数量,故熵为1bit。
同理掷骰子大约有2.6bit熵。

对于比较重要的信息,可以用熵在40bit以上的密码。特别重要的信息,可以用熵在80bit以上的密码。

哈希函数

哈希函数的具体原理可以前往我的FDS(数据结构基础)笔记看下。

哈希函数(hash function)能够将任意长度的输入数据压缩为固定长度的输出,是一个输出一个数据数且难以逆推的函数,很适合用于加密。哈希函数的输出叫哈希值。

重要属性

  1. 哈希函数是不可逆的。

难以从哈希值反推输入。

  1. 哈希函数是抗碰撞的。

认为不同输入不可能产生相同哈希值。

承诺机制

在没有硬币的情况下玩抛硬币游戏,可以一个人在脑海中想出抛硬币结果,让另一个人猜,双方再对接一下。但无论是想的人先说还是猜的人先说都会导致作弊的可能性。
这时我们可以让想的人先将结果输入加密哈希函数,得到哈希值,这样就做出了承诺。

密钥生成函数

密钥生成函数(key derivation function/KDF)和哈希函数相似,但是有一个区别是,这类函数计算速度较慢。

让计算速度较慢的一个目的是为了对付暴力破解。

对称加密

原理

对称加密系统用到一个KDF用于生成随机的高熵密钥,以及一对函数用于加密和解密。

KDF会生成一个密钥,如何加密函数通过密钥启动,将明文加密为密文。解密函数亦通过密钥启动,将密文解密为明文。

性质

  1. 拥有密钥才能解密密文。
  2. 用相同密钥解密相同密文能得到相同明文。

盐值

[自制双语字幕] 计算机教育缺失的一课(2020) - 第9讲 - 安全和密码学_哔哩哔哩_bilibili

37:54

非对称加密

原理

非对称加密系统同样用到一个KDF用于生成随机的高熵密钥,但是这里KDF会生成一对密钥,而不是一个 —— 一个公钥(public key),一个私钥(private key)。公钥是可以公开的。

加密函数通过公钥启动,加密明文为密文;解密函数通过私钥启动,解密密文为明文。

任何人都可以使用我的公钥进行加密,然后将密文发给我,我可以使用我的私钥解密这些密文——只要加密用的是和我的私钥匹配的公钥。

签名与验证

用于接收者向发送者发出请求,验证收到的信息是否是正确的。

\(sign(meg,private key)\rightarrow signature\)

\(verify(signature,public key)\rightarrow bool\)

密钥分发

很显然,非对称加密有个问题是,发送者需要确认拿到的公钥是目标接收者的公钥。这是一个 引导问题。