博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
马哥学习----李洋个人笔记----安全和加密
阅读量:5856 次
发布时间:2019-06-19

本文共 2954 字,大约阅读时间需要 9 分钟。

对称加密算法

 对称加密:加密和解密使用同一个密钥DES:(Data Encryption Standard),des,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))

非对称加密:实现数字签名:

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

实际生产环境中,因为非对称加密需要的时间过长,我们使用组合方式来加密解密数据:

1 使用对称秘钥(key)来加密数据(date),即key(date)
2 但是这样做,要保证对方能接收到这个秘钥才可以,所以我们再用对方的公钥(pb)来加密这个秘钥,附加在这个数据后面,即key(date)+pb(key)
3 接下来为了确定数据传送人,我们在数据后面,补上一个发送者用私钥做的签名,即sa(date)
4 整个发送包从单一的date,变为了key(date+sa(date))+pb(key)

那么解密过程为,接收端使用自己的私钥来解开pb+(key)拿到对称秘钥key,再使用对称秘钥key来解开发送端的加密数据:key(date)

然后用发送端的公钥解开sa(date),将两份date互相对比,若无差异,就可以认为数据是由发送端发送过来的。

缺点:需要传送2份数据,比较费事。

单向散列(哈希算法)
 将任意数据缩小成固定大小的“指纹”(一大堆随机字符),其特征为:
1 任意长度输入,固定长度输出
2 若修改数据,指纹也会改变(哪怕是一丁点的改变,也会导致生成的指纹差生巨大的差异。)
3 无法从指纹中重新生成数据(“单向”),即不能从随机生成的字符,来逆向还原加密文件的内容。
功能:数据完整性
 常见算式
md5: 128bits、sha1: 160bits、sha224、sha256、sha384、sha512

md5生成的是128位二进制的哈希运算。它对一个数据做哈希运算,得出的哈希数据叫做摘要,只要数据一样,那么哈希数据也绝对一样。

通常用这个方式,来确认发送者的身份。举例:我们从一个centos系统网站上下载一个centos系统,从互联网给出的哈希数据与,我们下载后用哈希计算后的数据做对比,如果一样,则系统并没有发生变化。

常用工具md5sum | sha1sum [ --check ] fileopenssl、gpgrpm -V+指定程序

有了哈希运算,非对称的数字签名也大为改善:公式

key(date+sa(date))+pb(key)可以变为
key(date+sa(haxi(date)))+pb(key)了。
那么解密过程为,接收端使用自己的私钥来解开pb+(key)拿到对称秘钥key,再使用对称秘钥key来解开发送端的加密数据:key(date)
然后用发送端的公钥解开,私钥加密的哈希数据sa(haxi(date)),使用哈希来计算加密的数据key(date),将生成的哈希数据与解密得到的哈希数据haxi(date)做对比,若无差异,就可以认为数据是由发送端发送过来的。
由校对2分数据改为了校对2个哈希值,在安全性能不变的情况下,效率大幅提升。

密钥交换:IKE( Internet Key Exchange )

第一种:公钥加密(上边例子已讲)

第二种:DH (Deffie-Hellman):生成会话密钥.DH举例:

1 A: g,p 协商生成公开的整数g, 大素数p(只能被自己或1整除的数,叫做质数,质数也就是素数,比如1,3,7,13,17等等。)

假设生成的整数g为5,大素数p为23.

2 B: g,p同样生成整数g和大素数p

因为是协商,故A和B的值都一样,即g为5,大素数p为23.

3 A:生成隐私数据:a (a<p ),计算得出g^a%p,发送给B

隐私数据a的值是小于p的,并且进行计算,用g的a次平方,去取余p,设a的值为4,则计算结果为: 5^4%23,得出结果为:4,将这个数字发给B

4 B:生成隐私数据:b,计算得出g^b%p,发送给A

隐私数据b的值是小于p的,并且进行计算,用g的a次平方,去取余p,设b的值为3,则计算结果为: 5^3%23,得出结果为:10, 将这个数字发给A

5 A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥

[(5^3%23)^4]%23=10^4%23=18,5^12%23=18 将18作为对称秘钥

6 B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥

[(5^4%23)^3]%23=4^3%23=18,5^12%23=18 将18作为对称秘钥
18就作为A和B双方的对称秘钥来使用.
由惠特菲尔德•迪菲(Bailey Whitfield Diffie)和马丁•赫尔曼(Martin Edward Hellman)在1976年发表,参考:

应用程序:RPM

 文件完整性的两种实施方式
 第一种:被安装的文件,分为
MD5单向散列
哈希运算还可以将一些重要文件,事先计算出来哈希值。保存在一个文件内,然后用命令来检查文件内的哈希值是否一样,通过这个办法来确定重要文件是否被改变。示例:

以及rpm --verify package_name(or -V)

rpm包会在安装程序时,将生成的数据库文件的初始状态做哈希运算保存起来,使用-V就是检查指定程序是否被更改。被更改会提示,如下图:

 第二种:发行的软件包文件

GPG公钥签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*--导入公钥
rpm --checksig pakage_file_name (or -K)—检查文件的哈希值

转载于:https://blog.51cto.com/13477118/2139352

你可能感兴趣的文章
Apache与Tomcat整合(转)
查看>>
程序员的价值观——经验是无价之宝(转)
查看>>
如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件
查看>>
【单片机】时钟及温度的显示
查看>>
如何使用eclipse进行嵌入式Linux的开发
查看>>
Flink流处理之窗口算子分析
查看>>
Working with Big Data on Alibaba Cloud
查看>>
linux之iptable案例
查看>>
C#制表符过滤处理方法
查看>>
注解的原理
查看>>
计划在CSDN学院推出系列视频课程《源码分析教程5部曲》
查看>>
live555学习之RTSP连接建立以及请求消息处理过程
查看>>
李礼辉:区分数字货币与数字代币,数字货币代表货币的未来
查看>>
马云谈NASA:投资让人更有创造力的技术
查看>>
二维码扫描&amp;集合排序
查看>>
win8.1中输入中文显示问号的解决办法
查看>>
自己常用的字符实体
查看>>
我在Mesos上运行Docker容器的经验
查看>>
5分钟用Jitpack发布开源库
查看>>
ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略
查看>>