常用加密算法及应用

前言
加密算法分对称加密和非对称算法,其中对称加密算法的加密与解密密钥相同,非对称加密算法的加密密钥与解密密钥不同,此外,还有一类不需要密钥的散列算法。
常见的对称加密算法主要有DES、3DES、AES等,常见的非对称算法主要有RSA、DSA等,散列算法主要有SHA-1、MD5等。
对称算法又可分为两类。一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算(即运算之前将明文分为若干组,然后分别对每一组进行运算,这些位组称为分组),相应的算法称为分组算法或分组密码。

保证安全三方面入手:
认证用户和服务器,确保数据发送到正确的客户机和服务器
加密数据以防止数据中途被窃取
维护数据的完整性,确保数据在传输过程中不被改变。

1 加密算法
1.1 DES
DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为2的56次方。

1.2 3DES
是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;

1.3 AES
AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的区块加密标准,AES标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

1.4 RSA
是基于大整数因子分解问题(IFP)
RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA加密算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

1.5 DSA
DSA是基于整数有限域离散对数难题的,DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。这一点,RSA算法做不到。
相比于RSA,DSA 只用于签名,而 RSA 可用于签名和加密。

1.6 ECC
基于椭圆曲线上离散对数计算问题(ECDLP)
1985 年 N.Koblitz 和 Miller 提出将椭圆曲线用于密码算法,全称:Elliptic curve cryptography,缩写为 ECC,根据是有限域上的椭圆曲线上的点群中的离散对数问题 ECDLP。ECDLP 是比因子分解问题更难的问题,它是指数级的难度。
随着安全等级的增加,当前加密法的密钥长度也会成指数增加,而 ECC 密钥长度 却只是成线性增加。例如,128 位安全加密需要 3,072 位 RSA 密钥,却只需要一 个 256 位 ECC 密钥。增加到 256 位安全加密需要一个 15,360 位 RSA 密钥,却只需要一个 512 位 ECC 密钥。ECC 具有如此卓越的按位比率加密的性能,预计其特点将成为安全系统关注的重点

1.7 Elgamal
ElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。

1.8 HMAC
MAC(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。
HMAC算法首先它是基于信息摘要算法的。目前主要集合了MD和SHA两大系列消息摘要算法。
HMAC算法除了需要信息摘要算法外,还需要一个密钥。HMAC的密钥可以是任何长度,如果密钥的长度超过了摘要算法信息分组的长度,则首先使用摘要算法计算密钥的摘要作为新的密钥。一般不建议使用太短的密钥,因为密钥的长度与安全强度是相关的。通常选取密钥长度不小于所选用摘要算法输出的信息摘要的长度。

1.9 MD5
MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
MD5被广泛用于各种软件的密码认证和钥匙识别上。MD5用的是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5的典型应用是对一段Message产生fingerprin指纹,以防止被“篡改”。如果再有—个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于操作系统的登陆认证上,如UNIX、各类BSD系统登录密码、数字签名等诸多方。

1.10 SHA1
SHA1是和MD5一样流行的消息摘要算法。SHA加密算法模仿MD4加密算法。
SHA1主要适用于数字签名标准里面定义的数字签名算法。对于长度小于2“64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。SHA1不可以从消息摘要中复原信息,而且两个不同的消息不会产生同样的消息摘要。这样,SHA1就可以验证数据的完整性,所以说SHA1是为了保证文件完整性的技术。
SHA1是一种比MD5的安全性强的算法,理论上,凡是采取“消息摘要”方式的数字验证算法都是有“碰撞”的——也就是两个不同的东西算出的消息摘要相同,互通作弊图就是如此。但是安全性高的算法要找到指定数据的“碰撞”很困难,而利用公式来计算“碰撞”就更困难一目前为止通用安全算法中仅有MD5被破解。

2 优缺点
2.1对称加密算法

名称 密钥长度 运算速度 安全性 资源消耗
DES 56位 较快
3DES 112位或168位
AES 128、192、256位

2.2非对称加密算法

名称 成熟度 安全性(取决于密钥长度) 运算速度 资源消耗
RSA
ECC 低(计算量小,存储空间占用小,带宽要求低)
DSA 只能用于数字签名

2.3对称与非对称算法

名称 密钥管理 安全性 速度
对称算法 比较难,不适合互联网,一般用于内部系统 快好几个数量级(软件加解密速度至少快100倍,每秒可以加解密数M比特数据),适合大数据量的加解密处理
非对称算法 密钥容易管理 慢,适合小数据量加解密或数据签名

2.4散列算法

名称 安全性 速度
SHA-1
MD5

3 数据加密
保证传输的数据安全,即使被截获报文,在没有密匙的情况下也无法得知报文真实内容。
一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。

4 数字摘要与数字签名
4.1数字摘要
4.1.1定义
数字摘要技术用于对所要传输的数据进行运算生成信息摘要,它并不是一种加密机制,但却能产生信息的数字"指纹",它的目的是为了确保数据没有被修改或变化,保证信息的完整性不被破坏

4.1.2特点
1.、信息摘要算法实际上是一个单向散列函数。(单向散列函数就是不可逆的过程,比如A根据某种算法得到结果B,但是结果B不能根据某种算法得到结果A)

2、数据块经过单向散列函数得到一个固定长度的散列值,攻击者不可能通过散列值二编造数据块,使得编造的数据块的散列值和原来数据块的散列值相同。

3、常用的信息摘要算法有:MD5,SHA等。

4.2数字签名
4.2.1定义
数字签名用来保证信息传输过程中完整性、提供信息发送者的身份认证和不可抵赖性。使用公开密钥算法是实现数字签名的主要技术。

数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。

数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围

使用公开密钥算法,当你用自己的私钥加密了一个信息,并将其发送给一个朋友时,如果你的朋友能够使用你的公钥来解密出信息,他就能确定信息必定是从你那里发来的,而不是一些冒名顶替的。这实际上就是数字签名的原理。
由于公开密钥算法的运算速度比较慢,因此可使用HASH函数对要签名的信息进行摘要处理,减小使用公开密钥算法的运算量。因此,数字签名一般是结合了数字摘要技术和公开密钥算法共同使用
从数字签名的解释中我们大致可以看出数字签名的作用了,比如,现在A给B传送一份数据,A委托B将这份数据整理出来然后再发给A,并且A会给B一定的报酬,但是当B将数据整理完成发给A后,A不愿意给B报酬,于是A否认了此事。这时候,运用数字签名技术就会解决这个问题。以为这份数据经过A的数字签名之后,也就是经过A的私钥加密之后,发送给B,这样就能证明A给B发送过原始的数据,B将整理完的数据数字签名之后发给A,这样就能证明B将原始数据整理了一遍。

数字签名与信息摘要在数据传送中防止数据被篡改的应用。
常用加密算法及应用_第1张图片
上面的图片是A给B传送数据的时候,同时用了信息摘要技术和数字签名技术,B接受到数据之后,用A的公钥将传送过来的已加密的信息摘要解密,然后与原始数据的信息摘要进行核对,如果一样,则证明原始数据在传输过程中没有被篡改。
以上的通信模型很好的解决了数据完整性、不可否认性,但这个模型的依赖的关键点是双方公钥。
这个模型中双方公钥来源无法验证,而且在通讯前,如何获得每个人的可信任的公钥也成了整个系统的关键。
因此,需要一套系统,能够解决以上存在的种种问题:身份认证、数据完整性、密钥交换、操作的不可否认性,它就是PKI。

4.3实现数字签名
签名信息
1. 对信息M进行HASH函数处理,生成摘要H
2. 用你的(发送者的)私钥加密H来获取数字签名S
3. 发送 {M, S}

验证签名信息
1. 接受{M, S} 并区分开它们
2. 对接收到的信息 M进行HASH函数处理,生成摘要H*
3. 取得发送者的公钥
4. 用公钥解密S,来获取H
5. 比较H和H*,如果H和H*是一样的,即说明信息在发送过程中没有被篡改,反之即反
由于对信息进行数字签名后,明文信息也通过网络进行传递,因此,在做完数字签名后,还要对整个信息(包括明文信息M和数字签名的密文信息S)进行加密,以保证信息的保密性。

5 数据加密和数字签名的区别
数据加密:
用公钥加密,只能用自己的私钥解密,因为私钥只有你自己有,所以别人不可能能够解密,看到你的内容,保证了数据的保密性。

数字签名:
用私钥加密,只能用公钥解密,任何人都可以用公钥解密。因为私钥只有你自己有,所以保证了该数据肯定是从你这发送出去的,不可能是别人发的。

从以上解释可以看出,数据签名和数据加密的过程都是使用公开的密钥系统,但实现的过程正好相反,

数据加密使用的是接受方的密钥对,任何知道接受方公钥的都可以向接受方发送消息,但是只有拥有私钥的才能解密出来;

数据签名使用的是发送方的密钥对,任何接受方都可以用公钥解密,验证数据的正确性。

总结:
数据加密保证了数据接受方的数据安全性。
数据签名保证了数据发送方的数据安全性。

6 数字证书–值得信赖的公钥
只从”准确认证发送方身份“和”确保数据完整性“两个安全方面来看,数字签名似乎已经完全做到了,还有漏洞存在的可能么?有,漏洞不在数字签名技术本身,而在它所依赖的密钥,只有密钥是真实可靠的前提下,使用数字签名才是安全有效的。考虑这种可能的情况:在上述发送方向接收方传送报文的例子中,如果发送方所持有的公钥来路有问题或是被替换了,那么,持有对应私钥的冒充接受方就有可能接收到发送方发送的报文。这里的问题就是:对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机那里发布的,而且没有被篡改过呢?亦或者请求的目标主机本本身就从事窃取用户信息的不正当行为呢?这时候,我们需要有一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题的发生。这种机构被称为证书权威机构(Certificate Authority, CA),它们所发放的包含主机机构名称、公钥在内的文件就是人们所说的“数字证书”。

数字证书的颁发过程一般为:用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发给用户一个数字证书,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度。可以从证书发行机构获得您自己的数字证书。

7 SSL
当所有上面提及的技术介绍完之后,我们需要把它们统一起来应用于实际的网络安全传输了,因此,人们制定了一套协议,来定义有关的方方面面,这个协议就是SSL

SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL上传送的数据是使用对称密钥加密的!这并不奇怪,因为非对称加密的速度缓慢,耗费资源。其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和关键的对称加密密钥,由于这个过程本身是安全可靠的,也即对称加密密钥是不可能被窃取盗用的,因此,保证了在传输过程中对数据进行对称加密也是安全可靠的,因为除了客户端和主机之外,不可能有第三方窃取并解密出对称加密密钥!

SSL协议主要确保了以下安全问题
  1)认证用户和服务器,确保数据发送到正确的客户机和服务器
  2)加密数据以防止数据中途被窃取
  3)维护数据的完整性,确保数据在传输过程中不被改变。
  
8 HTTPS
HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证(确认客户端连接的目标主机是否是真实正确的主机)的网络协议。https所能实现的安全保证,正是SSL所能解决的安全问题

https的主要缺点就是性能问题。造成https性能低于http的原因有两个:
对数据进行加解密决定了它比http慢。
另外一个重要原因的是https禁用了缓存。

相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。因此对于一个网站来说,只有那对那些安全要求极高的的数据才会选择使用https进行传输。

参考:
https://blog.csdn.net/hugengyong/article/details/77145849
http://www.ehcoo.com/cryptology.html
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

你可能感兴趣的:(数据结构与算法,加密算法,数据安全传输)