马哥学习----李洋个人笔记----安全和加密

对称加密算法
 对称加密:加密和解密使用同一个密钥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 ] file
openssl、gpg
rpm -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年发表,参考:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

应用程序: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)—检查文件的哈希值

猜你喜欢

转载自blog.51cto.com/13477118/2139352
今日推荐