安全登录系统的设计与实现方案

安全|设计

对于 Web 应用程序,安全登录是很重要的。但是目前大多数 Web 系统在发送登录密码时是发送的明文,这样很容易被入侵者监听到密码。当然,通过 SSL 来实现安全连接是个不错的方法,但是很多情况下我们没办法将服务器设置为带有 SSL 的 Web 服务器。因此如果在登录系统中加入安全登录机制,则可以在没有 SSL 的 Web 服务器上实现安全登录。

要实现安全登录,可以采用下面两种方法,一种基于非对称加密算法,另一种基于 hmac 算法。下面我们来分别讨论这两种方法。

非对称加密算法中,目前最常用的是 RSA 算法和 ECC(椭圆曲线加密)算法。要采用非对称加密算法实现安全登录的话,首先需要在客户端向服务器端请求登录页面时,服务器生成公钥和私钥,然后将公钥随登录页面一起传递给客户端浏览器,当用户输入完用户名密码点击登录时,登录页面中的 JavaScript 调用非对称加密算法对用户名和密码用用公钥进行加密。然后在提交到服务器端,然后服务器端利用私钥进行解密,然后跟数据库中的用户名密码进行比较,如果一致,则登录成功,否则登录失败。

看上去很简单,但是这里有这样几个问题。目前 RSA 算法中,1024-2048 位的密钥被认为是安全的。如果密钥长度小于这个长度,则认为可以被破解。但这样的长度超过了程序设计语言本身所允许的数字运算范围,需要通过模拟来实现大数运算。而在 Web 系统的客户端,如果通过 JavaScript 来模拟大数运行的话,效率将会是很低的,因此要在客户端采用这样的密钥来加密数据的话,许多浏览器会发出执行时间过长,停止运行的警告。然而,解密或者密钥生成的时间相对于加密来说要更长。虽然解密和密钥生成是在服务器端执行的,但是如果服务器端是 PHP、ASP 这样的脚本语言的话,它们也将很难胜任这样的工作。ECC 算法的密钥长度要求比 RSA 算法要低一些,ECC 算法中 160 位的密钥长度被认为与 RSA 算法中 1024 位的密钥长度的安全性是等价的。虽然仍然要涉及的模拟大数运算,但 ECC 算法的密钥长度的运算量还算是可以接受的,但是 ECC 算法比 RSA 算法要复杂的多,因此实现起来也很困难。

对称加密算法比非对称加密算法要快得多,为什么不采用对称加密算法呢?因为对称加密算法需要数据发送方和接受方共用一个密钥,因此如果要在 Web 系统的发送方也就是客户端浏览器对密码进行加密的话,就需要先从服务器端获取密钥,但密钥的传递可能会被监听,加密以后的数据如果也被同时监听到的话,入侵者就可以直接利用监听到的密钥来对加密后的信息进行解密了。

但是如果我们不采用加密算法而采用散列算法对登录密码进行处理的话,可以避免被直接解密出原文,但是如果直接采用 MD5 或者 SHA1 来对登录密码进行处理后提交的话,一旦入侵者监听到散列后的密码,则不需要解密出原文,直接将监听到的数据提交给服务器,就可以实现入侵的目的了。而且,目前 MD5 算法已被破解,SHA1 算法则被证明从理论上可破解,就算采用离线碰撞,也可以找出与原密码等价的密码来。所以直接采用 MD5 或者 SHA1 来对密码进行散列处理也是不可行的。

但是如果在散列算法中加入了密钥,情况就不一样了。hmac 算法正好作了这样的事情,下面我们来看看如何用 hmac 算法实现安全登录。首先在客户端向服务器端请求登录页面时,服务器端生成一个随机字符串,连同登录页面一同发送给客户端浏览器,当用户输入完用户名密码后,将密码采用 MD5 或者 SHA1 来生成散列值作为密钥,服务器端发送来的随机字符串作为消息数据,进行 hmac 运算。然后将结果提交给服务器。之所以要对用户输入的密码进行散列后再作为密钥,而不是直接作为密钥,是为了保证密钥足够长,而又不会太长。服务器端接受到客户端提交的数据后,将保存在服务器端的随机字符串和用户密码进行相同的运算,然后进行比较,如果结果一致,则认为登录成功,否则登录失败。

这里客户端每次请求时服务器端发送的随机字符串都是不同的,因此即使入侵者监听到了这个随机字符串和加密后的提交的数据,它也无法再次提交相同的数据通过验证。而且通过监听到的数据也无法计算出密钥,所以也就无法伪造登录信息了。

因此目前来看,用 hmac 算法来实现安全登录系统的方法是最可行的。

时间: 2024-09-10 22:45:49

安全登录系统的设计与实现方案的相关文章

第三方账号登录-支持第三方账号登陆的账户系统如何设计数据库?

问题描述 支持第三方账号登陆的账户系统如何设计数据库? 现要设计一网站账户系统,可以支持手机邮箱注册登陆,同时支持腾讯QQ微信及新浪微博等第三方账号绑定登陆,该如何设计网站的账户系统数据库?之前没有相关经验,不知道有哪些需要休息的地方,求高手指教! 解决方案 http://ask.csdn.net/questions/192672 解决方案二: 第三方登录传进来用户名或者tooken,那么你就用它作为关键字,然后创建一个新的账户,并且把两者绑定起来.用户用第三方登录,就查询第三方账户对应你的系统

通过Dreamweaver用ASP设计注册登录系统出现未指定的错误,求高手解答

问题描述 通过Dreamweaver用ASP设计注册登录系统出现未指定的错误,求高手解答 本人初学Dreamweaver,小白一枚,用ASP设计注册登录系统,用的是本地/网络连接方式进行测试,在点击登录按钮后显示错误,错误为: Provider 错误 '80004005' 未指定的错误 /denglu.asp,行 9 求高手帮忙解答 解决方案 你把代码贴出来看看啊 解决方案二: 数据库连接有问题,你用的是什么版本的数据库,CONNECTSTRING是怎么写的? 另外检查数据库文件目录的访问权限.

登录表单设计的新思路

  登录网站已经融入到大多数人的生活当中.也许是登录操作太过频繁,在这个过程中常常出现这样或那样的问题,比如,忘了密码,用户名或注册的邮件地址. 这样的经历不只让我们感到挫败,而且对企业也有不利影响.到底有多糟糕的影响呢?网站User Interface Engineering对主要的网络零售商进行了调查,结果显示,45%的客户在这些系统中进行了重复注册,每天有160,000人进行了找回密码的操作,而一旦他们寻回密码之后,75%的客户再也不会完成之前的支付. 没有登录的访客无法看到网站个性化视图

基于Web在线考试系统的设计与实现

这是一个课程设计的文档,源码及文档数据库我都修改过了,貌似这里复制过来的时候图片不能贴出,下载地址:http://download.csdn.net/detail/sdksdk0/9361973   数据库原理课程设计说明书              基于Web在线考试系统的设计与实现             目  录   1 课题背景与意义.3 1.1课题开发背景.3 1.2 课题开发意义.3 2 系统需求分析.4 2.1 项目要求.4 2.2 开发方案.5 2.3开发环境.5 3 总体开发.

ASP用户登录模块的设计

ASP用户登录模块的设计 用户登录验证脚本,Chkpwd.asp <% '=======用户登录验证脚本======= '如果尚未定义Passed对象,则将其定义为false,表示没有通过验证 If IsEmpty(Session("Passed")) Then Session("Passed")=false End If   'Session("Passed")=False,表示尚未通过验证,则开始读取从表单传来的验证信息 If Sess

单点登录系统(SSO)详细设计说明书(下篇)

单点登录系统(SSO)详细设计说明书(下篇) 收藏   3.3输入输出要求解释各输入输出数据的类型,并逐项对格式.数值范围.精度等作出准确定义.对软件的数据输出及必须标明的控制输出量进行解释并举例,包括对硬拷贝报告(正常结果输出.状态输出及异常输出)以及图形或显示报告的描述. 3.4 流程逻辑      3.4.1注册流程图       3.4.2会员登录流程图       3.4.3 会员登出流程图           3.4.4 会员修改密码流程图         3.4.5 会员找回密码流

如何使用laravel搭建后台登录系统

今天想用laravel搭建一个后台系统,就需要最简单的那种,有用户登录系统,试用了下,觉得laravel的用户登录这块做的还真happy.当然,前提就是,你要的用户管理系统是最简单的那种,就是没有用户权限,能登录就好.   我这里就不用默认的user表做例子了,那样很容易和laravel的一些默认设置混淆.   首先确认,后台的用户表,我设计表叫做badmin,每个管理员有用户名(username),有昵称(nickname),有邮箱(email),有密码(password) 这里玩个花,使用l

.NET Winform登录窗体编程设计及数据库表

.NET Winform登录窗体编程设计及数据库表 : 源代码: 窗体主界面 查找学生(由于重装系统 DB丢失 所以没有数据)

技术-怎样实现一个用户登录系统呢?

问题描述 怎样实现一个用户登录系统呢? 我想实现一个用户登录页面已经实现了用户的注册了也写进了mysql中我也知道用户登陆的时候要去数据库里面查看有没有登录页面中输入的账号密码信息如果和数据库中的一致就进入成功的页面如果不符就进入错误页面.可是就是不知道怎么写应该用到什么技术呢? 解决方案 设计一个可扩展的用户登录系统设计一个可扩展的用户登录系统 解决方案二: http://www.51testing.com/html/88/377588-814420.html 解决方案三: 没什么技术吧获取输