zoukankan      html  css  js  c++  java
  • 网站安全系列文章(一)加密和签名

    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/

  • 相关阅读:
    sql 数据库还原脚本 (kill链接+独占
    最长回文字符串
    UVa 455 Periodic Strings
    UVa 1225 Digit Counting
    UVa 340 Master-Mind Hints
    UVa 10976
    UVa 725
    UVa 11059
    POJ1887 最长下降子序列
    最大连续子序列算法(数组的连续子数组最大和(首尾不相连))
  • 原文地址:https://www.cnblogs.com/tangyanbo/p/4383871.html
Copyright © 2011-2022 走看看