本文共 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、sha512md5生成的是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,将这个数字发给B4 B:生成隐私数据:b,计算得出g^b%p,发送给A
隐私数据b的值是小于p的,并且进行计算,用g的a次平方,去取余p,设b的值为3,则计算结果为: 5^3%23,得出结果为:10, 将这个数字发给A5 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