【2021-11-08 更新】【梳理】简明操作系统原理 第二十章 加密(docx)

本文介绍了加密技术的基础,包括Caesar密码、公钥加密和加密哈希。公钥加密如RSA提供了身份验证和秘密通信,但面临密钥分发挑战。加密哈希用于密码存储和文件完整性检查,如SHA-1曾广泛使用但已不安全,现推荐使用SHA-3。
摘要由CSDN通过智能技术生成

配套教材:
Operating Systems: Three Easy Pieces Remzi H. Arpaci-Dusseau Andrea C. Arpaci-Dusseau Peter Reiher
参考书目:
1、计算机操作系统(第4版) 汤小丹 梁红兵 哲凤屏 汤子瀛 编著 西安电子科技大学出版社

在线阅读:
http://pages.cs.wisc.edu/~remzi/OSTEP/
University of Wisconsin Madison 教授 Remzi Arpaci-Dusseau 认为课本应该是免费的
————————————————————————————————————————
这是专业必修课《操作系统原理》的复习指引。
需要掌握的概念在文档中以蓝色标识,并用可读性更好的字体显示 Linux 命令和代码。代码部分语法高亮。
文档下载地址:
链接:https://pan.baidu.com/s/11alVHqKWYI-a0KFgd00UbA
提取码:0000

二十 加密

操作系统只在受限的领域内具有相当大的控制权。它既无法控制其它机器上发生的一切,也无法控制当使用自身以外的机制访问运行自己的硬件时,会发生什么。如何令操作系统保护不由它控制的资源的访问呢?假设我们将要丢失数据,或者敌人正尽力去篡改数据。我们采取措施,令这些情况不引发问题。关键的一点观察:如果敌方无法理解获取到的数据的形式,我们的秘密就安全了。既然攻击者连明白拿到的东西都不行,很可能也就没能力篡改它们——至少不能通过可控的方式。
我们使用的核心技术是:密码学(cryptography)。密码学包含一系列技术集合,用于通过可控的方式,转换数据为另一种可预测的形式。如果正确发挥其作用,攻击人员就无法通过考察保护形式的数据来确定原始数据。当然,对于我们自己,还必须同时确保能够正确还原数据为原始形式。正确使用密码学,不但能够防止数据遭到篡改,还可以得知是谁尝试破坏数据。
但这并不容易。许多使用方式都需要很大的算力。所以,要对使用方法做出适当选择,并谨慎实现与集成至系统中。选定了加密的正确使用方式,可以极大增加安全性。否则,不但可能一点帮助都没有,或许还会造成额外损害。
关于密码学的书籍有很多,在这里我们只用一章进行讲解。即便如此,还是可以讨论许多有用的东西。那些复杂的密码学问题在这里基本都可以忽略,毕竟我们并不是要全都成为密码学家。我们只是要成为技术的使用者,依赖内行的专家们提供的、可以不完全明白原理就使用的工具。相对地,我们当中只有少数人明白计算机硬件工作的深层细节,但我们仍能成功使用计算机,因为能接触到良好的界面(接口)。聪明人们在设计硬件时,已经花了非常多的心思考虑我们了。类似地,加密技术也提供了强大的接口和良定义的行为。
即便如此,加密技术也不是魔法棒。只是为了正确使用它,也依然需要有许多应当明白的知识,尤其是在使用操作系统的过程中。

密码学的基本思想是:取一段数据,使用一个算法(常称为加密算法,cipher),算法通常由第二段信息(称为密钥,key)增强,将数据转换为不同的形式。新形式不应该看起来与原有的形式有相像。典型地,我们也希望能运行另一种算法(算法也由另一段信息增强),将数据恢复原来的形式。
形式化地说,如果数据记为P(通常称为明文,plaintext),密钥为K,加密(encryption)算法E(),加密结果为C:它是P的另一种形式。则密文(ciphertext)

C=E(P,K)
Caesar密码(Caesar cipher)是最古老、最简单、最广为人知的一种加密技术。它将明文中的所有字母都在字母表上向后或向前移动一个固定的步数,通常被作为更复杂的加密中的一个步骤。Caesar密码最早由罗马共和国(Roman Republic)末期的Gaius Iulius Caesar(盖乌斯·尤利乌斯·恺撒)用于在军队中传递加密信息。现在已经无法弄清凯撒密码在当时有多大的效果,但是有理由相信它是安全的。因为凯撒的大部分敌人都目不识丁,而其余的则可能将这些消息当作是某个未知的外语。即使有敌人获取了凯撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。
反变换算法接收密文C,使用解密(decryption)算法D()和密钥K重新得到明文
P=D(C,K)
为了加密过程能够有用,使信息能以加密形式成功传递,首先,加密过程必须是确定性的。即:对于一段特定的明文P,使用相同的加密算法E()和密钥K,必须总是得到相同的密文C。同样地,对一段特定的密文C,使用相同的解密算法D()和密钥K,必须总是得到相同的明文P。许多情况下,加密算法与解密算法相同,但这不是必须的。此外,还要求在密钥K未知的条件下,想从密文C得到明文P极为困难。能够实现严格的不可能固然好,但如果只是达到破译出明文在计算上不可行(computationally infeasible),通常也能满足要求了。如果能这样做,我们大可直接将密文C亮给最庞大的敌人,即便是世界上最聪明的人员,也无法从密文C得到明文P。

当然……很明显,这里就是理论的论文和纷乱的现实开始碰撞的地方了。我们只能被保证,在敌方不知道加密算法D()和密钥K时,能够确保秘密性(secrecy)。如果敌人获得了加密算法D()和密钥K,就能输入密文C得到明文P。
实际上,我们无法让加密算法E()和解密算法D()不被获取。
加密和解密算法做出来以后,是要给人用的,而且一般要大规模应用。大量事实证明,无论使用专门的硬件实现还是软件实现,都无法阻挡其他人(哪怕并不是数学或密码学等领域的重量级人物)将算法破解出来。也许有人会提出,由警察乃至部队来强制保证加密与解密算法不被公开。但是,在安全的战线上,从来不缺间谍。收买、威胁、绑架掌握了密码或加密或解密算法的人员,甚至可能要比直接拿到写有加密或解密算法的文件,或者截获运行了相关算法的硬件或软件去进行破解,来得更为方便。
必须指出,加密算法的“安全性”没有严格的、明确的数学定义。目前,考察加密算法的安全性的唯一标准就是:这个算法是否经得住大量的、多种多样的破解尝试。一个加密算法安全不安全,一个专家说了不算,十多个专家说了也不算;就算全世界的密码学家都说它安全,但在大规模投入使用的过程中,碰巧偶然发现了一个不小的漏洞,他们说的也还是不算。
声称一种密码算法是安全的,必须要让大家相信,这样的声明才有意义。信任来自哪里?可以是数字证书的专门管理机构,也可以是软件厂商,专业的研究人员,仅凭兴趣就来参与研究的白帽子(white hat),还可以是大量完全不懂密码学的非专业人员。对加密算法遮遮掩掩、步步严控,如何让大家相信算法是安全的,并敢于充分投入实际使用呢?假如你不敢把你的加密算法拿出来给大家看,但是我就敢,我把算法的细节都毫无保留地写成论文发布出来,甚至连实现的源代码都写了一份,让大家亲自尝试。我都公开成这样了,结果所有人都花了很久时间,也还是破不了这个算法。这不正说明了,你没有底气表明你的算法具有高安全性,而我就有底气向大家保证,我本人的加密算法的安全性才足够高吗?
目前,已经公开了许多在数学上能够表明其极难被破解的加密算法。它们都是基于绝对不可以违逆的数学规律。可以十分肯定,它们比任何人都可靠——全世界最顶级的大脑汇聚起来,绞尽脑汁,都难以将它们的安全性降低。
加解密算法的不公开,不能提高加密的可靠性。这是反常识的。密码学这个新兴领域有太多反常识的东西。例如
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值