对这门课程的安全部分进行一个小结.

往期随笔

第八周第一节

第八周第二节

第九周第一节

第九周第二节

前言:为什么互联网要提及安全

因为security牵扯到我们每一个人,有人每时每刻都想着要偷取别人的个人信息来卖钱。

我们对于这个世界 太普通了,大部分想偷取我们利益的人,基本都是想拿走我们的银行卡,然后在冻结银行卡之前,买一些东西给他们维持生计。

没有完美的安全措施。

两个术语:贯穿着整个安全的课程

Confidentially : 防止信息被第三方查看

Integrity : 防止被第三方欺骗

两个密码系统:

  • public-key cryptosystem
  • secret-key cryptosystem

两种信息:

  • 明文:Plaintext is a message that will be put into secret form.
  • 暗文:Ciphertext is a transformed version of plaintext that is unintelligible(不能理解的) to anyone without the means to decrypt(解释清楚).

第八周:private-key cryptosystem 密钥密码系统

  • Confidentially : 对称密钥
  • Integrity : 哈希函数 -> Digest

Confidentially 保证机密性 : 对称密钥

密钥,又称作 symmetric-key 对称密钥,意味着发送方和接收方都知道信息的内容。简单的来说,加密和解密使用同一把钥匙。

利用这一 相同的钥匙 保证 Confidentially。

实例:凯撒密码(The Caesar cipher) 是一种最古老的 最广泛应用的加密方式,输入一串暗文,利用凯撒密码的解密方式 得到明文。它采用的是 替换(shift)的概念。

问题:需要有一个绝对安全的交流环境。需要一个安全的方法告诉对方密钥。

Integrity 防止欺骗 : 哈希函数 -> Digest

在计算机世界里,信息的传递也需要一个这样的“防伪标签”。从“signature”,我们能够获知数据的来源,以及判断信息是否被篡改。

哈希密码函数 的实参可以是 任意的数据段,并且会返回一个 固定大小的比特字符串。对数据偶然或者有意的改变 都会造成哈希值的变化,编成电码的数据 经常被称作“信息”,哈希值也被称作 message digest 或者是 simple digest。

利用哈希值的变化,判断数据是否有被篡改,保证 Integrity。

  • 文本 ---(hash function)---> Digest.
  • A large block of data ---(hash fuction)---> fixed-size bit string

实例:一些优秀的哈希技术:SHA1,HD5···

问题:但糟糕的是,输入两串不一样的数据,有可能输出的Digest会相同。这就证明了 哈希函数产生的这一串数字可能会指明两串不同的数据。

应用:哈希密码

当你创建了一个密码的时候,数据库调用哈希函数来reset你的密码,转换成 hash value,然后存储它。然后当你想要登陆的时候,它们再次将你输入的密码转换成hash然后与数据库中的存储内容进行比对,如果是准确的,那么就允许你登陆。

将你的信息转换为hash之后,并没有办法再从hash转换成对应的信息,因为原始信息已经丢失了。

具体操作 : Simple Message Signing 简单的文件签名

首先发送数据的一端,就叫它是A端吧,那么接收端就是B端了。

A端首先和B端共享了 一个秘密解码(secret),SHA通过这个秘密解码可以计算出 数据和解码(message_1secret)的 SHA值,也就是我们所说的 数据摘要digest了。

好了,A端发送了数据 message_1 和 数据1的摘要 digest_1。也就是 message_1+digest_1。

···经过了不可靠的媒介传送到了B端···

OK,此时B端拥有的东西是 和A端相同的 秘密解码(secret)。接收的是 message_2(可能是message_1,也可能是message_1的变种) 和 digest_1。

那么此时B端需要知道的是,数据是否是A端传送过来的,或者说,传送的数据是不是发生了改变。

通过什么来验证呢:就是我们所说的数据摘要了。B端 使用 秘密解码(secret) 和 接收到的 不知道有没有发生改变的 message_2 计算出了 数据2(message_2secret)的摘要 digest_2。

那么进行比对:digest_1 和 digest_2 如果一样 ---> message_1 和 message_2 一样 ---> 数据是A端发生的,传送过程中数据很安全,没有发生改变。

唯一知道如何匹配的方法是 知道这个secret。也就是说,除了知道 secret 的 发送端 和 接收端,其他人并不知道 怎么样计算出 数据的摘要digest。

在信息末尾 添加digest(hash_value),并且通过在接收端的比对,判断信息是否有被篡改。通过 Digest 这个机制保证了 Integrity。

缺陷:(公钥系统弥补)

进行shared secret本身就是一件很困难的事情,因为中间媒介的不安全性。

第九周:public-key cryptosystem 公钥密码系统

  • Confidentially : 不对称的密码系统,public key 加密,private key 解密。
  • Integrity : CA证书 以及 带有 Digest 的 public key。

Confidentially 保证机密性 : public key + private key

public key 加密,private key 解密。

从两个非常大的素数的乘积中获取 public key 和 private key。

在媒介中传递的是 public key,会被第三方获取,但是由于得到public key的素数算法,很难从 public key 获取 private key,但不是完全不可能(利用超级计算机)。

所以 从可计算性的角度来看,破解它基本是一件基本不可能的事情。除了暴力破解它之外,没有什么好的方法来从public-key破解出private-key。

保证了 Confidentially。

应用:SSL/HTTPS/TLS

我们利用这个 secret key 和 public key 的密码机制,对HTTP进行了改进,在数据模型中增加了一个小型的Layer。

HTTP 是应用层的一个协议,在应用层(application layer)和运输层(transport layer)之间,有一个小的层次:SSL。工作就是 利用公钥密码系统,加密和解密应用层传递的信息。

应用层发送的数据,都是未加密的。在TCP/IP四层模型的其他位置,比如中间的路由器,IP层,光纤等等,它们并不能区别加密的信息和未加密的信息,它们只是做了运输的工作。

Integrity 防止欺骗 : CA证书 和 带有 CA认证(digest) 的 public key

保证Integrity有两点:

  • (1)保证我们信息发往的对象不是第三方 : CA证书
  • (2)保证传递给我们的 public key 不是来自第三方,而是来自我们想要沟通的对象 : 带有 CA认证(digest) 的 public key

(1)保证我们信息发往的对象不是第三方 : CA证书

公钥证书:电子文件 使用数字签名 将一个 认证的身份/姓名 和public key捆绑在了一起。

它可以用于核实 public key 的来源。保证我们信息发送的对象不是第三方。

我们花了很大的价钱购买了证书,但是CA同样也花了很大的精力来认证,防止错误地发送证书给第三方。

我们发送数据的对象 通过 public key 上的CA证书 证明是可靠的对象,是我们的数据想要发往的对象而不是第三方。

(2)保证传递给我们的 public key 不是来自第三方,而是来自我们想要沟通的对象 : 带有 CA认证(digest) 的 public key

具体参见:第九周第二节

(1)VeriSign 有一个public key 和 一个 private key,他们存储了private key。随后他们把 Verisign public key 交给了苹果,微软以及Linux,这些公司把 VeriSign public key 装进了你的laptop中。

(2)Amazon 此时想做一些交易,Amazon 在它的服务器中,生成了一对 Amazon public key 和 Amazon private key, Amazon private key从不离开Amazon的服务器。然后,Amazon 把它的 Amazon public key 传送给 VeriSign,第三方可能会看见,但是没有关系,它只是public key。

(3)在 VeriSign 的服务器内部,使用了它的 VeriSign private key 生成了摘要(digest),并且把证书和 在尾部添加了 digest 的 Amazon public key 发送给 Amazon。
-那么现在 Amazon 拥有的不是以前的 Amazon public key 了,它现在是 被 VeriSign 证明(通过digest) 的 Amazon public key,也就是说,之前 Amazon 把它的 public key 发送给 VeriSign, Verisign 对它进行了签名(也就是身份验证),使得第三方很难去伪造它。 (4)经过了很长的一段时间,你想在你的laptop上面登录 Amazon 购买一些鞋子。
-Amazon 把带有 CA证书 和 digest 的 Amazon public key 发送给你,那么此时你拥有的是 从你购买电脑的那一刻起,安装在你电脑里面的 VeriSign public key,通过这个 Verisign public key 和 Digest 你验证了 Amazon public key 是经过 Verisign 认证的,那么也就是说,这个 Amazon public key 确实是 Amazon 发送过来的。 (5)我们可以放心的用 发送过来的 Amazon public key 加密我们的信息(因为我们通过 Verisign 的 digest 验证了这个 public key 的安全性),然后发送给目的地 而不必担心目的地是虚假的(因为CA证书)。 (6)Amazon 收到了你用 Amazon public key 加密的 暗文,随后 Amazon 使用 从未离开的 Amazon private key 对 暗文 进行解密。得到了想要的信息。

小结:

安全部分分为两大块:(1)公钥部分 (2)密钥部分

贯穿安全部分的两个术语:(1)Confidentially (2)Integrity

密钥部分:(1)Confidentially : 对称的密码系统(比如凯撒密码) (2)Integrity : 哈希函数 生成 Digest,发送端和接收端进行对比。

公钥部分:(1)Confidentially : 不对称的密码系统 public key 加密 private key 解密 (2)Integrity : 1)利用CA证书确定发送的目的地 2)利用CA认证的 带有digest的 public key 来确认发送 public key 对象(是我们要沟通的对象而不是第三方)。

2016/8/14

【Coursera】Security Introduction -Summary的更多相关文章

  1. 【Coursera】Security Introduction -Eighth Week(1)

    Security Introduction People With Bad Intent 今天,Bob 向 Alice 发送了一条 "Hello,Allice!" 的信息,他们希望 ...

  2. 【Coursera】Security Introduction -Ninth Week(1)

    前言 Coursera 的 Internet History,Technology,and Security 进入最后一周的学习了,在这最后一周内,需要进行的内容是 public-key 公钥系统的讲 ...

  3. 【Coursera】Security Introduction -Eighth Week(2)

    Review -Terminology(术语): Confidentiallity & Integrity 泄密 & 欺骗 Confidentiallity: Prevent unau ...

  4. 【Coursera】Security Introduction -Ninth Week(2)

    对于公钥系统,我们现在已经有了保证它 Confidentially 的一种方法:SSL.SSL利用了公钥的概念. 那么 who we are talking to? Integrity Certifi ...

  5. 【Coursera】Seventh Week

    Application Layer:Use the services of the TCP layer Quick Review Link Layer(Ethernet):gets the data ...

  6. 【python】An Introduction to Interactive Programming in Python(week two)

    This is a note for https://class.coursera.org/interactivepython-005 In week two, I have learned: 1.e ...

  7. 【Coursera】History: Dawn of Electronic Computing学后小结

    今天学习了Coursera上University of Michigan开的互联网的历史.技术和安全课程的FirstWeek内容. 先是吐槽下这个Coursera,认证非常麻烦,PC端需要摄像头拍照. ...

  8. 【Coursera】支持向量机

    一.最大间隔分类器 1. 函数间隔:\(γ^{i} = y^{i}(w^{T} x + b)\), 改变w和b的量级,对分类结果不会产生任何影响,但是会改变函数间隔的大小.因此,直接对函数间隔求最大值 ...

  9. 【转】An introduction to using and visualizing channels in Go

    An introduction to using and visualizing channels in Go 原文:https://www.sohamkamani.com/blog/2017/08/ ...

随机推荐

  1. Linux文件目录介绍及文件颜色区别

    文件颜色代表含义: 蓝色表示目录: 绿色表示可执行文件: 红色表示压缩文件: 浅蓝色表示链接文件: 白色表示其他文件: 黄色是设备文件,包括block, char, fifo. 常见目录解释 Linu ...

  2. 005-四种常见的 POST 提交数据方式

    1.http请求方法 HTTP Method RFC Request Has Body Response Has Body Safe Idempotent Cacheable GET RFC 7231 ...

  3. 为什么要用Markov chain Monte Carlo (MCMC)

    马尔科夫链的蒙特卡洛采样的核心思想是构造一个Markov chain,使得从任意一个状态采样开始,按该Markov chain转移,经过一段时间的采样,逼近平稳分布stationary distrib ...

  4. end=‘’

    print('----------------') a = ['aa','bb','cc','dd','ee'] for i in range(len(a)): print(i,a[i])#默认换行 ...

  5. C#调用VP 包含素材

    VS2012 +VP9.0 ***************** 自己运行的时只要修改VP里面素材的路径即可 链接: https://pan.baidu.com/s/1J6Bc5FcBYLZLgqe30 ...

  6. selenium webdriver窗口切换(下)

    多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...

  7. 浅谈Java中的初始化和清理

    引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...

  8. Perl的子程序(二)

    在Perl中可以自己创建子程序(Subroutine): 关键字sub,子程序名以及用花括号封闭起来的代码块. sub  marine { ... } 子程序名与标量的命名空间是不同的两个部分. 子程 ...

  9. ASIC中的一些库和文件类型

    以下内容均来源于网络: 在进行综合,分析STA时,有几种库类型. NLDM: 非线性线载模型,最基本的dot lib. 电压源模型,cap值是单一值.  在90nm工艺以下,由于晶体管的特性变得很复杂 ...

  10. 利用js添加class

    来来来,开篇点题. 分页应用.当在当前页时,分页的数字有个框之类的. 重要代码如下 <ul class="pagination"> <li><a hr ...