iOS要开始强制推行HTTPS了,大家都开始学习HTTPS的相关知识,网上很多博文一上来就讲对称加密,非对称加密,AES,RSA,和TLS和SSL协议。对于我这种没怎么深入过网络层的人来说全靠背!理解起来相当痛苦。尤其是对称加密,非对称加密,私钥加密,公钥加密,证书,数字签名,TLS和SSL是用来干嘛的,他们之间的关系,协议握手为啥要那么多,绕来绕去的,真是傻傻分不清楚。

这篇笔记就是为了理解上面所说的那些概念,知道上面提到的名词到底是啥意思,之间啥关系,以及最重要最重要的,为什么协议要那么多步骤,这些步骤存在的意思是什么,他为什么就能实现安全性?他又是怎样实现安全性的?

目录:

  • 网络层-OSI模型层
  • TLS和SSL之间的关系
  • 对称加密(私钥加密)
  • 非对称加密(公钥加密)
  • 数字签名
  • 协议
  • 名称简写及全称

网络层:

OSI模型层:

层号 OSI层 描述 协议示例
7 应用层 应用数据 HTTP、SMTP、IMAP
6 表示层 数据表示、转换和加密 SSL/TLS
5 会话层 多连接管理 -
4 传输层 包或流的可靠传输 TCP、UDP
3 网络层 网络节点间的路由与数据分发 IP、IPSec
2 数据链路层 可靠的本地数据连接(LAN) 以太网
1 物理层 直接物理数据连接(电缆) CAT5

TLS和SSL之间的关系:

SSL协议由Netscape公司开发
1995年年底发布SSL3
1996年5月TLS工作组成立,开始讲SLL从Netscape迁移至IETF
1999年1月TLS1.0面市,为了取悦Microsoft,协议进行了更名(从SSL更成TLS)
2006年4月,TLS1.1问世
...

对称加密(私钥加密)

概念:是一种混淆算法,能让数据在非安全信道上进行安全通信。为了保证通信安全,首先要得到双方都认可的加密算法和密钥(双方的密钥相同)
密钥与加密算法:
数据在非安全信道上进行安全通信。为了保证通信安全,要用到密钥加密算法
为何要密钥?
即使攻击者知晓了整个密码系统除密钥以外的所有情报,系统仍然应当能保证安全

  • 如果加密算法要得到广泛使用,就必须让其他人知道,当越来越多的人知道,那敌人知道的可能性就会增加。
  • 没有密钥的简单算法不便于在大群体中使用,每个人都可以解密所有人的通信。
  • 设计出优秀的加密算法非常困难,一种算法想要更安全,就得经过更多的曝光和审视。

如果加密算法足够优秀,攻击者只有一种方法,那就是尝试所有可能的解码密钥,俗称穷举密钥搜索(exhaustive key search),基于这一点,我们可以说密文的安全性完全取决于密钥,我们通过密钥长度来衡量加密强度,如128位的密钥有34*10^37种可能的组合。

密码:

  • 序列密码
    核心:生成一串称为密钥序列的无穷序列
    加密过程:将密钥序列中的1字节与明文序列中的1字节进行异或操作
    解密过程:因为异或操作可逆,将密文序列中的1字节与密钥序列中的相同字节进行异或操作。
    关键点:序列密码决不能第二次相同的密钥
    熟知的序列密码:RC4(简单,但以不再安全)
  • 分组密码
    核心:每次加密一整块数据,只要使用相同的密钥,每一个可能的输入组合都有唯一的输出。因此在输入上制造一个小变化(例如在任意一处变换1位),从而得到大量变体。
    加密过程:接受输入并生成看似杂乱无章的输出。
    问题1:只能使用它们加密长度等于加密块大小的数据。因此需要一个方法处理任意长度的数据(填充
    问题2:对于相同的输入,输出是相同的,这种特性使许多攻击成为可能。
    实践中的应用:使用分组密码模式的加密方案(后面有说明)来使用分组密码,来避免分组算法的问题,作为其他加密基元的基础来使用(例如散列函数,消息验证,伪随机数生成器,甚至序列密码)
    熟知的分组密码:AES

    • 填充
      追加额外的数据到明文的结尾,在TLS中,加密块的最后1字节包含填充长度,指示填充多少字节(不包含填充长度字节)

散列函数:
定义:任意长度的输入转化为定长度的输出,散列函数的结果成为散列,适用于密码学的散列函数有以下特性:

  • 单向性:给定一个散列,无法找到或者构造出生成它的信息。
  • 弱抗碰撞性:给定一条消息和散列,无法找到一条不同的消息具有相同的散列。
  • 强抗碰撞性:计算上无法找到两条散列相同的信息。

使用场合:以紧凑的方式表示比较大量数据,例如比较两个文件。经常被称为指纹,信息摘要(简单称为摘要)
熟知的散列函数:SHA1,SHA256

散列函数的强度最多只是散列长度的一半

消息验证代码:
在数据的散列与数据本身分开传输时(以防攻击者可以同时修改数据和散列),散列函数可以用于验证数据完整性。
用身份验证扩展了散列函数的密码学函数:

  • MAC:只有拥有散列密钥,才能生成合法的MAC
    通常与加密算法一起使用,如果没有MAC,那拦截者即使无法解码密文,也能修改密文。
  • 密钥的散列(keyed-hash):HMAC,将散列密钥和消息以一种安全的方式交织在一起。

分组密码模式:
为了加密任意长度的数据而设置的密码学方案。是分组密码的扩展。所以的分组密码模式都支持机密性。不过有些将其与身份验证连接在一起,有些模式会将分组密码直接转成序列密码。
它有多种输出模式(以下只举出2个):

  • 电码本模式(ECB)
    核心:是最简单的分组密码模式,它只支持数据长度正好是块大小的整数倍的情况,如果数据不满足这个条件就要事先填充。加密就是将数据按块大小切分,然后分别加密每一块。
    劣势:因为分组密码是确定的(输入相同,输出也相同),1、密文中出现的模式对应明文中出现的模式。2、攻击者可以发现信息是否重复。3、攻击者可以观察密文,并提交任意明文进行加密
  • 加密块链接模式(CBC)
    基于ECB,SSl和TLS的主要模式,整个过程开始于生成一个随机初始向量IV,长度与加密块相等,加密前,明文的第一块内容与IV进行异或操作,这一步对明文做了掩饰,并保证密文不尽相同。对于下一个加密块使用上一个块的密文作为IV,以此类推。

    必须通过线路传输到接收端,这是解密必须的。

非对称加密(公钥加密)

为什么要有非对称加密?
对称加密无法满足以下条件:

  • 随着使用它的团体成员增加,团体中的成员要共享同一个密钥,因此出现问题的几率变大了
  • 我们可以两两一个密钥,这样3个人就需要3个密钥,10个人就需要45个密钥,1000个人就需要49500个密钥!

而非对称加密可以解决以上问题。
使用两个密钥,公钥和私钥,两个密钥之间存在一定的数学关系。
使用公钥加密,只有对应的私钥能解。
使用私钥加密,任何人都可以用他们相应的公钥解密(不提供机密性,可以用作数字签名)。
使用说明:你可以广泛并安全的分享你的公钥,那么任何人都可以想你发送信息,只有你可以阅读。如果他们使用各自的私钥签名,你还可以精确的知道消息出自何人之手。

注意:虽然公钥密码的属性非常有趣,但它非常缓慢,不适用于数据量大的场景,因此往往部署于身份验证和共享秘密的协商,这些秘密后续用于快速的对称加密。

数字签名

前面说过MAC就是一种电子签名,它可以使用事先安全交换的散列密钥验证真实性,虽然这种校验非常有用,但仍有不足,因为它仍然依赖于一个私有密钥。
借助于公钥密码,数字签名可以实现与现实生活中的手写签名类似,我们可以利用公钥密码的非对称性设计出一种算法,使用私钥对信息进行签名,并使用对应的公钥验证它。
实际的方式依照选择公钥的验证密码而不同,下面以RSA为例:
签名过程:
1、将需要签名的文档用散列函数得到散列。
2、将散列和一些元数据进行编码,例如使用的散列算法。
3、将编码使用私钥加密,其结果就是签名。
4、追加到文档中作为验证的依据。
验证过程:
1、接收方接收文档,并用相同的散列算法算出散列。
2、使用公钥解密,将散列解码出来。
3、对比散列算法是否正确,散列的值是否一致。
RSA的强度取决于加密,散列以及编码组件各自的强度。

协议

加密基元本身没有什么用,例如加密和散列算法。我们只有将这些元素组合成方案和协议才能满足复杂的安全需求。

实例场景:
Alice和Bob要通信。Mallory是个攻击者。
我们假设协议允许交换任意数量的消息。因为对称加密擅长对大量数据进行加密,所以选取我们最喜欢的AES算法来进行数据加密。使用AES,Alice和Bob可以安全的交换消息,Malloc看不到他们通信的内容。但是这还不够,因为Malloc还可以干其它事情,例如神不知鬼不觉的修改消息。为了解决这个问题,我们使用只有Alice和Bob知道的散列密钥计算每个消息的MAC,在发送消息的同时,也发送消息的MAC。这时Mallory再也不能修改消息了,然而他仍然可以丢弃或者重发任意消息。为了解决这个问题,我们扩展协议,为每条消息标记指定序号。最为重要的是,我们将序号作为MAC计算数据的一部分。如果发现序号出现空缺,就能知道消息丢了。如果发现序号重复,就检测重放攻击。为了得到最佳效果,我们使用某个特殊消息来标记会话结束。如果没有这个消息,Mallory能够悄悄的结束(截断)会话。如果所有措施以到位,Mallory最多只能做到阻止Alice和Bob与其他人通信。我们对此无能为力。

到目前为止,有一大块缺失:Alice和Bob如何协商得到需要的两个密钥(一个用于加密(AES的密钥),一个用于检测完整性(MAC的密钥)),同时还要当心Mallory?我们通过为协议添加两个步骤来解决这个问题:

  • 使用公钥密码对会话进行身份验证。
    举个例子,Alice生成一个随机数,要求Bob对其签名以证明真的是他,Bob也要求Alice做同样的事情。
  • 使用密钥交换方案对加密密钥进行秘密协商。
    举个例子,Alice可以生成所有密钥,使用Bob的公钥加密,再发送给Bob,这就是RSA密钥交换的工作方式。

最后我们协议完工时的状态是:

  • 以握手阶段开始,包括身份验证和密钥交换
  • 数据交换阶段,保存机密性和完整性
  • 以关闭序列结束。

站在宏观的角度看,我们的协议与SSL和TLS完成的工作相似。

名词简写及全称:

SSL:secure socket layer 安全套接字层
TLS:transport layer security 传输层安全
IP:internet protocol 网络协议
TCP:transmission control protocol 传输控制协议
PKI:public key infrastructure 公钥基础设施
OSI:open systems interconnection 开放系统互联模型
AES:advanced encryption standard 高级加密标准
MAC:message authentication code 消息验证代码
HMAC:hash-based message authentication 基于散列的消息验证代码
CBC:cipher block chaining 加密块链接
RSA:en.wikipedia.org/wiki/RSA
ECB:electromic codebook 电码本
CBC:cipher block chaining 加密块链接
IV:initialization vector 初始向量

我的简书主页:www.jianshu.com/users/b92ab…

《HTTPS权威指南》- SSL、TLS和密码学学习笔记相关推荐

  1. 《Netty权威指南 第2版》学习笔记(1)---服务端与客户端开发入门

    前言 Netty权威指南中以时间服务器为入门案例,演示了如何通过Netty完成了服务端与客户端之间的交互过程. 在开始使用Netty开发之前,先回顾一下使用NIO进行服务端开发的步骤. 创建Serve ...

  2. 《JavaScript权威指南第六版》学习笔记-JavaScript概述

    第一章.JavaScript概述 JavaScript是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.JavaScript的语法源自Java,它的一等函数(first-cl ...

  3. 细读HTTPS -- SSL/TLS历史,密码学

    文章目录 细读HTTPS -- SSL/TLS历史,密码学 SSL/TLS协议历史 密码学 对称加密 分组密码模式 ECB CBC 非对称加密 消息验证代码 散列函数 数字签名 细读HTTPS – S ...

  4. HTTP协议,HTTPS协议,SSL/TLS协议概述

    HTTP协议,HTTPS协议,SSL/TLS协议概述 1. 什么是HTTP协议   HTTP(Hyper Text Transfer Protocol,HTTP)协议超文本传输协议,是一个基于请求与响 ...

  5. 《安全测试指南》——配置管理测试【学习笔记】

    配置管理测试 1.网路和基础设置配置测试(OTG-CONFIG-001) 测试方法:已知服务器漏洞(APache.IIS等).略. 2.应用平台配置测试(OTG-CONFIG-002) 测试方法: a ...

  6. 《Python地理空间分析指南 第2版》学习笔记-5.1 距离测量

    第5章 Python与地理信息系统 本章主要学习Python处理矢量数据,包含以下内容: 距离测量 坐标转换 矢量数据重投影 Shapefile 文件编辑 海量数据过滤 专题地图创建 非GIS数据类型 ...

  7. HTTPS协议之SSL/TLS协议四次握手

    目录 前言 SSL/TSL协议基本过程 SSL/TSL四次握手 SSL/TSL详细过程 前言 HTTPS是基于SSL安全连接的HTTP协议.HTTPS通过SSL提供的数据加密.身份验证bai和消息完整 ...

  8. https 中的SSL/TLS 加密

    其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全:而对于接收端 ...

  9. 一、HTTPS详解SSL TLS

    一.什么是HTTPS HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安 ...

最新文章

  1. nuxt 脚手架创建nuxt项目中不支持es6语法的解决方案
  2. python list同步删除
  3. hibernate二级缓存理解
  4. 你要的云小信是范爷?柳岩?还是奶茶MM?
  5. 34tomcat设置默认页面
  6. 282. Expression Add Operators
  7. Struts框架的核心业务
  8. windows 路径
  9. 记忆化搜索本质是dp
  10. c# 定义委托和使用委托(事件的使用)
  11. XCT学习笔记_X射线
  12. 全速jpg转换成pdf转换器v1.0官方版
  13. as常用固定搭配_初中英语常用固定搭配
  14. UA MATH524 复变函数4 复级数与复变函数的积分基础
  15. 默写人体的方法有哪些?如何默写好画人体?
  16. 智能型电话远程遥控器
  17. 2022年云办公行业研究报告
  18. 华为P30 后摄像头打不开(C1904失效)维修案例
  19. 深度学习--超参数(持续更新)
  20. 计算机专业可以考天文学研究生吗,天文学专业强势高校来袭 看似冷门考生却挤破头都想去...

热门文章

  1. 华师大c语言作业答案,2018华东师范大学计算机系机试题目代码
  2. 无法将文件ftp服务器上,ftp服务器上传不了文件
  3. java jfinal 定时任务_JFinal 中的cron4j定时插件
  4. Ubuntu18.04 root 登录
  5. XidianOJ 1176 ship
  6. 崔希凡JavaWeb笔记day28(JavaWeb完毕)(期末,暂停更新)(2016年11月16日12:35:27)...
  7. flex中自定义皮肤的按钮制作
  8. book: Effective Java
  9. WIF - claims-based identity
  10. SGI STL 学习笔记二 vector