论文部分内容阅读
摘要:本文分析了使用Token进行身份认证的方法。提出一种在.NET环境下使用虚拟Token的身份认证方案,并结合实际的系统分析了该方案在实践运行中的结果。
关键词:身份认证;虚拟Token;.Net;网络;通信;安全
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)08-1pppp-0c
1 前言
随着网络技术的广泛应用,越来越多的应用系统通过网络传输和处理信息,随之而来的是信息的安全性令人忧虑。一个突出的事实是:许多最具有危害性的犯罪都是绕过密码保护以获取对信息或资金的访问权限。简单的“用户名 口令”的身份认证方式已经远远不能满足很多系统的安全性要求。
.NET环境下,对用户的权限分配和用户角色的管理都有较完善的方案。用户认证的方法也有对称密钥、非对称密钥等多种方案可以选择。但客户端提交自己的用户名和密码还是明文,所有的安全工作都在服务器端完成。这种情况下,网络监听和抓包工具可以很方便地还原相应的用户名和密码。当然使用SSL可以保证信息的加密和传输的安全,但设置繁杂、维护成本高,在中小型的系统中应用较少。为此,基于双因素用户认证的Token应运而生。其基本思路是,用户成功登录要有两个因素:一个是只有他知道的口令,另一个是他拥有的,即Token。Token根据其特有的根和时间,每分钟产生一个无法预知的编码,该编码和用户口令构成了用户的通行码。要登录的机器和该用户的Token共享一个秘密。即Token的根;同时使用和Token相同的编码生成函数。机器除检查用户的口令外,还在一个小的时间片内逐个生成Token编码,并和用户输入的编码做比较,若有一个匹配,则用户的身份得到确认。显然双因索的用户认证要比单一的口令更安全。
目前常规的做法是使用昂贵的硬件Token,一般经过三个回合的信息交换。我们提出一种更高效更经济的方案,在.NET环境下使用动态口令技术通过两个回合的信息交换用虚拟Token完成整个认证过程。
2 挑战/应答式的身份认证方式
挑战/应答机制身份认证属于动态身份认证。在挑战/应答机制中,每个系统用户都持有相应的挑战应答Token。Token内置种子密钥和加密算法。用户访问系统时,认证系统提示输入用户名和静态口令,认证通过后,系统下传一个中心系统随机生成的挑战数,用户将挑战数输入到挑战应答Token中,挑战应答Token利用内置的种子密钥和加密算法计算出相应的应答数。用户将该应答数上传给认证中心。认证中心根据该用户在认证中心保存的种子密钥和同样的加密算法计算出同样的应答数,并和用户上传的应答数进行比较。由于每个用户的种子密钥不同,不同用户对同样的挑战数可以计算出不同的应答数,只有用户持有指定的挑战应答Token才能计算出正确的应答数,同时该应答数只能网络中身份认证技术的研究在本次挑战应答过程中有效,不担心被他人截取,因此能保证很高的安全性。这种方式是可靠有效的认证方法。这种身份认证方法是基于物理硬件设备Token实现的。但价格昂贵,限制了技术的推广与应用。
3 虚拟Token的安全性分析
3.1 虚拟Token身份认证方式
本系统的身份认证采用了安全性较高的挑战/应答式的身份认证模式。
在认证过程中,系统将时间作为挑战数。客户使用通用的虚拟Token,用时间片和用户身份的种子算出应答数。再将应答数提交到系统进行验证。验证操作主要有2个步骤:
第一、验证应答数是否在允许的时间片段内。第二、由服务器端预存的用户身份种子和时间片再次生成验证码,将验证码与应答数进行比较,通过后可登录系统。
这种方式下,时间作为挑战数是一次性的,对于相同的用户身份种子加上不同的时间片在虚拟Token中运算得到的应答数是不同的,这样就可以有效防止回放攻击。
这种方式提供了一种通用的虚拟Token,比静态口令安全性更高。
3.2 安全通信:虚拟Token在防侦听中的作用
在整个通信过程中,在网络中传输的是加密的应答数,加密算法选择了单向散列函数SHA-1。单向函数计算起来非常容易,但是对其求逆却异常困难。也就是说已知x,很容易计算f (x),但己知f (x),却难以计算出x。(1) (2) (3)这里所说的“难以计算”在密码学中的含义就是:即使世界上所有的计算机都用来计算,f (x)计算出x也要花费数百万年的时间。散列函数把可变输入长度的串(叫做预映射)转换成固定长度的输出串(叫做散列值)的一种函数。散列函数是典型的多到一的函数,因为不同的预映射可能会得到相同的散列值。不能用散列函数来确定两个串一定相同,但是却可以用作校验预映射的手段。
单向函数与散列函数相结合形成单向散列函数,在密码学中应用非常广泛,它是许多安全应用协议的基本模块。(4)单向散列函数就是在一个方向上工作的散列函数,从预映射很容易计算散列值,但要从其散列值推出一个预映射却很难。另外单向散列函数要保证是无冲突的,即难于产生两个预映射的值,使它们的散列值相同,换句话说,单向散列函数是一对一的函数。
散列函数是公开的,对处理过程不用保密,它的安全性就在于它的单向性,其输出不依赖于输入。(5) (6) (7)平均而言,预映射的单个位的改变将引起散列值中一半的位改变。(8)已知一个散列值,要找到预映射的值,使它的散列值等于己知的散列值在计算上是不可行的。
本系统中,我们选用了SHA-1这种使用广泛的散列算法。这种算法经过密码学领域中许多专家相当长时间的测试,安全性高。这样,通过SHA-1加密的应答数即使被非法用户截取,也不会对系统安全造成威胁,这样就解决了口令明文传递的问题。
4 .NET下虚拟Token认证方案
本文针对硬件Token性价比过低的情况,设计了使用虚拟Token代替物理硬件Token进行挑战/应答式的身份认证。虚拟Token是一种软件形式的Token,因此成本较低,适合广泛使用。
4.1 虚拟Token的生成方案
用户A通过普通的用户注册过程得到了用户名和Token的根RA,同时用户A下载一个虚拟Token到本地的计算机上。
4.2 虚拟Token的验证
登录时,虚拟Token根据本地的时间戳TA及Token的根RA由一个单向加密算法J得到对称密钥KA=J(RA,TA),此单向加密算法在服务器端也存在。密钥的验证在服务器端实现。服务器端接收到客户端传来的消息后由当前的时间根据设定的时间片生成最多至2个(当前时间片和前一时间片)的TA,并根据用户A的用户名查出用户的根RA,之后用快速的单向加密算法得到密钥至多2 个的K’A。 最后比较客户端传来的密钥KA和服务器端生成的密钥K’A。相同时用户就被验证通过。
5 实践应用
.NET Framwork编程(9)最困难的一方面是确定Framework是否已经提供了系统所需的功能,还是要全部自己实现。
本系统不创建自己的安全系统,但使用自己的Pricipal和identity,同Microsoft已有的安全体系相吻合。为了让程序员方便地采纳已有的安全系统,Micosoft提供了Iprincipal和Iidentity接口。
为此,创建两个实现Iprincipal和Iidentity的类,分别命名为:SunewsPrincipal和SunewsIdentity,就可以让我们的类符合Microsoft原有的系统了。在SunewsPrincipal类中为实现两套不同的认证方法,这里只是简要地概括类成员。
SunewsPrincipal类成员(通过HttpContext.User可用)
图2 SunewsIdentity类
6 结论
身份认证是系统确认访问用户身份真实性、合法性和唯一性的手段。根据不同系统的安全要求建立性能、价格都合适的身份认证系统对信息系统的推广使用具有重要的意义。本文设计了一种使用虚拟Token的身份认证方案,并结合了.Net本身的安全认证体系,实现了使用虚拟Token的安全信息发布系统。并在实践中经过了大量的使用和检验。
参考文献:
[1]陈鲁生,沈世锰.现代密码学[M].北京:科学出版社.2002.
[2]黄月江,龚奇敏.信息安全与保密[M].北京国防工业出版社,1999.
[3]杨义先,林晓东,邢育森.信息安全综论[M].北京邮电大学,2000.
[4]武新华,安向东,苏雅.加密解密全方位学习[M].中国铁道出版社,2006.
[5]邱志聪.加密解密技能百练[M].中国铁道出版社,2005.
[6]郭栋,孙锋,唐植明.加密与解密实战攻略[M].清华大学出版社,2003.
[7]卢开澄.计算机密码学[M].清华大学出版社,1999.
[8]Bruce Schneier,吴世忠,祝世雄,张文政.应用密码学[M].机械工业出版社,2000.
[9]微软公司,詹文军,王新程.ASP.NET安全应用程序开发[M].清华大学出版社,2003.
关键词:身份认证;虚拟Token;.Net;网络;通信;安全
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)08-1pppp-0c
1 前言
随着网络技术的广泛应用,越来越多的应用系统通过网络传输和处理信息,随之而来的是信息的安全性令人忧虑。一个突出的事实是:许多最具有危害性的犯罪都是绕过密码保护以获取对信息或资金的访问权限。简单的“用户名 口令”的身份认证方式已经远远不能满足很多系统的安全性要求。
.NET环境下,对用户的权限分配和用户角色的管理都有较完善的方案。用户认证的方法也有对称密钥、非对称密钥等多种方案可以选择。但客户端提交自己的用户名和密码还是明文,所有的安全工作都在服务器端完成。这种情况下,网络监听和抓包工具可以很方便地还原相应的用户名和密码。当然使用SSL可以保证信息的加密和传输的安全,但设置繁杂、维护成本高,在中小型的系统中应用较少。为此,基于双因素用户认证的Token应运而生。其基本思路是,用户成功登录要有两个因素:一个是只有他知道的口令,另一个是他拥有的,即Token。Token根据其特有的根和时间,每分钟产生一个无法预知的编码,该编码和用户口令构成了用户的通行码。要登录的机器和该用户的Token共享一个秘密。即Token的根;同时使用和Token相同的编码生成函数。机器除检查用户的口令外,还在一个小的时间片内逐个生成Token编码,并和用户输入的编码做比较,若有一个匹配,则用户的身份得到确认。显然双因索的用户认证要比单一的口令更安全。
目前常规的做法是使用昂贵的硬件Token,一般经过三个回合的信息交换。我们提出一种更高效更经济的方案,在.NET环境下使用动态口令技术通过两个回合的信息交换用虚拟Token完成整个认证过程。
2 挑战/应答式的身份认证方式
挑战/应答机制身份认证属于动态身份认证。在挑战/应答机制中,每个系统用户都持有相应的挑战应答Token。Token内置种子密钥和加密算法。用户访问系统时,认证系统提示输入用户名和静态口令,认证通过后,系统下传一个中心系统随机生成的挑战数,用户将挑战数输入到挑战应答Token中,挑战应答Token利用内置的种子密钥和加密算法计算出相应的应答数。用户将该应答数上传给认证中心。认证中心根据该用户在认证中心保存的种子密钥和同样的加密算法计算出同样的应答数,并和用户上传的应答数进行比较。由于每个用户的种子密钥不同,不同用户对同样的挑战数可以计算出不同的应答数,只有用户持有指定的挑战应答Token才能计算出正确的应答数,同时该应答数只能网络中身份认证技术的研究在本次挑战应答过程中有效,不担心被他人截取,因此能保证很高的安全性。这种方式是可靠有效的认证方法。这种身份认证方法是基于物理硬件设备Token实现的。但价格昂贵,限制了技术的推广与应用。
3 虚拟Token的安全性分析
3.1 虚拟Token身份认证方式
本系统的身份认证采用了安全性较高的挑战/应答式的身份认证模式。
在认证过程中,系统将时间作为挑战数。客户使用通用的虚拟Token,用时间片和用户身份的种子算出应答数。再将应答数提交到系统进行验证。验证操作主要有2个步骤:
第一、验证应答数是否在允许的时间片段内。第二、由服务器端预存的用户身份种子和时间片再次生成验证码,将验证码与应答数进行比较,通过后可登录系统。
这种方式下,时间作为挑战数是一次性的,对于相同的用户身份种子加上不同的时间片在虚拟Token中运算得到的应答数是不同的,这样就可以有效防止回放攻击。
这种方式提供了一种通用的虚拟Token,比静态口令安全性更高。
3.2 安全通信:虚拟Token在防侦听中的作用
在整个通信过程中,在网络中传输的是加密的应答数,加密算法选择了单向散列函数SHA-1。单向函数计算起来非常容易,但是对其求逆却异常困难。也就是说已知x,很容易计算f (x),但己知f (x),却难以计算出x。(1) (2) (3)这里所说的“难以计算”在密码学中的含义就是:即使世界上所有的计算机都用来计算,f (x)计算出x也要花费数百万年的时间。散列函数把可变输入长度的串(叫做预映射)转换成固定长度的输出串(叫做散列值)的一种函数。散列函数是典型的多到一的函数,因为不同的预映射可能会得到相同的散列值。不能用散列函数来确定两个串一定相同,但是却可以用作校验预映射的手段。
单向函数与散列函数相结合形成单向散列函数,在密码学中应用非常广泛,它是许多安全应用协议的基本模块。(4)单向散列函数就是在一个方向上工作的散列函数,从预映射很容易计算散列值,但要从其散列值推出一个预映射却很难。另外单向散列函数要保证是无冲突的,即难于产生两个预映射的值,使它们的散列值相同,换句话说,单向散列函数是一对一的函数。
散列函数是公开的,对处理过程不用保密,它的安全性就在于它的单向性,其输出不依赖于输入。(5) (6) (7)平均而言,预映射的单个位的改变将引起散列值中一半的位改变。(8)已知一个散列值,要找到预映射的值,使它的散列值等于己知的散列值在计算上是不可行的。
本系统中,我们选用了SHA-1这种使用广泛的散列算法。这种算法经过密码学领域中许多专家相当长时间的测试,安全性高。这样,通过SHA-1加密的应答数即使被非法用户截取,也不会对系统安全造成威胁,这样就解决了口令明文传递的问题。
4 .NET下虚拟Token认证方案
本文针对硬件Token性价比过低的情况,设计了使用虚拟Token代替物理硬件Token进行挑战/应答式的身份认证。虚拟Token是一种软件形式的Token,因此成本较低,适合广泛使用。
4.1 虚拟Token的生成方案
用户A通过普通的用户注册过程得到了用户名和Token的根RA,同时用户A下载一个虚拟Token到本地的计算机上。
4.2 虚拟Token的验证
登录时,虚拟Token根据本地的时间戳TA及Token的根RA由一个单向加密算法J得到对称密钥KA=J(RA,TA),此单向加密算法在服务器端也存在。密钥的验证在服务器端实现。服务器端接收到客户端传来的消息后由当前的时间根据设定的时间片生成最多至2个(当前时间片和前一时间片)的TA,并根据用户A的用户名查出用户的根RA,之后用快速的单向加密算法得到密钥至多2 个的K’A。 最后比较客户端传来的密钥KA和服务器端生成的密钥K’A。相同时用户就被验证通过。
5 实践应用
.NET Framwork编程(9)最困难的一方面是确定Framework是否已经提供了系统所需的功能,还是要全部自己实现。
本系统不创建自己的安全系统,但使用自己的Pricipal和identity,同Microsoft已有的安全体系相吻合。为了让程序员方便地采纳已有的安全系统,Micosoft提供了Iprincipal和Iidentity接口。
为此,创建两个实现Iprincipal和Iidentity的类,分别命名为:SunewsPrincipal和SunewsIdentity,就可以让我们的类符合Microsoft原有的系统了。在SunewsPrincipal类中为实现两套不同的认证方法,这里只是简要地概括类成员。
SunewsPrincipal类成员(通过HttpContext.User可用)
图2 SunewsIdentity类
6 结论
身份认证是系统确认访问用户身份真实性、合法性和唯一性的手段。根据不同系统的安全要求建立性能、价格都合适的身份认证系统对信息系统的推广使用具有重要的意义。本文设计了一种使用虚拟Token的身份认证方案,并结合了.Net本身的安全认证体系,实现了使用虚拟Token的安全信息发布系统。并在实践中经过了大量的使用和检验。
参考文献:
[1]陈鲁生,沈世锰.现代密码学[M].北京:科学出版社.2002.
[2]黄月江,龚奇敏.信息安全与保密[M].北京国防工业出版社,1999.
[3]杨义先,林晓东,邢育森.信息安全综论[M].北京邮电大学,2000.
[4]武新华,安向东,苏雅.加密解密全方位学习[M].中国铁道出版社,2006.
[5]邱志聪.加密解密技能百练[M].中国铁道出版社,2005.
[6]郭栋,孙锋,唐植明.加密与解密实战攻略[M].清华大学出版社,2003.
[7]卢开澄.计算机密码学[M].清华大学出版社,1999.
[8]Bruce Schneier,吴世忠,祝世雄,张文政.应用密码学[M].机械工业出版社,2000.
[9]微软公司,詹文军,王新程.ASP.NET安全应用程序开发[M].清华大学出版社,2003.