网站安全系列文章(一)加密和签名

1. 加密概述

加密应用场景

1) 密码加密,常用于登录密码和支付密码等,此类加密的特点是希望密码加密之后不能被解密,因此可以比较安全的保存密码而不会泄漏明文,因此适合用不可逆加密算法,且不需要密钥,目前这类加密算法唯一的破解方法是暴力破解,即用密码字典等手段

不可逆的加密算法有md5

2) 网络传输报文加密

网络传输如果用明文,容易被截取,之后泄漏用户敏感信息,因此对于交易类等安全要求较高的报文传输,要对其进行加密,且要选择可逆的加密算法,服务端需要解密,可以选择的加密算法有rsa,3des等

3des加密的缺陷

3des属于对称加密算法,即加密和解密都是用的同一密钥,因此,分发和传递密钥中会泄密密钥。

假想方案一:双方约定一个加密密钥,密钥可以通过线下密函分发,这样只要双方保证密钥不被泄漏,那么加密将是安全的

但是该方案仍然存在如下缺点:

1. 密钥如果长期不更换,容易泄漏,那么又要分发一次密钥,这是不安全的

2. 如果客户端为普通用户使用,那么就无法保证密钥的安全性,因此不适合用3des

这里指的是持久化保存密钥。

假想方案二:每次请求都产生一个随机的密钥,通过网络将密钥和传输到服务端,这样客户端就不需要保存密钥,然后网络传输密钥仍然是不安全的

Rsa加密的缺陷:

Rsa加密报文的速度很慢,适合用户少量数据加密

那么有没有更好的方案呢,当然有,那就是将rsa和3des结合起来加密

用3des加密报文,用rsa加密3des的密钥,这样在传输过程中,可以保证3des的密钥不被泄漏,从而保证报文的密文不被破解

加密方式举例:

请求报文:rsa公钥(3des加密密钥)|3des(报文明文)

响应报文:3des(报文明文)

具体方案流程:

1) 首先客户端在每次请求服务端的时候,随机产生一个3des密钥,且在客户端程序的内存中暂时保存该密钥

2) 然后用3des对报文明文进行加密得到密文m

3) 用rsa公钥对3des密钥进行加密得到密文n

4) 将m和n拼接起来发送给服务端

5) 服务端用rsa私钥将3des的密钥解密

6) 并用3des密钥解密报文

7) 响应时,用3des对响应报文进行加密

8) 客户端用保存起来的3des密钥对响应报文解密

9) 解密之后丢弃3des密钥

2. 签名概述

签名的意义:

数字签名可以保证信息的原始性、完整性,因此,数字签名可以解决否认、伪造、篡改及冒充等问题。具体要求:发送者事后不能否认发送的报文签名、接收者能够核实发送者发送的报文签名、接收者不能伪造发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者

具体方案:

方案一(md5加密算法+密钥进行签名):

首先在数据的发送方,将报文和密钥拼接起来,再进行md5加密,加密之后的报文就叫签名,然后签名和原报文拼接起来发送至服务端,服务端也有一个密钥,对签名进行验签,这样即使报文传输过程中被篡改,由于篡改者不知道密钥,也就没办法算出正确的签名,因此服务端验签就不过,而且这个签名是跟客户端绑定的,也就保证了报文来自合法的客户端

方案1的效果:

保证数据传输的完整性

保证数据来源于合法的客户端,即其他用户(除服务端外)无法伪造或者篡改

但是客户端可以抵赖,因为服务端可以模拟该签名

此方案典型的案例就是md5签名

方案二(mac签名)

采用一个密钥,将报文分段用des加密

和方案1差不多,由于该方案中,密钥与报文加密的算法更复杂,因此较md5更安全

方案三(rsa+md5)

用md5算法将报文加密得到一个串m,用rsa私钥对m加密得到签名s

接收者对报文用md5加密得到m1,用rsa公钥解密s得到m2,比较m1和m2

该方案达到了方案1的效果,且加密算法也是安全的,而且由于发送者的密钥是唯一的,即使是接收者,也不能伪造签名,因此发送者不能抵赖自己的签名

3. 加密算法分类

对称与非对称

从密钥的角度来看,加密算法分为对称加密和非对称加密

对称加密:

加密密码和解密密码是相同的

Des

3des

非对称加密:

加密密码和解密密码是不相同的

Rsa

可逆与不可逆

从可逆角度来看,可以分为不可逆和可逆算法

不可逆:md5,加完密之后不可解密

可逆加密:

Rsa,des,3des

加完密之后可解

4. md5加密

用途:常用于密码加密和签名

基本算法为求余

原理请参考文章:http://www.jiamisoft.com/blog/index.php/2271-md5jiamisuanfa-2.html

5. des

原理

DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

详情请参考:http://aub.iteye.com/blog/1131504

6. 3des

比des加密更安全的一种加密算法

请参考:http://aub.iteye.com/blog/1131514

7. rsa

加密:公钥加密,私钥解密,知道公钥,密文,明文无法推导私钥,只有私钥才能进行解密,只要保管好私钥,密文将不会泄密,加密安全度高

原理请参考文章:

RSA算法原理1http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html

RSA算法原理2

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

8. https

https也是基于非对称加密算法(如rsa)和对称加密算法(如3des)进行加密的

参考文章:http://www.guokr.com/post/114121/

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。