Missing Semester 学习笔记 - Security and Cryptography
Contents
本节将介绍如何从用户角度增强隐私保护和安全的方法,包括散列函数、密钥生成函数、对称/非对称加密等。该部分的内容仅作了解即可。
目录如下:
- Course overview + the shell
- Shell Tools and Scripting
- Editors (Vim)
- Data Wrangling(数据整理)
- Command-line Environment
- Version Control (Git)
- Debugging and Profiling
- Metaprogramming
- Security and Cryptography(安全和密码学)
- Potpourri(大杂烩)
- Q&A
在介绍计算机系统安全或密码学的概念之前,课程首先给出了熵的概念。在信息论中,熵度量了不确定性并可以用来决定密码的强度。熵的单位是比特。因此,使用多少比特的熵取决于应用的威胁模型。例如,大约 40 比特的熵足以应对在线穷举攻击。
加密散列函数是散列函数中的一种单向函数,即很难通过函数的输出结果来反推出函数的输入。例如 SHA-1 是在 Git 中使用的一种散列函数,可以将任意大小的输入映射为一个 160 比特的输出,而其散列值通常的呈现形式为 40 个十六进制数。你可以在 Git 下使用sha1sum
命令查看某个字符串的 SHA-1 值,如下所示:
|
|
对于这些结果,都是通过随机语言机得到的。它对于任何输入都回传一个真正随机的输出。而对于相同的输入,该语言机每次都会使用同一方法输出。也就是说,随机预言机就是一个将所有可能的输入与输出作随机映射的函数。
那么密码散列函数(加密散列函数)可以应用于哪些方面呢?
- Git 中的内容寻址存储。
- 文件信息的摘要。
- 承诺机制。
密钥派生函数用于生成固定长度的密钥,在其它密码算法中较为常用。例如,在网站上登录用户名时,由于存储登录凭证时不能直接存储明文密码。因此,可以针对每个用户随机生成一个盐,即 salt=random()
,并将其进行存储。通过密钥生成函数对使用了盐的明文密码生成哈希值,即KDF(password+salt)
。那么在执行登录验证请求时,用户输入的密码与盐值重新计算哈希值,即KDF(input_password+salt)
,然后在与之前存储的哈希值做对比,就可以对登录的用户进行密码的验证了。
对于对称加密
和非对称加密
的概念与应用,其实在 HTTPS 的加密过程中就涉及到了这两种技术。至于如何对两者进行区分,可以将对称加密和非对称加密比作门锁。对称加密就好比一个防盗门,只要有钥匙的人都可以打开门或锁门。而非对称加密就好比一个可以拿下来的挂锁。你可以将打开状态的挂锁(公钥)给任何一个人,但唯一的钥匙(私钥)需要你自己保留着。这样的话,当他们将某些信息装进盒子里并锁上之后,只有你可以使用保留的钥匙进行开锁。
至此,该系列的学习就结束了。至于最后的两节:大杂烩 和 提问&回答,这里不再给出,都是一些比较零碎但相对实用的知识点,感兴趣的可以看看。
总体来说,对我帮助最大的课程有 Shell Tools and Scripting、Data Wrangling、Command-line Environment 以及 Version Control (Git),相当于对以往知识的查漏补缺,复习并拓展了相关内容。