TCP/IP跨主机之间的通信数据封装发送的都是明文数据,现代通讯中会有安全问题。

三个安全问题

如:A发送消息给B的三个安全问题
机密性:明文传输如:ftp,http,smtp,telnet等
完整性:数据可能被篡改(举例:电商下单生产数量或者传输过程信号错乱)
身份验证:A和B从未见过(举例:钓鱼网站冒名顶替,保证对方即是其所声称的身份)

解决上述三个问题可以通过加密算法的混合使用,常见加密算法有如下

对称加密
DES:数据加密标准,早期使用的56bit密钥
3DES:Triple DES 对每个数据块应用三次DES加密
AES:高级加密标准128bit默认,还有AES192、AES256、AES512

单向加密
MD5
SHA1 输出长度为160
SHA192/SHA256/SHA384 输出长度

公钥加密核心功能是数据加密和签名
RSA:实现加密和签名,部分公开使用
DSA:只实现签名,公开使用
数字签名是什么?

三个问题的解决

机密性假如传输数据abc,为了不让互联网上的其他人获取,就要加密,那么如何加密呢?加密就是转换规则,把明文转换成密文,plaintext-->转换规则-->ciphertext。

如果其他人获得了转换规则(算法)怎么办?通常更换的是秘钥而不是算法,设计思想是靠秘钥保证机密性而非算法,换秘钥更简单

加密算法--对称加密:用于加密任意大小的数据块数据内容,加密方和解密方使用的是同一个密码,加密速度快。如:A要与BCDEF…通信,各方不同密钥,密钥管理复杂。缺点:通信对象多的时候,无法有效对密钥管理。

↓↓

完整性如何保证数据不被篡改?加密算法—单向加密:抽取数据的特征码。把特征码附加在原文之后一并发送。

单向加密特性:
输入一样,输出必然一样;
雪崩效应,输入的微小改变,将会引起结果的巨大改变;
无论原始数据是多少,结果大小都是相同的;
不可逆,无法根据特征码还原原来的数据

中间人攻击:修改数据和特征码重新发送。所以数据完整性的手段无法保证完整性本身,要借助其他机制——加密特征码。特征码能够使用对称加密,可是在两个人第一次通信时,由于互相都不知道对方的密钥,在网络上传输密钥时是明文传输的,密钥安全性不能得到保证。

如何实现双方协商密钥,但是却不让第三方得到密钥?——密钥交换
最早的Diffie-Hellman IKE(Internet Key Exchange)互联网密钥交换
①A、B各自选择两个数字p,g(大素数,生成数)
②A、B各自生成自己的随机数x,y
③A:g^x%p—>B    B:g^y%—>A   把计算结果发给对方
④A:(g^y%p)^x=g^yx%p(结果就是密钥) B:(g^x%p)^y=g^xy%p
通过这种方式,双方只知道自己的x,y,但是经过计算可以在未知对方x或y的情况下得到相同的一个数值(g^xy%p)

↓↓

密钥交换后可以加密特征码,可是还是没有解决问题,仍然无法验证对方身份

如何验证对方身份?催生第三种加密算法产生--公钥加密算法

公钥加密(非对称加密)加密和解密使用的是不同的密码,有公钥和私钥,密钥是成对出现的,公钥是从私钥中提前出来的,私钥是很长的,私钥加密速度比较慢。公钥是公开的,公钥加密需要用私钥解密,用私钥加密得用公钥解密。

用对方公钥加密数据,可以保证机密性。发送方用自己私钥加密,可以实现身份验证

公钥加密算法速度太慢,不适用于加密数据,慢于对称加密三个数量级,用于身份验证

结合两种加密(保证完整性+身份验证)

使用私钥加密特征码,中间人能解密可以修改数据,但是接收方可以发觉。这一切的保证就是公钥,那么从哪里获得公钥?

↓↓

如何保证不是中间人的公钥,只能借助于第三方机构。

这里最重要的一步就是公钥的获取,如何得到对方的公钥,又如何得知一定是对方的公钥?

此时就需要依赖于CA,每个人所发的公钥对方无法验证其真假,就像你说自己是xx,那怎么证明你就是xx呢?生活中我们都是通过身份证来验证的,但是身份证不能你自己做一张印上一个名字,就说自己叫xx,需要提供一张由公安部门所颁发的权威的身份证才能得到认可,因为大家是信任公安部门的权威性的。这里把公安部门称为第三方机构也即是这里的CA。AA和BB通信之前要向CA去注册认证自己的身份。

AA向CA申请给自己发一个证(里面包含公钥、名字、有效期等CA会使用单向加密计算这些数据特征码,CA再用自己的私钥加密这段特征码并附加在证书的后面,即数字签名,保证了证书的信息没有被更改),AA就把自己的证给BB,那此时BB如何去验证AA发来的证书不是伪证书?则BB需要信任CA,才能信任CA所颁发的证书,BB使用CA的公钥解密这段特征码,再用相同的单向加密计算这些数据特征码,比较两个特征码是否一致。

获取到CA的证书就包含了CA的公钥,此时CA的证书(公钥)从何而来呢?CA是自己给自己给发证书的。用自身的私钥给包含公钥的证书签名。如何判断获得的CA的证书就是发证机关的?无法保证。你可以到颁发机构本地复制证书,还有一些电子商务网站,你信任这些网站,你访问时就安装它的证书。且需要提供有公信力CA是需要向根CA注册申请,都是需要收费的。

虽然私钥把特征码加密附到源数据一起发送可以解决完整性和身份验证问题,但是数据仍然未加密,此时通过秘钥交换形成的对称秘钥把有附加信息的源数据整体再次加密就能解决机密性问题。

秘钥交换除了上述的DH算法,也可以通过对称秘钥来实现
以随机生成一个数当加密密钥,用接收方的公钥加密后加在数据后面发送出去,接收方用私钥解密获得对称密钥,用对称密钥解密数据,最后用私钥解密特征码。

证书

证书颁发机构和彼此间的信任关系述组成了PKI(public key infrastructure公钥基础设施),基本组成如下:

签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:

证书颁发机构(根证书颁发机构)派发出子机构 ,称为RA,用于接受证书申请,最后发给CA签名。

还有一种特殊情况,如果说证书(私钥)丢失了,该如何处理呢?私钥丢了,必须让获得公钥的主机知道公钥被废了,因此CA机构需要维持一张列表(证书吊销列表),一旦私钥丢弃,则向CA申请自己的证书作废。CA机构就把丢失私钥的主机放到证书吊销列表中。

crl:证书吊销列表,Certificate Revocation List;保存此前发出的仍未过期但被撤销的证书。则通信时,还需要增加一步就是通信的对方收到数据后,需要到CA机构查看发送方是否在证书吊销列表中。(注意互联网上绝大部分通信者都没有这样做,因此互联网上通信还是存在安全隐患的)

一个证书中应该包含什么?
不同标准下的证书格式是不同的,主流的标准格式如x509(国际电信联盟ITU-T 制定),包含

主体名称:证书的合法拥有者
附加在最后是通过CA私钥签名的证书特征码

获取证书就是为了获得对方公钥,如何验证证书
1、利用本地预存的公钥信息,解密颁发机构的签名
2、解密获得证书的特征码,验证此证书内容没有被篡改
3、联系证书颁发机构确认证书有效可用

有两种PKI:TLS/SSL使用的是x509的证书;OpenGPG是另一种证书管理机制(或者叫PKI的实现架构)

另外为了验证证书不是由伪装的CA颁发的,必须通过可靠的途径来获取可信任CA的公钥(如厂商之间互相信任内置公钥)

TCP/IP数据加密传输及CA简述的更多相关文章

  1. 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

    引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...

  2. TCP/IP 笔记 - 传输控制协议

    与UDP不同,TCP提供面向连接的.可靠的.基于字节流的传输层协议,且提供差错纠正. TCP传输的概念 对与分组丢失和比特差错的处理方法,最直接的方法是重发分组,直到它被正确接收. 这需要一种方法来判 ...

  3. 利用ZYNQ SOC快速打开算法验证通路(6)——LWIP实现千兆TCP/IP网络传输

    一.前言 之前ZYNQ与PC之间的网络连接依赖于外接硬件协议栈芯片,虽然C驱动非常简单,但网络带宽受限.现采用LWIP+PS端MAC控制器+PHY芯片的通用架构.关于LWIP库,已经有很多现成的资料和 ...

  4. Socket编程实践(1) --TCP/IP简述

    ISO的OSI OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为: OSI七层参考模型 物理层(Phys ...

  5. TCP/IP协议网络编程以及UDP和TCP之传输协议

    1.什么是TCP/IP协议? 网络编程协议有很多,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal 传输控制协议/英特网 ...

  6. QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)

    引言 TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯.控制器可以设置 ...

  7. TCP/IP,Http,Socket,XMPP的区别

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...

  8. http与https与socket tcp/IP与UDP 协议等

    网络由下往上分为:   物理层--                       数据链路层-- 网络层--                       IP协议 传输层--               ...

  9. TCP/IP 网路基础

    一.引子         TCP/IP是"Transmission Control Protocol/Internet Protocol"的简写,翻译成中文为传输控制协议/互联网网 ...

随机推荐

  1. WebService连接winfrom简单实例

    C# 创建.部署和调用WebService的简单示例 webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 具体详细用法可去查询资料.下面开始创建一个简单的webservic ...

  2. Mac 端配置 Lua 环境

    一.设计目的 Lua 是一种轻量级的脚本语言,其目的是为了嵌入到程序中,从而为程序提供灵活的扩展和定制功能. 二.特性 轻量级:编译后仅仅 100 余K,可以很方便的嵌入到程序中. 可扩展:Lua 提 ...

  3. 解决Windows下mysql无法启动1067错误

    解决过程 查看服务发现mysql未启动   用cmd命令行启动提示启动失败 错误代码1067 打开时间查看器发现mysql错误记录信息为Fatal error: Can't open and lock ...

  4. python request 请求https verify=False时warning

    import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.pac ...

  5. 手机APP测试之monkey

    Monkey测试是一种为了测试软件稳定性.健壮性的快速有效的方法,Monkey程序由Android系统自带,使用Java语言写成.本此由于公司APP产品所需,用monkey进行稳定性测试,下面将本次使 ...

  6. Oracle 正则

    https://www.cnblogs.com/qmfsun/p/4467904.html 匹配汉字可以用Oracle 内置函数 unistr('\4e00') -unistr('\9fa5') 来定 ...

  7. python 图片识别灰度

    # -*- coding: cp936 -*- from skimage import io,transform,color import numpy as np def convert_gray(f ...

  8. Chen qiaoqiao Studio

    Welcome here! If you need any help, please contact us. Contact info Email: lovey_kids@163.com

  9. 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide

    TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...

  10. 输入一段字符串,统计其中的数字,字母,空格,其他字符的方法 ----python---

    1.以简单的循环分支实现字符统计 str1 = input("输入字符串:") num=0;word=0;space=0;other=0; for i in str1: if i. ...