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

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/

时间: 2024-08-01 11:37:54

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

优化网站设计系列文章总结和导读

摘自:http://www.cnblogs.com/chenxizhang/archive/2013/05/20/3088196.html 概述 其实想写这方面的文章由来已久,这个系列文章的想法是参照雅虎团队提供的35条性能优化的最佳实践(其实最早的时候是14条),再结合我自己多年的实际工作经验,结合具体的开发平台(ASP.NET),为读者提供既有理论知识.又有实践指导的参考资料,对于优化而言,本身是一个长期细致的工作(没有所谓的银弹),并且重在权衡利弊,选择最适合自己项目情况的解决方案.而要达

特别好的大型网站架构系列文章,留下来慢慢看

http://www.cnblogs.com/itfly8/p/5043435.html

1、HTML学习 - IT软件人员学习系列文章

本文做为<IT软件人员学习系列文章>的第一篇,将从最基本的开始进行描述,了解的人完全可以跳过本文(后面会介绍一些工具). 今天讲讲Web开发中最基础的内容:HTML(超文本标记语言).HTML的内容是文本,就象我们在文本文档中记录内容一样. 一.最基本例子. 下面是一个最基本的HTML页面文本内容(代码一): <html> <head> <title>这个HTML页面</title> </head> <body> 这是HT

转:?Android IOS WebRTC 音视频开发总结 (系列文章集合)

随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). callstats是一家做实时通讯性能测阅读全文 posted @ 2016-07-22 08:24

大型网站架构系列:电商网站架构案例(3)

本文章是电商网站架构案例的第三篇,主要介绍数据库集群,读写分离,分库分表,服务化,消息队列的使用,以及本电商案例的架构总结. 6.5数据库集群(读写分离,分库分表) 大型网站需要存储海量的数据,为达到海量数据存储,高可用,高性能一般采用冗余的方式进行系统设计.一般有两种方式读写分离和分库分表. 读写分离:一般解决读比例远大于写比例的场景,可采用一主一备,一主多备或多主多备方式. 本案例在业务拆分的基础上,结合分库分表和读写分离.如下图: (1)       业务拆分后:每个子系统需要单独的库:

大型网站架构系列:消息队列(二)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka).[第二篇的内容大部分为网络资源的整理和汇总,供大家学习总结使用,最后有文章来源] 本次分享大纲 消息队列概述(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息队列应用场景(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息中间件示例(见第一篇:大型网站架构系列:分布式消息队列(一)) JMS消息服务 常用消息队列 参考(推荐)资料 本

大型网站架构系列:负载均衡详解(4)

本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法.具体参考文章,详见最后的链接. 三.LVS负载均衡 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,用来实现Linux平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器. 基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的 服务器,从而将一组

【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人品牌. 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在.经典”的写ORACLE PL/SQL编程的文章-! 觉得对你有帮助,请留言与猛点推荐,谢谢. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) 本篇主要内容如下:第一章 PL/S

产品设计步骤 - 产品管理系列文章

笔者做产品经理职位还不久,但是也积累了一些经验,本文就讲讲产品经理对产品的设计步骤,与大家共同交流学习,共同提高. 产品经理现在要求的更多的是需求分析.原型设计和后期的运营三方面重点内容.其中,需求分析这块如果团队人员比较全的话就要求产品经理对需求这块进行把控,项目经理对需求进行整理总结,系统分析师对需求进行分析:原型设计这块是产品经理的一大工作部分,就是在经过了需求分析之后,对产品的界面和用户体验等进行设计,形成基本的操作模式,同时也能够让团队或客户对产品本身的特色做了解和及时的反馈,对产品的