以下文章来源于Coder梁 ,作者梁唐,笔记来自公众号:Coder梁
案例分析
密钥管理
每个人都有必要使用密码管理器比如keepassxc,pass,1password等。密码管理器可以让我们不同的网站使用不同的、随机且高熵的密码,并且会将所有的密码使用对称加密的方式来存储起来。
使用密码管理器可以让你不需要重复使用密码,并且可以使用高熵密码,最重要的是你只需要记住一个密码就可以尽可能避免密码泄漏、被撞库等隐患。
两步验证
两步验证(2FA)要求用户使用密码以及另外一个身份验证器来消除密码泄漏以及钓鱼攻击的风险。
全盘加密
对笔记本电脑的硬盘进行全盘加密是防止因设备丢失而信息泄露的简单且有效方法。Linux的cryptsetup + LUKS, Windows的BitLocker,或者macOS的FileVault都使用一个由密码保护的对称密钥来加密盘上的所有信息。
私密消息
使用singal或keybase可以保证端到端的通信安全。
但这需要使用联系人的公钥,要确保安全的话,需要在线下方式验证singal或者keybase的公钥。
SSH
我们在之前的一堂课讨论了SSH和SSH密钥的使用。让我们从密码学的角度来分析一下它们。
当你运行ssh-keygen时,它会生成一个非对称加密的密钥对,public_key和private_key。这是随机生成的,通常会使用操作系统提供的熵(从硬件事件上获取)。公钥可以被分发出去,私钥需要加密保存在磁盘上。
ssh-keygen程序会提示用户输入一个密码,并将它输入密钥生成函数来生成密钥。这会被对称加密算法进行加密。
在使用的时候,当服务器知道了客户端的公钥之后(存储在.ssh/authorized_keys文件中),尝试链接的客户端可以使用非对称加密签名来验证客户的身份。
简单来说,服务器选择一个随机数发送给客户。客户使用私钥进行签名之后再发送给服务器,服务器随后使用存储的公钥来验证签名。这种方式可以很方便地验证客户是否持有对应的私钥,如果验证通过的话,那么允许客户登录访问。
练习
- 熵
- 假设一个密码是从四个小写的单词拼接组成,每个单词都是从一个含有10万单词的字典中随机选择,且每个单词选中的概率相同。一个符合这样构造的例子是correcthorsebatterystaple。这个密码有多少比特的熵?
- 假设另一个密码是用八个随机的大小写字母或数字组成。一个符合这样构造的例子是rg8Ql34g。这个密码又有多少比特的熵?
- 哪一个密码更强?
- 假设一个攻击者每秒可以尝试1万个密码,这个攻击者需要多久可以分别破解上述两个密码?
-
密码hash函数 从Debian镜像站下载一个光盘映像(比如这个来自阿根廷镜像站的映像:http://debian.xfree.com.ar/debian-cd/10.2.0/amd64/iso-cd/debian-10.2.0-amd64-netinst.iso)。使用sha256sum命令对比下载映像的哈希值和官方Debian站公布的哈希值。如果你下载了上面的映像,官方公布的哈希值可以参考这个文件:https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA256SUMS。
-
对称加密 使用 OpenSSL的AES模式加密一个文件: openssl aes-256-cbc -salt -in {源文件名} -out {加密文件名}。使用cat或者hexdump对比源文件和加密的文件,再用 openssl aes-256-cbc -d -in {加密文件名} -out {解密文件名} 命令解密刚刚加密的文件。最后使用cmp命令确认源文件和解密后的文件内容相同。




