【Coursera】Security Introduction -Summary
对这门课程的安全部分进行一个小结.
往期随笔
前言:为什么互联网要提及安全
因为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