《现代操作系统》第九章习题答案

  1. 流行的新闻服务需要保证完整性和可用性,但不需要保密性。备份存储系统需要保密性和完整性,但不一定需要 24/7 的可用性。最后,银行服务需要保密性、完整性和可用性。

  2. (a) 和 (c) 必须是 TCB 的一部分,而 (b)、(d) 和 (e) 可以在 TCB 之外实现。

  3. 隐蔽信道是指通过观察和操纵系统的可测量性能特征在系统中创建的未经授权的通信通道。隐蔽信道存在的关键要求是有一些共享的系统资源,例如 CPU、磁盘或网络,可以用于发送秘密信号。

  4. 它只被输入到矩阵中两次。在文本中给出的例子中,print-er1 同时在两个域中。这里没有问题。

  5. 完全保护矩阵 : 5000\times 100 = 500,000 个单位的空间。
    ACL: 50\times 100 (1% 的对象在所有域中可访问;每个 ACL 有 100 个条目) + 500\times 2 (10% 的对象在两个域中可访问;每个 ACL 有两个条目) + 4450\times 1 (89% 的对象在一个域中可访问;每个 ACL 有一个条目) = 10,450 个单位的空间。用于存储 capability list 所需的空间与 ACL 相同。

  6. (a) Capability list
    (b) Capability list
    (c) ACL
    (d) ACL

  7. 要使一个文件对除某个人以外的所有人可读,只能使用访问控制列表。为了共享私人文件,可以使用访问控制列表或 capabilities。要使文件公开,最简单的方法是使用访问控制列表,但也可能将文件的 capability 放在一个可识别的位置,以供 capability 系统使用。


  8. “时机已至”,海象对镜中花纹鱼说,“该谈论很多事情,船只、鞋子和蜡烛,甘蓝和君王,为何海水沸腾,猪是否有翅膀,但等一等”,蚝说,“我们先稍作休息,有些人无法喘息,我们所有人都太胖了”,“不急”,木匠说,他们非常感谢他的这一点。引自《镜中世界》(Tweedledum 和 Tweedledee)。

  9. 约束条件是没有两个单元格含有相同的两个字母,否则解密将是模糊的。因此,这 676 个矩阵元素中每个元素都包含不同的 676 个二连体之一。不同组合的数量因此是 676!这是一个非常大的数字。

  10. 排列的数量是 n!,因此这就是密钥空间的大小。一个优点是基于自然语言属性的统计攻击不起作用,因为 E 确实表示 E,等等。

  11. 发送者选择一个随机密钥,并用他们共享的秘密密钥对其进行加密,然后将其发送给可信第三方。然后,可信第三方解密随机密钥,并用它与接收者共享的秘密密钥加密它。然后将此消息发送给接收者。

  12. y=x^{k} 这样的函数很容易计算,但是取 y 的 k 次方根要困难得多。

  13. A 和 B 选择随机密钥 Ka 和 Kb ,并使用 C 的公钥对其进行加密,然后将它们发送给 C 。 C 选择一个随机密钥 K ,并使用 Ka 对其进行加密发送给 A ,使用 Kb 对其进行加密发送给 B 。

  14. 一种签署文档的方法是智能卡读取文档后,对其进行哈希,并使用储存在卡中的用户私钥对哈希进行加密。加密哈希将输出到互联网咖啡店的计算机,但是秘密密钥永远不会离开智能卡,因此该方案是安全的。

  15. 图像包含 1,920,000 个像素。每个像素有 3 位可用,给出了原始容量为 720,000 字节。如果在存储之前压缩文本,则其有效地增加了一倍,图像可以容纳大约 1,440,000 字节的 ASCII 文本。由于隐写术没有扩展,图像与隐藏数据的大小相同。效率为 25%。这可以轻易地看出,每个 8 位色样本的 1 位包含有效载荷,并且压缩每个载荷位的 ASCII 文本为 2 位。因此,对于每个 24 位像素,实际上编码了 6 位 ASCII 文本。

  16. 反抗派可以使用私钥签署消息,然后试图广泛宣传他们的公钥。这可能通过让某人将其从该国家走私出来,然后从一个自由国家发布到互联网上而实现。

  17. (a) 两个文件都是 2.25 MB。
    (b) Hamlet, Julius Caesar, King Lear, Macbeth 和 Merchant of Venice
    (c) 秘密存储了六个文本文件,总计约为 722 KB。

  18. 这取决于密码的长度。密码构建的字母表有 62 个符号。总的搜索空间是 62^{5}+62^{6}+62^{7}+62^{8} ,约为 2\times 10^{14} 。如果已知密码为 k 个字符,则搜索空间仅减少到 62^{k} 。因此,比值为 2\times 10^{14} / 62^{k} 。对于从 5 到 8 的值,这些值分别为 242,235、3907、63 和 1。换句话说,了解密码只有五个字符意味着搜索空间减少了约 242,235 倍,因为不需要尝试所有长密码。这是一个巨大的优势。然而,了解密码有八个字符帮助并不大,因为这意味着可以跳过所有简短(容易)的密码。

  19. 试图安抚助手。密码加密算法是公开的。密码在被输入时就被 login 程序加密,并将加密后的密码与密码文件中的条目进行比较。

  20. 不,他不能。学生可以很容易地找到他的超级用户的随机数。这个信息在密码文件中是未加密的。举个例子,如果它是 0003,那么他只需要尝试将潜在密码加密为 Susan0003Boston0003IBMPC0003 等等。但如果另一个用户的密码是 Boston0004,他就无法发现它。

  21. 假设系统中有 m 个用户。黑客可以收集 m 个盐值,假定这些值都是不同的。黑客需要尝试对每个猜测的密码进行 m 次加密,每次都使用系统使用的 m 个盐中的一个。因此,黑客破解所有密码所需的时间增加了 m 倍。

  22. 这里有许多评判标准。以下是其中一些:
    它应该容易和无痛地进行测量(不需要血样)。
    应该有许多可用的数值(不只是眼睛颜色)。
    这个特征在时间上不应该发生变化(不是发色)。
    这个特征应该很难伪造(不是体重)。

  23. 不同认证机制的组合将提供更强大的认证。然而,有两个缺点。首先,实施这个系统的成本很高。系统需要使用三种不同的认证机制。其次,这种认证机制给用户增加了额外的负担。用户必须记住他的登录 / 密码,携带他的塑料卡并记住其 PIN 码,并且必须经过指纹匹配的过程。关键问题在于,所有这些都会增加验证用户所需要的时间,从而增加用户的不满。

  24. 如果所有机器都是可信的,它可以正常工作。但如果有些机器是不可信的,这个方案就会崩溃,因为一个不可信任的机器可以向一个可信任的机器发送一条消息,让它代表超级用户执行某个命令。接收消息的机器无法判断命令是真的来自超级用户还是学生。

  25. 把它们往前使用是行不通的。如果入侵者捕获了一个,他会知道下一次要使用哪个。将它们往后使用可以防止这种危险。

  26. 不,这是不可行的。问题在于数组边界没有进行检查。数组不与页面边界对齐,所以 MMU 对此无助。此外,在每次过程调用时,通过内核调用改变 MMU 的成本会非常昂贵。

  27. 攻击者通过在访问权限被检查和文件打开之间执行类似符号链接的操作来利用竞争条件。如果文件系统访问是一个事务,访问权限检查和文件打开将成为一个单一事务的一部分,而可序列化属性将确保在其中不能创建符号链接。这种方法的主要缺点是文件系统的性能会受到影响,因为事务会带来额外的开销。

  28. 编译器可以在所有数组引用上插入代码来进行边界检查。这个特性将防止缓冲区溢出攻击。但这样做会显著减慢所有程序的运行速度。此外,在 C 语言中,如果将大小为 1 的数组声明为过程参数,然后引用第 20 个元素并不违法,但显然,实际传递地址的数组必须至少有 20 个元素。此外,C 语言中经常使用的函数,如 memset 和 memcpy,即使它们包含单独的数组,也可以一次性复制整个结构。换句话说,它们被设计成可以导致缓冲区溢出。

  29. 如果能够使用能力来实现小保护域,那么不会有问题;否则会有问题。例如,如果一个编辑器仅通过能力访问要编辑的文件和临时文件,则无论编辑器中隐藏了什么样的技巧,它只能读取这两个文件。然而,如果编辑器可以访问用户的所有对象,那么无论有没有能力,特洛伊木马都可以执行其恶意行为。

  30. 从安全的角度来看,这是理想的。已使用的块有时会暴露出有价值的信息。从性能的角度来看,清零块会浪费 CPU 时间,从而降低性能。

  31. 对于任何操作系统,所有程序必须要么在已知地址开始执行,要么在程序文件头部存储了一个起始地址。 (a) 病毒首先将普通起始地址或头部地址处的指令复制到一个安全的位置,然后在代码中插入一个跳转到自身的指令,或者在头部中插入自己的起始地址。 (b) 在完成自身工作后,病毒执行借用的指令,然后跳转到原本将要执行的下一条指令,或者将控制权转移到原始头部中找到的地址。

  32. 主引导记录只需要一个扇区,如果第一个磁道的其余部分是空闲的,它可以提供一个病毒可以隐藏原始引导扇区以及自身代码相当部分的空间。现代磁盘控制器一次读取并缓冲整个磁道,因此读取额外数据时不会产生可察觉的延迟或额外的寻道声音。

  33. C 程序的文件扩展名为 .c。不需要使用访问系统调用来测试执行权限,只需要检查文件名是否以 .c 结尾。以下代码可以实现:
    char *file_name;
    int len;
    file_name = dp>d_name;
    len = strlen(file_name);
    if (strcmp(&file_name[len - 2], *. $c$ *) == 0) infect(s);


  34. 他们可能无法确定,但他们可以猜测对病毒中的一个字与其他字进行异或操作会生成有效的机器码。他们的计算机可以逐个尝试每个病毒字,并查看它们中有哪些产生有效的机器码。为了减慢这个过程,Virgil 可以使用更好的加密算法,例如对奇数和偶数字使用不同的密钥,然后通过密钥的哈希函数确定位数左移第一个字,以及位数加一左移第二个字,以此类推。

  35. 压缩器用于在感染其他可执行程序的过程中进行压缩。

  36. 大多数病毒不希望对一个文件进行重复感染,可能甚至不会起作用。因此,能够检测文件中的病毒以查看它是否已经感染是很重要的。用于使病毒难以被防病毒软件检测到的所有技术也使得病毒本身很难告诉哪些文件已被感染。

  37. 首先,从硬盘运行 Ifdisk 程序是一个错误。它可能已被感染,可能会感染引导扇区。必须要从原始光盘或只读的软盘中运行它。其次,恢复的文件可能已被感染。不清理它们就将其放回可能会重新安装病毒。

  38. 是的,但机制与 Windows 略有不同。在 UNIX 中,伴生病毒可以安装在搜索路径中在真实程序所在的目录之前的目录中。最常见的例子是在用户目录中插入一个名为 ls 的程序,它会有效地覆盖掉 /bin/ls,因为它被先找到。

  39. 显然,从不明来源执行任何程序都是危险的。自解压缩的存档尤其危险,因为它们可能会将多个文件释放到多个目录中,而解压缩程序本身可能是特洛伊木马。如果有选择的话,最好以普通存档的形式获取文件,并使用你信任的工具进行解压缩。

  40. 由于 rootkit 的设计是为了隐藏自己的存在,它会感染操作系统、库和应用程序。因此,任何依赖于系统功能的检测软件都不能被信任。从本质上讲,rootkit 的存在会破坏用于发现它自身的软件。因此,rootkit 检测器必须依赖于外部组件,例如外部 TCB 的扫描。

  41. 由于 rootkit 可以破坏恢复软件,例如重设系统还原点,这种系统恢复的方法是不可行的。

  42. 不可能编写这样的程序,因为如果这样的程序存在,黑客可以使用该程序来绕过带有病毒的程序中的病毒检查。

  43. 可以检查所有进入数据包的源 IP 地址。第二套规则将丢弃所有源 IP 地址属于已知垃圾邮件发送者的进入 IP 数据包。

  44. 这没关系。如果使用了零填充,那么 S2 必须在低位的 \text{k} 位中包含真前缀作为无符号整数。如果使用了符号扩展,那么 S2 也必须进行符号扩展。只要 S2 包含了对真实地址进行移位的正确结果,那么 S2 的未使用上位位中的内容就不重要了。

  45. 现有的浏览器预装了几个受信任的第三方机构的公钥,例如 Verisign 公司。他们的业务包括验证其他公司的公钥并为其创建证书。这些证书是由 Verisign 的私钥签名的。由于 Verisign 的公钥内置在浏览器中,使用其私钥签名的证书可以被验证。

  46. 首先,Java 不提供指针变量。这限制了进程覆盖任意内存位置的能力。其次,Java 不允许用户控制的存储分配(malloc/free)。这简化了内存管理。第三,Java 是一种类型安全的语言,确保变量根据其类型以预期的方式使用。

  47. 规则如下。
  1. URL
  1. 签名者
  1. 对象
  1. 动作
  1. http://www.appletsRus.com
  1. AppletsRus
  1. /usr/me/appletdir/*
  1. 读取
  1. http://www.appletsRus.com
  1. AppletsRus
  1. /usr/tmp/*
  1. 读取,写入
  1. http://www.appletsRus.com
  1. AppletsRus
  1. www.appletsRus; port: 5004
  1. 连接,读取

  1. 小程序是一种执行特定任务(例如填写表单)的小型程序。小程序与应用程序的主要区别在于,小程序在专用大型程序的范围内运行,例如渲染网页。小程序是典型的辅助应用程序示例,它们不会占据用户的注意力,并且旨在易于访问。由于小程序通常是从第三方下载的,它们实际上包含在用户的计算机上运行的外部代码。它们可能包含病毒、蠕虫或其他有害代码。

你可能感兴趣的:(服务器,linux,学习,笔记,unix,c语言)