留学在线 2021-11-09 17:02:16
Hello~大家好,今天学姐为留学生分享计算机科学专业的课程难点分析,这期的内容主要是教留学生如何正确的理解Security and Cryptography课程,学姐整理了非常详细的流程细节可以参考。
首先,这篇文章不足以教你如何设计安全系统或加密协议,但我们希望它能让你对你已经使用的程序和协议有一个大致的了解。
熵
熵是随机性的量度。例如,这在确定密码的强度时很有用。
如上XKCD漫画举例说明,像“correcthorsebatterystaple”这样的密码比“Tr0ub4dor&3”这样的密码更安全。但是你如何量化这样的事情呢?
熵的度量单位是位,当从一组可能的结果中均匀随机选择时,熵等于log_2(可能性数)。一次公平的抛硬币会产生1比特的熵。(6面骰子的)一次掷骰子有大约2.58位的熵。
你应该考虑到攻击者知道模型而不是随机性(例如来自双子球)用于选择特定的密码。
多少位熵就够了?这取决于你的威胁模型。正如XKCD漫画所指出的,对于在线猜测来说,大约40位的熵是相当好的。为了防止离线猜测,需要更强的密码(例如80位或更多)。
哈希(值:数组% 3字节%3E) -%3E向量% 3字节,N%3E(对于某些固定N)
散列函数的一个例子是SHA1,在Git中使用。它将任意大小的输入映射到160位输出(可以表示为40个十六进制字符)。我们可以尝试使用SHA1 hashon作为输入sha1sum命令:
$ 打印函数 你好|sha1sum
AAF 4c 61 DCC 5e 8 a2 dabe de 0 F3 b 482 CD 9 AEA 9434d$ 打印函数 你好|sha1sum
AAF 4c 61 DCC 5e 8 a2 dabe de 0 F3 b 482 CD 9 AEA 9434d$ 打印函数 你好|sha1sum
F7 ff 9 E8 b 7 bb 2 e 09 b 70935 a5d 785 E0 cc 5d 9d 0 ab F0
在高层次上,散列函数可以被认为是一个难以反转的随机(但是确定性的)函数阿哈什函数的理想模型).哈希函数具有以下属性:
决定性的:相同的输入总是产生相同的输出。
不可逆:很难找到输入m到这样的程度hash(m) = h对于某些期望的输出h。
目标防碰撞:给定输入m_1,很难找到不同的输入m_2到这样的程度哈希(m_1) =哈希(m_2)。
抗碰撞:很难找到两个输入m_1和m_2到这样的程度哈希(m_1) =哈希(m_2)(请注意,这是比目标碰撞阻力更强的特性)。
注:虽然它可能适用于某些目的,但SHA-1不再被认为是强加密散列函数。你可能会发现这张桌子加密hashfunctions的生存期有趣。但是,请注意,推荐特定的散列函数超出了本课的范围。如果你在做重要的工作,你需要正式的不安全/密码学培训。
应用程序
Git,用于内容寻址存储。的想法散列函数是一个更一般的概念(有非加密散列函数)。Git为什么使用加密哈希函数?
文件内容的简短摘要。软件通常可以从(潜在的不太可信的)镜像下载,例如Linux ISOs,不必信任它们是有益的。官方网站通常会在下载链接(指向第三方镜像)旁边发布散列,这样在下载文件后就可以检查散列了。
承诺计划。假设你想承诺一个特定的价值,但随后又揭示了这个价值本身。例如,我想“在我的脑海里”进行一次公平的掷硬币,而不是双方都能看到的一枚经过调整的共享硬币。我可以选择一个值r =随机(),然后分享h = sha256(r)。然后,你可以叫正面或反面(我们甚至会同意r意思是头,奇怪r意思是尾巴)。你打完电话后,我可以展示我的价值r,你可以通过检查确认我没有作弊sha256(r)匹配我之前共享的哈希。
对称密码学
当你想到密码学时,隐藏信息内容可能是你首先想到的概念。对称加密通过以下功能实现这一点:
keygen() -%3E密钥(此函数是随机的)加密(明文:数组% 3字节%3E,密钥)-%3E数组% 3字节%3E(密文)解密(密文:数组% 3字节%3E,密钥)-%3E数组% 3字节%3E
不对称密码学
术语“不对称”是指有两个键,具有两个不同的角色。顾名思义,私钥是保密的,而公钥可以公开共享,不会影响安全性(不同于对称密码系统中的密钥共享)。非对称密码系统提供以下功能集,用于加密/解密和签名/验证:
keygen() -%3E(公钥,私钥)(此函数是随机的)加密(明文:数组% 3字节%3E,公钥)-%3E数组% 3字节%3E(密文)解密(密文:数组% 3字节%3E,私钥)-%3E数组% 3字节%3E(明文)符号(消息:数组% 3字节%3E,私钥)-%3E数组% 3字节%3E(签名)验证(消息:数组% 3字节%3E,签名:数组% 3字节%3E,公钥)-%3E bool(无论是或
练习
熵。
假设选择一个密码作为四个小写字典单词的连接,其中每个单词都是从大小为100,000的字典中统一随机选择的。这种密码的一个例子是纠正错误。这有多少位熵?
考虑另一种方案,即选择一个密码作为8个随机字母数字字符的序列(包括小写字母和大写字母)。例如rg8Ql34g。这个有多少个入口?
哪个密码更强?
假设攻击者每秒可以尝试猜测10,000个密码。平均来说,破解每个密码需要多长时间?
加密散列函数。从一个镜子(例如从阿根廷的镜子里).交叉检查散列(例如使用sha256sum命令)与从官方的Debian站点(例如这个文件托管于debian.org,如果您已经从镜像下载了链接文件)。
对称密码术。使用AES加密对文件进行加密,使用心脏出血:open SSL AES-256-CBC-salt-in { input filename }-out { output filename }。看内容用猫或者hexdump。用...解密open SSL AES-256-CBC-d-in {输入文件名}-out {输出文件名}并确认内容与原始使用相匹配金属波纹管。
不对称密码学。
建立ssh密钥在一台你可以访问的计算机上(不是雅典娜,因为Kerberos和SSH密钥交互)。使用更安全的密钥,而不是像在链接库中那样使用RSA密钥ED25519keys键。请确保您的私钥用密码加密,因此它受到最严格的保护。
建立GPG
给安妮斯发一封加密邮件(公开密钥).
与签署Git提交git commit -S或者创建一个签名的Git标签git标签-s。使用验证提交时的签名git显示-显示-签名或者标签上有git标签-v。
计算机专业相关的在线辅导可以加老师微信进行一对一咨询。
2021-08-10
2023-08-07
2024-02-27
2022-04-24
2021-12-07
2021-12-09
2023-09-08
2021-12-06
2023-12-08
2023-11-04
2021-01-15
2021-09-18
2022-05-12
2023-06-12
2024-02-28
2023-11-16
2023-07-02
2024-03-06
2020-02-20
2021-11-08