通信加密技术

不加密

  • 不安全,密码等内容明文在网络中传递

简单加密(对称加密)

  • 必然有一个传递秘钥的过程,此过程不安全
  • 如果线下传递秘钥,代价大,不方便
  • 如果线上传递秘钥,只要传递秘钥的过程被中间窃取,则后续内容都可以被第三方解密掉

非对称加密

  • 技术概念

    • 一次生成公私秘钥;公钥的加密内容,无法通过公钥解密;私钥类似;只能一方加密,对方解密
    • 自己把消息用私钥加密,发送出去,对方用公钥可以解密–》此过程的网络传输可以被拦截,可以获取对外传输的内容
    • 对方把消息用公钥加密,发送过来,自己用私钥可以解密–》网络拦截没法用公钥解密,没法获取内容
  • 加解密过程
    1. 将消息内容转变成 正整数m(字符串取unicode码/ascii码)
    2. 发送方算法处理,从 正整数m 计算出 正整数c
    3. 接收方算法处理,将 正整数c 计算出 正整数m
    4. 将 正整数m 按照编码号,转回成 字符串,即 原消息内容
  • RSA算法
    1. 随机取两个不相等的大质数(p,q)
    2. n = p * q
    3. n 转化为二进制的总长度,称为秘钥位数,一般要求该位数达到1024,确保安全(已知被破解的最长是700+位)
    4. 通过算法计算出两个数e、d
    5. 封装(n,e)做公钥, 封装 (n,d)做私钥
  • RSA 算法补充
    • 按照算法:公钥(n,e) 只能加密小于n的整数m
    • 解决办法1: 把长消息分段
    • 解决办法2: 先对称加密一次,缩短长度

https加密流程

大致流程

  1. "client hello"消息:客户端通过发送"client hello"消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本和加密方式,以供服务器进行选择,还有一个"client random"随机字符串。
  2. "server hello"消息:服务器发送"server hello"消息对客户端进行回应,该消息包含了数字证书,服务器选择的加密方式和"server random"随机字符串。
  3. 验证:客户端对服务器发来的证书进行验证,确保对方的合法身份
    • 域名,证书有效期,签名 等
    • 服务器端的公钥
  4. “premaster secret"字符串:客户端生成另一个随机字符串"premaster secret (预主密钥)”,用 公钥加密后发给服务器
  5. 使用私钥:服务器使用私钥解密"premaster secret"。
  6. 生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY。
  7. 客户端就绪:客户端发送经过共享密钥 KEY加密过的"finished"信号。
  8. 服务器就绪:服务器发送经过共享密钥 KEY加密过的"finished"信号。
  9. 达成安全通信:握手完成,双方使用对称加密进行安全通信。

证书验证

  1. 解密前的证书对象

    • 明文证书内容

      • 服务端的公钥
      • 证书的信息
      • 服务器的注册信息
    • ”数字签名“:明文证书内容,先做hash,再用CA机构的私钥做加密
  2. 客户端本地事先保存了权威CA证书机构的公钥
  3. 客户端用CA的公钥解密“数字签名”; 用明文里的hash算法,算hash
  4. 比较 解密后的hash vs 自己计算的hash
  5. 如果内容被修改,两份hash必然对不上

参考链接 https://img2018.cnblogs.com/blog/1169376/201910/1169376-20191009111543085-161187219.png

证书申请

  1. 本地生成公钥/私钥
  2. 提交申请信息: 域名,公钥,申请者信息
  3. CA 人工审核后,返回证书

证书链

  • 目的

    1. 提升颁证效率
    2. 隔离开根证书
  • 使用方法概述:
    • ”每一级证书都有签名值,根证书使用自己的根CA公钥验证自己的签名,也用来验证中间证书的签名值,中间证书的公钥用来验证下一级的服务器实体证书签名值,以此构成一条信任链“
    • https://img2020.cnblogs.com/blog/1110857/202104/1110857-20210427234304719-1149954198.png
  • 证书链验证过程
    1. 一次性获得整个证书链
    2. 用本地的CA公钥,解密“根证书”的签名;再对明文证书内容做hash, 对比解密值与hash值
    3. 用本地的CA公钥,解密“中间证书”的签名;再对明文证书内容做hash, 对比解密值与hash值
    4. 取出”中间证书“内容里的公钥,解密“服务器证书”的签名;再对明文证书内容做hash, 对比解密值与hash值
    5. 取出”服务器证书“内容里的公钥,即 服务器的公钥,流程结束

证书安全

  • 还有什么风险

    1. 私钥泄露
    2. 主动信任了不可靠的证书
    3. 重复签发
      • 黑客自己生成一份公私钥,用公钥注册一个签名,域名是google
      • 当用户请求google时,黑客拦截请求,返回自己申请的证书
      • 用户验证证书通过,以为目标是真的google
      • 用户与黑客建立SSL连接,发起若干请求;中间人再跟真实的google建立SSL
      • 就可以 窃取/篡改 通信内容
  • 案例
    1. 存在证书提供商被黑客攻破的历史记录,黑客拿到网站证书,就可以做截获/篡改双方通信内容
    2. 法国/美国情报局故意伪造证书窃取数据
  • 怎么安全起来
    • 证书透明度 计划

      • 生成证书时,同时生成一份唯一id;用区块链的方式全网广播
      • 全网都可以审计证书签发
      • google 基于此,提供了一个查询服务,供浏览器查询某证书是否伪造

SSL 远程登录

结论: 如果首次连接时有中间人,没法保证安全

  • 步骤

    1. 客户端发送登录请求
    2. 服务端返回公钥
    3. 客户端用公钥加密 登录的用户名/密码
    4. 服务端验证,返回私钥加密后的内容
    5. 客户端用公钥解密
  • 说明:
    一般在步骤2的时候,会出现如下内容。
The authenticity of host 'host (1.1.1.1.1)' can't be established.RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.Are you sure you want to continue connecting (yes/no)?
  • 这个内容里的中间一段就是远程机器的公钥,需要人工校验改公钥是否匹配
  • 因为这里是会被篡改的,

总结: 通信安全演进过程说明

1. 明文传输- 可以窃听,可以中间人修改
2. 对称加密- 通信过程安全- 但是有一个前提:第一次通信时”传递秘钥“过程没有被窃听
3. 非对称加密- 双方对外广播公钥;发送消息时,用对方的公钥加密;接受消息时,用自己的私钥解密- 不足:可以防窃听,不能防冒充;发消息时只需要接收方公钥,没有提供发送方自己身份证明的环节
4. 数字签名- Bob向Alice发送消息时,用自己的私钥对消息内容计算出一个”签名“,该签名只有用Bob的公钥才能解析出来- Alice收到消息后,先用Bob的公钥解析签名,能成功就是真的Bob- 遗留问题1. 签名的计算消耗较大
5. 内容摘要- 对消息内容,先计算出一个摘要(Hash等方式)- 对 较简介,且无实际含义的"摘要",计算”签名“- 接收方:1. 取出”签名“,公钥解密 计算出”摘要1“2. 去除明文的”正文“,hash计算出”摘要2“3. 比较两份摘要,相同则数据正常- 遗留问题1. 需要有一个明文的正文;可以防篡改,不能防窃听了 2. 三方可以广播自己的公钥,冒充真正的Bob的公钥
6. 数字证书- 通过公认的机构来登记注册 公钥 - 身份 的关系- 证书颁布机构(CA)将 Alice的注册信息 用CA的私钥进行签名,”注册信息“+“签名”整理成一个”证书“- 网络通信时,先传递证书,证书内容签名解析成功,且与发送方信息匹配,则表示对方是真实的目标- CA的公钥被广泛保存在各个浏览器、操作系统的基础文件里,不需要网路传递

网络传输是怎么保证安全的相关推荐

  1. ensp大型网络环境设计与实现_mongodb内核源码设计实现、性能优化、最佳运维系列-网络传输层模块源码实现三...

    1. 说明 在之前的<<Mongodb网络传输处理源码实现及性能调优-体验内核性能极致设计>>和<<mongodb内核源码设计实现.性能优化.最佳运维系列-tran ...

  2. Android 实现无网络传输文件(2)

    在我的上一篇文章:Android 实现无网络传输文件,我介绍了通过 Wifi Direct(Wifi 直连)实现 Android 设备之间进行文件传输的方法,可以在无移动网络的情况下实现点对点的文件传 ...

  3. java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输

    atitit.二进制数据无损转字符串网络传输 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 gbk会造成信息丢失 由于有些字符在gbk字符集中找不到对应的字符,所以默认使用编码63 ...

  4. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  5. 网络传输中的两个阶段、阻塞IO、非阻塞IO和多路复用

    今天学习了网络传输中的两个阶段.阻塞IO.非阻塞IO和多路复用 一.网络传输中的两个阶段 分别是 waitdata 和 copydata send就是copydata recv是waitdata和co ...

  6. UNIX网络编程——解决TCP网络传输“粘包”问题

           当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport ...

  7. 网络传输层之TCP、UDP详解

    1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态.因此有必要增强网络层提供服务的服务质量. 2.引入传输层的原因 面向连接的传输服务与面向 ...

  8. App安全之网络传输安全

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  9. UDP/TCP网络传输方式

    网络传输方式 1.面向无连接型: 不要求建立和断开连接,发送端可于任何时候自由发送数据. 反之, 接收端也永远不知道自己会在何时从那里接收到数据. 因此, 面向无连接的情况下, 接收端需要时常确认是否 ...

最新文章

  1. slub object 内存布局
  2. 基于深度学习的文本分类应用!
  3. 黄海广博士的机器学习个人笔记及深度学习笔记
  4. C库函数:scanf、fscanf、printf、fprintf、sprintf、 snprintf
  5. python读取中文txt文本-python读取中文txt文本的方法
  6. 做科研没人带,发不了文章怎么办?
  7. VTK:Points之FitImplicitFunction
  8. SAP移动解决方案之Cordova技术架构综述
  9. UISlider 滑块控件—IOS开发
  10. RN学习笔记01:概述、特点与环境搭建
  11. SQL Server 大数据群集 部署(二)工具篇
  12. 主机甲采用停等协议向主机乙_TCP/IP 协议——详解篇
  13. vmware 删除后安装不了,‍vmware workstation.msi failed
  14. nrf52832(nrf52810)之硬件I2C(TWI)驱动BMI160
  15. 电脑管家急救箱linux,腾讯电脑管家系统急救箱
  16. 常用计算机防治病毒软件有哪些,如何防治计算机病毒?常用的反病毒软件有哪些?...
  17. 《庄子·杂篇·列御寇第三十二》
  18. [从头读历史] 第295节 神之物语 结语:为什么会有希腊神话
  19. vue创建一个简易版高德地铁路线图
  20. 什么是 IT 基础架构管理

热门文章

  1. http://www.xueh188.top/index.php/archives/3/
  2. 微信小程序:父子组件传值
  3. 区块链安全—简单函数的危险漏洞(二)
  4. 营销圈也可以提供类似“不涂口红的你”的创意文案?
  5. python的GUI框架tkinter,实现程序员的流氓式表白逻辑
  6. python识别虚假新闻的分类器_检测假新闻:比较不同的分类方法的准确率
  7. 奥特曼系列超清珍藏壁纸,你确定不收藏?!
  8. termux python 打开摄像头_玩转科技-python远程调用并开启摄像头
  9. TASKCTL消息订阅参数设置说明
  10. Kotlin之匿名内部类