青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 新版Google桌面的新功能常用RSS阅读器评测 »

网站的安全登录认证设计

  用户登录是任何一个应用系统的基本功能,特别是对于网上银行系统来说,用户登录的安全性尤为重要。如何设计一个网站的安全登录认证程序,是本文主要讨论的问题。

  静态密码存在着比较多的安全隐患,攻击者有很多手段获得静态密码,管理密码也具有较高的成本,我在前文《中国网上银行系统安全性分析》中曾经论证过,使用硬件安全产品“动态密码锁”或者“USB Key”可以较好的解决这个问题,但是会带来加密锁的成本,在不增加硬件成本的情况下,我们也可以通过一些设计上的技巧和措施在一定程度上来保证登录者的身份。

  一、客户端和服务器端的安全

  客户端的安全,主要是用户密码本身的安全性(密码长度和复杂性等)以及用户电脑的安全性,包括用户电脑没有安装黑客木马软件,登录程序没有被第三方程序加载调试,用户录入框组织键盘Hook程序等等,通过一些代码即可解决。

  服务器端的安全,包括服务器自身的安全(系统漏洞等等)以及程序设计上的安全,我这里主要讲一下程序设计上的安全。最基本的问题是,用户的密码不应该直接保存在服务器的数据库上,也不应该将密码用单钥算法加密后保存,最基本的认证方式是通过单向散列函数对密码进行认证。在《软件加密技术和注册机制》一文中介绍了一些单向散列函数可以实现简单的认证。目前大多数网站都使用MD5函数进行登录认证,不过我推荐使用安全性更高的SHA1散列函数来进行登录认证。

  二、网络传输上的安全

  目前的网络协议通过HTTP协议进行通讯,存在很大的安全隐患,黑客可以通过SNIFFER工具进行抓包分析网络数据包,因此用户名和密码的传输应该使用非明文的方式传输,这里就用到了“公开密钥密码”的概念。

  学过基本的“密码学”的人都应该知道“公开密钥算法(也叫非对称算法、双钥算法)”这个概念,即用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来。

  加密的传输过程分为两部分,一部分为身份认证,用户鉴别这个用户的真伪;另外一部分为数据加密,用于数据的保密。这两部分功能都需要用到非对称加密技术。

  首先是身份认证,通讯的数据可以这样进行处理,将用户的信息(用户名、密码等)用该用户的私钥进行加密,然后再进行传输,而在服务器端会保存此用户的公钥,用此用户的公钥对传过来的信息进行解密,就可以得到正确的明文,这样就完成了一次安全的网络通讯。

  通讯过程的示例如下图所示,Alice用自己的私钥对明文进行加密后传输到服务器,服务器上的用户(例如Bob)拥有很多用户的公钥,因此使用Alice的公钥对密文进行解密,如果密钥正确的话,就可以解密出明文,也就完成了对Alice的身份认证。

公钥认证过程

  然后是数据加密,数据加密和数据认证正好相反,使用接收方的公钥对数据进行加密,传输的过程中,即使数据被黑客截获,也无法使用这些密文,接收方收到密文后,用自己的私钥对密文进行解密,从而完成了一次数据的加密传输。

  通讯过程的示例如下图所示,Alice需要发给Bob一段加密的信息,因此Alice就用Bob的公钥对明文进行加密后传输给Bob,Bob收到信息后,使用自己的私钥对密文进行解密,就可以解密出明文,也就完成了对Alice的发来密文的解密过程。

公钥加密的过程

  目前的公开密钥算法主要有RSA和ECC,RSA是比较老的算法,基于大质数分解,速度较慢,ECC(椭圆曲线)是最新的公钥加密算法,基于离散对数计算,速度比RSA快,安全性据说更高一些。

  当然,上面的所说的技术只是最为基本的身份认证技术,只是适合一般网站应用,对于电子商务和银行来说需要更为复杂和权威的安全认证系统。目前比较流行的是PKI技术。PKI(Public Key Infrastructure)是一种新的安全技术,它由公开密钥密码技术、数字证书、证书发放机构(CA)和关于公开密钥的安全策略等基本成分共同组成的。PKI技术已经被广泛应用于电子政务和电子商务,被证明是保证基于互联网的电子政务和电子商务安全的最佳解决方案。完整的PKI建设需要大量的资金和人力才能完成,这里就不多介绍了。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/823.html
  • 文章排行:
  • 1.luren
  • 搞错了吧,什么私钥加密,然后网站用公钥解密。公钥顾名思义就是公开的啦,只要你愿意,谁都会有你的公钥,何来安全?应该是用网站的公钥加密,传到网站后,网站用自己的私钥解密吧
  • 2007/3/20 15:07:29   支持(20)反对(14) 回复
  • 4.珍珠
  • 我也觉得,这高产的文章,每天应该需要花很多时间看资料做准备的呢!
  • 2007/3/11 22:46:42   支持(10)反对(8) 回复
  • 5.rainfoot
  • 今天偶然闯入宝地,浏览文章无数,敬佩之心由然而生。忽然觉着自己曾经走过的生活就这样的过去,很少留下只言片语让自己有机会重温当时的心情,同样的生活同样的天空,人和人的差别咋就这么大了,啥都不说了,从今完后你的blog就是我的主页了,向你学习,粉丝在这给你先鞠一躬了。。。
  • 2007/3/10 21:17:29   支持(15)反对(14) 回复
  • 6.枫林搜索引擎优化
  • 一直很疑惑williamlong怎么会有这么多时间去写博客呢?而且坚持了好几年?
  • 2007/3/11 17:31:50   支持(15)反对(14) 回复
  • 8.俺
  • 工行用的是口令卡,类似魔兽的那种。这个安全性应该不错,而且成本比usb的低很多。口令卡是免费办理的。
  • 2007/3/11 13:36:34   支持(12)反对(12) 回复
  • 9.zh332621
  • 退一万步讲,即便盗贼真的成功操控了户主的账户,至少户主能在第一时间收到警报——也就是那条确认码的短信。
    另外,那些相对安全级别较高的模式——比如第三方认证模式、交互认证模式或者采用所谓USB密匙系统等等——都是有很大漏洞或缺陷的。目前解决身份确认的通行办法是建立可靠的第三方CA认证。CA认证的技术基础是各种足够可靠的加密算法。但是,不管多么复杂的加密算法,只要其信息流路径是基于开放的互联网络的,从理论上讲就必然会被破解。在这个体系下,加密者与解密者就处于一种基于技术发展水平的道高一尺魔高一丈的循环怪圈。所以说,CA认证并不是最根本的解决方案。同时,USB密匙相对于手机来说,其管理性是很差的——首先,USB密匙因为不常用而容易丢。第二,手机丢了的话机主很快就能知道,而USB密匙丢了就不一定。第三,最重要的是USB密匙用过以后本身不会留下痕迹,而手机则具有可追溯性。
    因此,使用双网路模式,则困扰电子商务的身份确认和交易支付的安全问题将迎刃而解。同样,这种模式也适合于电子合同的身份认证。
    张文广
    于2007年3月20日
    电话:13357692360 0576-5132611
    13526520560
    E-mai:[email protected]
  • 2007/3/22 13:36:17   支持(10)反对(10) 回复
  • 10.luren
  • 首先是身份认证,通讯的数据可以这样进行处理,将用户的信息(用户名、密码等)用该用户的私钥进行加密,然后再进行传输,而在服务器端会保存此用户的公钥,用此用户的公钥对传过来的信息进行解密,就可以得到正确的明文,这样就完成了一次安全的网络通讯。

    请问上面这段话有问题么
  • 2007/3/29 19:59:10   支持(10)反对(10) 回复
  • 11.xiaocainiao
  • 网络的安全是三分技术,七分管理;PKI国家已经建了很多CA了,大多在赔钱,只有借助这个来盈利了;ECC现在也出现HECC了。
  • 2007/6/4 15:58:24   支持(13)反对(13) 回复
  • 12.太平洋4203
  • 13楼
    正确的过程是,客户端用服务器的提供的公钥加密用户名和密码,然后发给服务器,服务器用对应的私钥解开。这样即使有人抓包,但他不知道服务器的私钥,就无法解包,也没办法获取你的用户名和密码了。

    如果有人得到服务器公钥那不是可以用暴力破解的方法,不停向服务器发送加密后的用户名和密码,而服务器也可以正确的解密这样密文.这样一来安全性也就降低了吧!!!
  • 2007/8/17 16:49:52   支持(11)反对(11) 回复
  • 15.lonny
  • 拜托,身份认证是用来确认对方身份的好吗?A用自己的私钥加密,B用对应的公钥解密,以次来证明对方就是A,而不是其他人!再说一遍这是身份认证好吗!!!概念都没搞清楚,就来指责lz,能不能不要这么搞笑。
  • 2016/7/13 10:38:44   支持(0)反对(0) 回复
  • 18.ruru220
  • 百度里搜密码学的时候发现这个宝地,真的非常有用,谢谢喽~
  • 2007/12/17 23:26:26   支持(9)反对(10) 回复
  • 20.zh332621
  • 电子商务身份认证的根本之道——无线印鉴认证
    ——双网路模式是电子商务的终极模式
    张文广
    首先说明一下什么是双网路模式:就是通过两个互不透明的网路来传递同一事件的不同信息段——比如互联网和移动通信网就构成一个很好的双网路系统,这种模式可以从根本上解决身份认证和各种信息安全问题。
    拿网上银行的例子来说明。用户在开立网上银行账户时,必须将此账户与其手机号码捆绑。完成一次支付或转账的过程是:用户以账号和密码登录银行网站,在要发生支付或转账事件时,银行服务器随机生成一条一次性并具有时效性的身份确认码,该确认码通过移动通信网络以短信的方式发送到用户手机上,用户将此确认码输认确认后,交易才能继续进行。此条确认码也就完成使命而消亡了。
    3月10日,网上银行发生了一件大事——上海市民蔡先生的网上银行账户16万余资金被人转走。其实在现有模式下,这种事情是必然要发生的,以前有过!今后还会有!!!其实蔡先生的安全保障就是两串数字而已(账号和密码),而要确保这两串数字的私密性是何艰难啊!网上有黑客,有木马病毒,还有钓鱼网站等等。就是记在笔记本上还有可能被人窥视或丢失呢——又有多少人认为自己脑力好不需要记笔记的?
    如果是通过双网路模式构建的网上银行系统,根本就不会发生这样的事!在这种模式下,盗贼获得了账号和密码也没有用,因为他几乎不可能同时获得身份确认码。第一,盗贼没有获取确认码的工具,手机在户主手上呢。当然了,不排除户主把手机和记着账号密码的本子一块丢掉的可能性——那是他活该。第二,盗贼没有获取确认码的途径,除非他具备截获大量移动通信信息的能力,并同时能准确从中提取他想要的那一条。第三,盗贼不可能将来自于两个互不透明的网络的数据进行整合。也就是说盗贼不可能将互联网上获得的账号和密码与移动通信网上的确认码进行一一对应。
    [email protected]
  • 2007/3/22 13:35:59   支持(8)反对(10) 回复
  • 22.回一楼呵呵
  • 哈哈,不会吧,这么牛
  • 2007/8/11 18:42:02   支持(7)反对(10) 回复
  • 23.段誉
  • 你们好!
    看了你们的文章我是云里雾里.我有一个问题想问问各位,我前些时候请人做了一个 小的交友网站(3000大洋),他也把后台管理的用户名和密码告诉我了.但我看见他随时可以上我的网站,修改我的网页(不通过后台).我就想我的网站的安全性怎样呢?我要 该怎样管理我 的网站呢?另外我的网页是用asp和iis技术设计的它安全性怎样?黑客要黑我的网该怎么办?有哪位有识之士可以帮我的忙,我的QQ799390035.不胜感激!
  • 2007/7/11 20:23:48   支持(9)反对(13) 回复
  • 25.ccc
  • 首先是身份认证,通讯的数据可以这样进行处理,将用户的信息(用户名、密码等)用该用户的私钥进行加密,然后再进行传输,而在服务器端会保存此用户的公钥,用此用户的公钥对传过来的信息进行解密,就可以得到正确的明文,这样就完成了一次安全的网络通讯。

    你这一段话明显有问题,就像7楼说的那样,用户的公钥是公开的,这就是说只要有人在网络上抓包,即便你用私钥加密也没用,因为其他人也有你的公钥,他用公钥就可以解开你的包,然后偷取你的用户名和密码。

    正确的过程是,客户端用服务器的提供的公钥加密用户名和密码,然后发给服务器,服务器用对应的私钥解开。这样即使有人抓包,但他不知道服务器的私钥,就无法解包,也没办法获取你的用户名和密码了。

    实际的过程还要对服务器进行身份认证,一般就是利用证书了,避免服务器公钥本身就是伪造的。

    呵呵,blog一定避免错误以免误导他人哦
  • 2007/5/1 14:38:42   支持(6)反对(12) 回复
  • 26.Sean
  • 博主好!
    因开发需要,涉及到这方面,想请教一下前辈。
    CA用其根证书的私钥,签发了一个下级证书 B.cer。
    用CA根证书的公钥可以验证B.cer。
    请问,用于验证的hash值和签名值在B.cer中的对应的名称是什么?

    望前辈点拨下。
  • 2008/1/10 17:56:20   支持(6)反对(12) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.