这文章记录一些关于计算机的知识,我觉得程序员应该可以看看,大部分都是抽象,我们在写代码或者在做程序的时候,不用在乎底层知识,我们只需要写,编译器会帮我们处理成想要的样子,我觉得硬件底层是很复杂的一个东西,它不仅仅是编程的逻辑判断,还有物理知识,电的知识,这篇文章是一个个抽象来理解计算机,所以我们不用关心底层什么 ALU,或者 计算等等。

视频

这篇文章不只是记录,也写包括我的理解,可能不是很对,有错误请给提 issues。

感谢CrashCourse 字幕组 以及 Crash Course 你们很棒.

计算机没有道德观念,只要给计算机写清具体问题,它们很乐意地闪电般算出答案。

破坏医院计算机系统的代码 和保持病人心跳的代码 对计算机来说没有区别。


我们可以把计算机安全,看成是保护系统和数据的:保密性,完整性和可用性。

保密性

”保密性” 是只有权限的人,才能读取计算机系统和数据,黑客泄露别人的信用卡信息,就是攻击保密性。

完整性

“完整性”是只有有权限的人,才能使用和修改系统和数据。黑客知道你的邮箱密码,假冒你发邮件就是攻击 “完整性”

可用性

“可用性” 是有权限的人,应该随时可以访问系统和数据。拒绝服务攻击(DDOS)就是黑客发大量的假请求到服务器,让网站很慢或者挂掉。这就是攻击“可用性”


为了实现这三个目标,安全专家会从抽象层面想象 “敌人” 可能是谁,这叫 威胁模型分析

  • 模型会对攻击者有个大致描述:能力如何,目标可能是什么,可能用什么手段。攻击手段又叫 “攻击矢量”。

威胁模型分析 让你能为特定情境做准备,不被可能的攻击手段数量所淹没,因为手段实在有太多种了。

威胁模型分析 通常会以能力水平区分,比如“某人可以物理接触到笔记本计算机,而且时间无限。
在给定的威胁模型下,安全架构师要提供解决方案,保持系统安全,只要某些假设不被推翻,比如没人会告诉攻击者密码。

who are you

权限应该给合适的人,拒绝错误的人。
所以为了区分我们用 身份认证

让计算机得知使用者是谁
身份认证有三种,各有利弊:

  • what you know
    “你知道什么” 是基于某个秘密。只有用户和计算机知道,比如 用户名和密码。
    暴力攻击,因为这是试遍一切可能,这种算法没什么聪明的地方。如果你错误尝试3次,有些系统会阻止你继续尝试,或让你等一会儿,这个策略普遍而且合理。
    但是如果黑客控制了数以万计的计算机,形成一个僵尸网络,用这么多计算机尝试密码,同时尝试很多银行账户。
    PIN码
    但即使8位数字的 PIN 也很容易破解,这就是为什么现在很多网站 要求大写+小写字母。还有特殊符号等,大大增加可能的密码。
    包含各种字符的 8 位长度密码有超过 600万亿种组合
  • what you have
    你有什么 是基于用户特定物体,比如钥匙和锁,这避免了被人 “猜中” 的问题。
    钥匙可以被复制,手机可能被偷,锁可以撬开,最后,“你是什么”这种验证,是基于你把特征展示给计算机进行验证。
    生物识别验证器,比如指纹识别器和虹膜扫描仪就是典型例子。(你知道什么,和 你有什么。)
    这些非常安全,但最好的识别技术仍然很贵。

重要账号,安全专家建议用两种或两种以上的认证方式。这叫 “双因素”“多因素” 认证,。

  • and what you are
    一旦系统知道你是谁,它需要知道你能访问什么,因此应该有个规范,说明谁能访问什么,修改什么,使用是什么。

权限访问控制列表 (ACL)来实现
其中描述用户对每个文件,文件夹和程序的访问权限。

  • “读” 权限允许用户查看文件内容。
  • “写” 权限允许用户修改内容。
  • “执行”权限允许用户运行文件,比如程序

有些组织需要不同层级的权限,比如间谍机构,“访问控制列表” 的正确配置非常重要。以确保保密性,完整性和可用性。
假设我们有三个访问级别:公开,机密,绝密。

这个 “不能向上读,不能向下写” 的方法 叫 Bell-LaPadula 模型
它是为美国国防部 “多层安全政策” 制定的。
还有许多其他的访问控制模型 - 比如 “中国墙” 模型 和 “比伯” 模型。


如果攻击者给计算机装了恶意软件,控制计算机的操作系统。
我们仍然无法保证程序和计算机系统的安全。
系统级安全的圣杯之一是 “安全内核” 或 “可信计算基础”:一组尽可能少的操作系统软件,安全性都是接近可验证的

构建安全内核的挑战在于 决定内核应该有什么
记住,代码越少越好!
在最小化代码数量之后,要是能 “保证” 代码是安全的,会非常棒。
正试验证代码的安全性 是一个活跃的研究领域。


我们现在最好的手段,叫 “独立安全检查和质量验证”
让一群安全行业内的软件开发者来审计代码。这就是为什么安全型代码几乎都是开源的。写原始代码的人通常很难找到错误。


另外还有一些安全大会,安全专家可以相互认识,分享想法。

隔离

沙盒程序
操作系统会把程序放到沙盒里,方法是给每个程序独有的内存块,其他程序不能动。一台计算机可以运行多个虚拟机。
虚拟机模拟计算机,每个虚拟机都在自己的沙箱里。
如果一个程序出错,最糟糕的情况是它自己崩溃,或者搞坏它处于的虚拟机。

计算机上其他虚拟机是隔离的,不受影响的。