基于md5的网页登陆安全认证

上传人:xiao****1972 文档编号:84271971 上传时间:2019-03-03 格式:DOC 页数:8 大小:57.58KB
返回 下载 相关 举报
基于md5的网页登陆安全认证_第1页
第1页 / 共8页
基于md5的网页登陆安全认证_第2页
第2页 / 共8页
基于md5的网页登陆安全认证_第3页
第3页 / 共8页
基于md5的网页登陆安全认证_第4页
第4页 / 共8页
基于md5的网页登陆安全认证_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《基于md5的网页登陆安全认证》由会员分享,可在线阅读,更多相关《基于md5的网页登陆安全认证(8页珍藏版)》请在金锄头文库上搜索。

1、版 本:V1.0上一版本:V1.0修订时间:2013.05.29文件编号:基于MD5的网页登陆安全认证目 录1. 概述12. 基于MD5的网页登陆安全认证详细设计12.1. 网页登陆安全认证系统结构12.2. 网页登陆安全认证相关文件12.3. 脚本详细设计22.4. 日志文件(log文件)格式33. 登录页最小化范例3基于MD5的网页登陆安全认证1. 概述由于智能家居系统可以通过Web进行访问与控制,就需要有安全的登录认证机制,保证用户信息的安全。本功能使用MD5验证机制,使用户在登录过程中不直接传输用户名、密码,登陆时只向WEB服务器提交由用户名、密码、服务器发来的随机字符串作为原文进行M

2、D5加密后的密文,服务器端做同样的计算,并比较密文,如果两者密文相同,则表示用户名、密码正确。2. 关于网页安全登录认证的分析MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方。如在UNIX系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。MD5将任意长度的

3、“字节串”映射为一个128bit的大整数,并且是通过该128bit反推原始字符串是困难的,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。所以,要遇到了md5密码的问题,比较好的办法是:你可以用这个系统中的md5()函数重新设一个密码,如admin,把生成的一串密码的Hash值覆盖原来的Hash值就行了。正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为跑字典的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5

4、程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2).+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。对于Web应用程序,安全登录是很重要的。但是目前大多数Web系统在发送登录密码时是发送的明文,这样很容

5、易被入侵者监听到密码。当然,通过SSL来实现安全连接是个不错的方法,但是很多情况下我们没办法将服务器设置为带有SSL的Web服务器。因此如果在登录系统中加入安全登录机制,则可以在没有SSL的Web服务器上实现安全登录。要实现安全登录,可以采用下面三种方法,一种基于非对称加密算法,一种基于对称加密算法,最后一种基于散列算法。下面我们来分别讨论这三种方法。非对称加密算法中,目前最常用的是RSA算法和ECC(椭圆曲线加密)算法。要采用非对称加密算法实现安全登录的话,首先需要在客户端向服务器端请求登录页面时,服务器生成公钥和私钥,然后将公钥随登录页面一起传递给客户端浏览器,当用户输入完用户名密码点击登

6、录时,登录页面中的JavaScript调用非对称加密算法对用户名和密码用用公钥进行加密。然后再提交到服务器端,服务器端利用私钥进行解密,再跟数据库中的用户名密码进行比较,如果一致,则登录成功,否则登录失败。看上去很简单,但是这里有这样几个问题。目前RSA算法中,10242048位的密钥被认为是安全的。如果密钥长度小于这个长度,则认为可以被破解。但这样的长度超过了程序设计语言本身所允许的数字运算范围,需要通过模拟来实现大数运算。而在Web系统的客户端,如果通过JavaScript来模拟大数运行的话,效率将会是很低的,因此要在客户端采用这样的密钥来加密数据的话,许多浏览器会发出执行时间过长,停止运

7、行的警告。然而,解密或者密钥生成的时间相对于加密来说要更长。虽然解密和密钥生成是在服务器端执行的,但是如果服务器端是PHP、ASP这样的脚本语言的话,它们也将很难胜任这样的工作。ECC算法的密钥长度要求比RSA算法要低一些,ECC算法中160位的密钥长度被认为与RSA算法中1024位的密钥长度的安全性是等价的。虽然仍然要涉及的模拟大数运算,但ECC算法的密钥长度的运算量还算是可以接受的,但是ECC算法比RSA算法要复杂的多,因此实现起来也很困难。对称加密算法比非对称加密算法要快得多,但是对称加密算法需要数据发送方和接受方共用一个密钥,密钥是不能通过不安全的网络直接传递的,否则密钥和加密以后的数

8、据如果同时监听到的话,入侵者就可以直接利用监听到的密钥来对加密后的信息进行解密了。那是不是就不能通过对称加密算法实现安全登录呢?其实只要通过密钥交换算法就可以实现安全登录了,常用的密钥交换算法是Diffie-Hellman密钥交换算法。我们可以这样来实现密钥的安全传递,首先在客户端向服务器端请求登录页面时,服务器端生成一个大素数p,它的本原根g,另外生成一个随机数Xa,然后计算出Ya=gXamodp,将p、g、Ya连同登录页面一起发送给客户端,然后客户端也生成一个随机数Xb,计算Yb=gXbmodp,然后再计算K=YaXbmodp,现在K就是密钥,接下来就可以用K作密钥,用对称加密算法对用户输

9、入进行加密了,然后将加密后的信息连同计算出来的Yb一同发送给服务器端,服务器端计算K=YbXamodp,这样就可以得到跟客户端相同的密钥K了,最后用客户端加密算法的相应解密算法,就可以在服务器端将加密信息进行解密了,信息解密以后进行比较,一致则登录成功,否则登录失败。需要注意的时候,这里服务器端生成的随机数Xa和客户端生成的随机数Xb都不传递给对方。传递的数据只有p、g、Ya、Yb和加密后的数据。但是如果我们不采用加密算法而采用散列算法对登录密码进行处理的话,可以避免被直接解密出原文,但是如果直接采用MD5或者SHA1来对登录密码进行处理后提交的话,一旦入侵者监听到散列后的密码,则不需要解密出

10、原文,直接将监听到的数据提交给服务器,就可以实现入侵的目的了。而且,目前MD5算法已被破解,SHA1算法则被证明从理论上可破解,就算采用离线碰撞,也可以找出与原密码等价的密码来。所以直接采用MD5或者SHA1来对密码进行散列处理也是不可行的。但是如果在散列算法中加入了密钥,情况就不一样了。hmac算法正好作了这样的事情,下面我们来看看如何用hmac算法实现安全登录。首先在客户端向服务器端请求登录页面时,服务器端生成一个随机字符串,连同登录页面一同发送给客户端浏览器,当用户输入完用户名密码后,将密码采用MD5或者SHA1来生成散列值作为密钥,服务器端发送来的随机字符串作为消息数据,进行hmac运

11、算。然后将结果提交给服务器。之所以要对用户输入的密码进行散列后再作为密钥,而不是直接作为密钥,是为了保证密钥足够长,而又不会太长。服务器端接受到客户端提交的数据后,将保存在服务器端的随机字符串和用户密码进行相同的运算,然后进行比较,如果结果一致,则认为登录成功,否则登录失败。当然如果不用hmac算法,直接将密码和服务器端生成的随机数合并以后再做MD5或者SHA1,应该也是可以的。这里客户端每次请求时服务器端发送的随机字符串都是不同的,因此即使入侵者监听到了这个随机字符串和加密后的提交的数据,它也无法再次提交相同的数据通过验证。而且通过监听到的数据也无法计算出密钥,所以也就无法伪造登录信息了。对

12、称和非对称加密算法不仅适用于登录验证,还适合用于最初的密码设置和以后密码修改的过程中,而散列算法仅适用于登录验证。但是散列算法要比对称和非对称加密算法效率高。3. 基于MD5的网页登陆安全认证详细设计3.1. 网页登陆安全认证系统结构user.log存储用户名密码random_string生成随机字符串md5_verify.log临时文件verify_login.sh验证登陆get_ran_str.sh处理登陆服务器端(后台)浏览器端(前台)页面中随机字串变量var random_str字符串+用户名+密码MD5加密页面跳转图2.1 网页登陆安全认证系统结构图3.2. 网页登陆安全认证相关文件

13、表2.2 网页登陆安全认证相关文件文件结构文件功能描述web cgi-bin get_ran_str.sh md5_verify.log random_string user.log verify_login.sh js jquery-1.8.3.js jQuery.md5.js login.html获得随机字串,js变量var random_str=随机字符串由get_ran_str.sh把随机字串和user.log中的用户名加密结果生成随机字符串存储用户名、密码提交get表单,分析MD5值jQuery库jQuery实现的MD5登陆页3.3. 脚本详细设计表2.3-1 get_ran_str

14、.sh脚本设计#!/bin/sha=./random_stringprintf md5_verify.logawk -F txt=$a$1$2; system(printf txt | md5sum) user.log | awk print md5:$1tstat: md5_verify.logecho -e Content-Type: text/htmlnprintf var random_str=$a;表2.3-2 verify_login.sh脚本设计#!/bin/shMD5_VERIFY_FILE=./md5_verify.logLOGIN_PAGE_URL=/testmd5.aspPERMIT_JUMP_PAGE_URL=http:/alert() echo a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号