概述:两个计算机在互联网上通信时,它们之间发送的信息如果不经过特殊的处理,即加密机制,很容易被其他人给获取到,如果是普通的信息,那倒是无所谓,但是如果涉及到个人的私密信息,那这样岂不是很糟糕,本篇来说一下这个安全和加密机制。


加密算法和协议:

对称加密:数据加密(保密性)(3DES,AES)

公钥加密:身份认证、密钥交换、数据加密(不常用,比对称加密要慢3个数量级)(RSA,DSA)

单项加密:数据完整性(MD5,SHA)

密钥交换:RSA、DH(迪菲-赫尔曼)、ECDH(椭圆曲线DH)、ECDHE(临时椭圆曲线DH)

****************************************************************************************************

对称加密:加密和解密使用同一个密钥
    DES:Data Encryption Standard,56bits
    3DES:
    AES:Advanced (128, 192, 256bits)
    Blowfish,Twofish
    IDEA,RC6,CAST5
特性:
    1、加密、解密使用同一个密钥,效率高
    2、将原始数据分割成固定大小的块,逐个进行加密
缺陷:
    1、密钥过多
    2、密钥分发
    3、数据来源无法确认

非对称加密算法:即公钥加密

公钥加密:密钥是成对出现
    公钥:公开给所有人;public key
    私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
    数字签名:主要在于让接收方确认发送方身份
    对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
    数据加密:适合加密较小数据
缺点:密钥长,加密解密效率低下
算法:
    RSA(加密,数字签名),DSA(数字签名),ELGamal

具体实现:

▲基于一对公钥/密钥对
    用密钥对中的一个加密,另一个解密

▲实现加密

接收者
    生成公钥/密钥对:P和S
    公开公钥P,保密密钥S
    发送者
    使用接收者的公钥来加密消息M
    将P(M)发送给接收者
    接收者
    使用密钥S来解密:M=S(P(M))

单项加密

将任意数据缩小成固定大小的“指纹”
    任意长度输入
    固定长度输出
    若修改数据,指纹也会改变(“不会产生冲突”)
    无法从指纹中重新生成数据(“单向”)
功能:数据完整性
常见算式
    md5: 128bits、sha1: 160bits、sha224
    sha256、sha384、sha512
常用工具
    md5sum | sha1sum [ --check ] file
    openssl、gpg
    rpm -V

密钥交换

密钥交换:IKE(Internet Key Exchange )
    公钥加密:
    DH (Deffie-Hellman):
DH:
1、A: a,p协商生成公开的整数a,大素数p
     B: a,p
2、A:生成隐私数据:x (x<p ),计算得出a^x%p,发送给B
    B:生成隐私数据:y,计算得出a^y%p,发送给A
3、A:计算得出(a^y%p)^x = a^xy%p,生成为密钥
    B:计算得出(a^x%p)^y = a^xy%p, 生成为密钥

此时,A和B便生成了一个相同的密钥,注意这个密钥交换协议算法只能用于密钥的交换,而不能用于消息的加密处理,当双方确定要用的密钥后,要使用其他的对称加密操作实际加密和解密数据

****************************************************************************************************

注意,以上所说的加密算法和协议虽然能够实现两个两个计算机之间的加密通信,可是保证不了其他计算机的干预消息。

例如:A和B是互联网上的两台主机,A拥有自己的私钥,B拥有自己的私钥,此时如若A要给B发送消息,但是第一次它并不知道谁是B,如果此时有另一台机器C告诉A说我就是B,然后把自己的公钥发送给A,A此时还以为和它通信的真的是B,然而却是A和C在通信。

那么问题来了,如何确定B的身份呢?如果此时有一个双方都信任的第三方机构,由它来确认B的身份,那么问题就可以解决了,随之而来的是谁来确定这个第三方机构的身份呢,如果是一个假的机构呢?所以还需要这个机构的上级来确定它,知道到了顶层。当然这个顶层是我们所有人在心底都默认知道和了解的。

说了这么多,这个所谓的第三方机构就叫做CA,当CA每确认一台机器的时候,就会给它颁发一个证书,具体如下:

CA和证书

PKI: Public Key Infrastructure
    签证机构:CA(Certificate Authority)
    注册机构:RA
    证书吊销列表:CRL
    证书存取库:

X.509:定义了证书的结构以及认证协议标准
    版本号
    序列号
    签名算法
    颁发者
    有效期限
    主体名称
    主体公钥
    CRL分发点
    扩展信息
    发行者签名

证书类型:
    证书授权机构的证书
    服务器
    用户证书

获取证书两种方法:
    使用证书授权机构
        生成签名请求(csr)
        将csr发送给CA
        从CA处接收签名
    自签名的证书
        自已签发自己的公钥

证书签发过程:如下图所示

1、A将自己的公钥发送给CA

2、CA在确定A的身份后,会将证书颁发给A,其中过程如下

1)CA会将应有内容整合到证书上,证书的内容结构如上。

2)然后将此内容使用单向加密算法生成特征码(用于验证证书完整性)

3)最后,CA会使用自己的私钥来对此特征吗进行加密,生成数字签名(用来验证是否为CA签署的证书),然后发给A

3)B的过程与A相同

当B验证A的身份时,就是通过证书来验证的,步骤如下

1)使用CA的公钥来解密数字签名,如果成功,则验证了CA身份

2)利用相同的单项加密算法来计算证书内容结构的特征码,与原来的特征码相比较,如果相同,则保证了证书的完整性

3)从证书内容中取出A的公钥


加密通信过程详解:

1)

第一阶段:ClientHello:客户端向服务器端发起加密通信的请求

向服务器发送自己支持的协议版本,比如tls1.2

客户端生成一个随机数,稍后用户生成”会话密钥“

自己支持的各种加密算法,比如AES,RSA;、

支持的压缩算法;

第二阶段:ServerHello(回应)

确认使用的加密通信协议版本,比如tls1.2;(如果版本不一样,则拒绝通信)

服务器端生成一个随机数,主要在稍后用户生成”会话密钥“

确认使用的加密方法

发送服务器证书

索要客户端证书(不过一般服务器端都不会验证客户端)

第三阶段:

验证服务器证书,确认无误后,取出其公钥;(验证发证机构、证书签名、证书完整性、证书持有者、证书有效期、吊销列表)

发送一下信息给服务器端

一个随机数:用于服务器公钥加密

编码变更通知:表示随后的信息都将用双方商定的加密方法和密钥发送

客户端握手结束通知

第四阶段:

收到客户端发来的第三个随机数-pre-master-kty后,计算生成本次会话用到的会话密钥

向客户端发送如下消息:

编码变更通知:与上相同

服务器端握手结束通知

此时双方已经彼此确认了对方的身份,并且建立一条安全的通道,接下来就可以传输信息了。此过程如下图所示

(1)A-->B

1)使用单向加密算法计算要传输的数据的特征码(并没有对原数据内容加密)

2)使用自己的私钥来加密这段特征码生成数字签名

3)使用对称加密算法加密上面的所有数据(包括原数据,特征码,数字签名),将生成的对称加密的密码附加在加密过的数据后面

4)使用B的公钥来加密这段对称加密的密码,并将以上所有数据发送给B

(2)B收到A发送的数据后

1)使用B的要来解密对称加密的密码(如果可以解密,则保证接收放是B)

2)利用解密过的对称加密密码来解密这段数据

3)解密后通过利用A的公钥来解密数字签名(如果可以,则保证了数据是从A发的

4)此时,呈现在B的有两样东西,一个是原数据,还有一个是特征码。且原数据是没有加密的。此时B需要使用相同的单项加密算法对此时的原数据计算特征码,与A发送过来的特征码相比较,如果相等,则保证了原数据的完整性。

至此。信息的加密与解密过程完成。


总结:

在以上所述的过程中,个人认为有几点需要强调:

1)单项加密并不加密原数据,只是为了计算原数据的特征码。用于数据的完整性校验

2)对称加密算法加密和解密都是用同一个密钥。用于加密数据

3)公钥加密加密的是特征码。用于生成数字签名

4)证书的颁发和验证过程和数据的传输过程是两个过程

转载于:https://blog.51cto.com/dashui/1856324

Linux下数据传输安全与加密相关推荐

  1. Linux下使用GPG(GnuPG)加密及解密文件

    文章目录 Linux下使用GPG(GnuPG)加密及解密文件 1. 简介 2.环境及版本 3.GPG公钥生成 4.查看公钥 5.查看私钥 6.导出公钥 7.导出私钥 8.加密文件 本机加密 其他电脑加 ...

  2. php 变量的md5加密,利用PHP脚本在Linux下用md5函数加密字符串的方法

    #touch a.php //创建a.php文件 #vi a.php //用vi 编辑a.php文件 将<?php echo md5(123456); ?>输入进去后保存 #php a.p ...

  3. linux base64 文件大小,linux下使用base64进行加密和解密

    1.加密 (1)base64  '你想要加密的字符串' 比如:base64 HelloWorld 注意:base64后需要回车,输入HelloWorld后也需要回车,最后按ctrl+D,就能出现加密的 ...

  4. Linux下实现文件加密解密

    Linux下利用异或加密解密算法实现文件加密解密 1.新建三个文件file1.file2.file2,分别用于存放原始数据.加密数据.解密数据.打开文件1写入原始数据.如图所示: 2.利用vi文本编辑 ...

  5. linux php curl扩展下载,linux下为php添加curl扩展的方法

    linux下为php添加curl扩展的方法 发布于 2014-12-19 18:36:10 | 106 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hyperte ...

  6. Linux下不同服务器间数据传输

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  7. linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  8. linux下不同服务器间数据传输(wget,scp)

    一.wget是Linux下最常用的http/ftp文件下载工具1.wget断点续传,只需要加上-c参数即可,例如:代码:wget-chttp://www.abc.com/abc.zip-Oabc.zi ...

  9. Linux下des对称性加密

    最近对接公安审计一些经历 对方的需求: 打成zip包 对zip包进行des-cbc对称性加密,使用约定好的 -K和-iv值比如 -K "abcd$#@!" -iv "ef ...

最新文章

  1. why quantity change in item can cause CUMULAT_H changed as well
  2. [转]Android开发,实现可多选的图片ListView,便于批量操作
  3. js中用script 嵌套script块
  4. mysql删除emp表的语句_MySQL删除数据表(DORP TABLE语句)
  5. 在C#中使用Google翻译API
  6. shell下如何删除文件的某一列
  7. 数据库系统设计大作业:图书馆管理系统
  8. 基于MFC的人事管理系统 VC++
  9. 毕业设计实战:单片机智能温控风扇设计 带智能调速人体感应 论文仿真 源码 原理图
  10. ubuntu中火狐浏览器安装flash插件
  11. 最简单易懂的ios p12证书 和描述文件的创建,IPA上传,最完整的ios上架苹果商店教程
  12. conda 速度慢 解决方案
  13. C++问答2 三大特性
  14. python打包flask 项目_使用pyinstaller将flask应用打包
  15. 程序员如何阅读英文资料
  16. 【IDEA】从Git丶Gitlab检出Maven项目到本地
  17. latex figure table htpb
  18. grasps元素_从玛祖卡舞曲肖邦钢琴音乐中民族元素的运用.pdf
  19. 蚁群算法(ACO)学习笔记
  20. 最新Sample Browser V5出来了

热门文章

  1. 全球只有4个人通关的游戏_只有两人协力才能通关这款2019谷歌最佳创意游戏
  2. appscan如何进行web端安全性测试_常用的软件测试工具有哪些?
  3. linux中ftp保持连接,linux – FTP’ing大文件时如何防止TCP连接超时?
  4. 安装包没有证书怎么强行安装_该安装包未包含任何证书
  5. linux-libre 电脑,[图]没有任何专有代码 GNU Linux-libre 5.1-gnu内核正式发布
  6. linux屏幕分辨率文件,Ubuntu 16.04 LTS设置屏幕分辨率显示Unknown display 解决
  7. java unsafe 详解_Java CAS操作与Unsafe类详解
  8. linux远程登录显示,SSH远程登录显示自定义警告信息
  9. 未定义_随笔—未定义
  10. webstorm plugins emmet