软件即服务(Software-as-a-Service,SaaS)是21世纪开始兴起的开创性的软件应用模式。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台及其实施维护等一系列服务,企业只要通过互联网就可以使用这些服务,而令用户担心的是业务应用的安全性问题。因此,在设计SaaS应用系统时,采用可靠的安全技术确保数据的完整性和保密性至关重要。
身份鉴别技术作为网络应用系统的门户,在信息安全方面占有主导地位。比较常见的SaaS应用系统的身份认证系统采用基于CA体系的身份认证,但它必须以完整的CA体系为基础,成本较高,技术相当复杂,且对于认证机构的安全性及可靠性要求很高。基于上述原因,本文对原有的一次性口令认证系统进行改进,改进后的认证方案可以在安全性要求较高的环境中使用,尤其是在国内CA认证体系还不完善的情况下,使用这种无需第三方认证机构、认证流程比较简单的认证方案更加切实可行。
2 Rabin密码体制
Rabin算法建它在数论中求和数模平方根问题困难性的基础上。Rabin密码系统是基于二次同余模一个复合数,即X2=a(modn)。求解二次同余模一个复合数的复杂度与分解一个复合整数相同。如图1所示,如果n是一个非常大的数,对其进行因数分解是不可能。
图1 同余模一个复合数的求解流程
在Rabin密码系统中,利用n=p×q来选择密钥,p、q是由素数测试法选出的2个mod4同余3的大素数,由此,将n作为系统中的公钥;(p,q)作为私钥。
密钥生成和加密解密的过程如下:
(1)密钥生成(key Generation)
n←p×q
n在满足式子4k+3和p≠q中,选出2个大素数p、q
public key←n //公钥
private key←(p,q) //私钥
(2)加密(Encryption)
C←P2 mood n//C是密文;n是公钥;P来自Zn*的明文
虽然可以从集合Zn中选择明文P,若已定义了集合是在Zn*中,则解密容易很多。
(3)解密(Decryption)
a1←+(C(p+1)/4)mod p
a2←-(C(p+1)/4)mod p
b1←+(C(p+1)/4)mod q
b2←-(C(p+1)/4)mod q
//C是密文;p和q是私钥
P1←Chinese_Remainder(a1,b1,p,q)
P2←Chinese_Remainder(a1,b2,p,q)
P3←Chinese_Remainder(a2,b1,p,q)
P4←Chinese_Remainder(a2,b2,p,q)
//中国剩余算法要调用4次
因为收到的密文是明文的平方,所以要确保C在Zn*中有根(二次剩余)。中国剩余算法可用于求这4个平方根。
Rabin系统具有不确定性。由于解密的方法有4种,因此接收者要从中选择一种最终的方法,这需要4个可能值中3个的充分剩余度。
3 基于Rabin的OTP认证方案
3.1 认证方案的设计
传统的S/KEY身份鉴别协议是一种比较常见的一次性口令(OTP)身份鉴别技术,它能够有效地抵抗重放攻击,由于每次散列函数运算不同,每次传输的口令并不相同。攻击者无法再次使用截取到的口令,因此有一定的安全性。但由于每次认证时迭代次数要减1,因此每过段时间用户就必须重新注册,很繁琐;并且S/KEY最大的弊病是不能有效地防止小数攻击,使攻击者有机可乘。本文提出一种新的S/KEY认证协议,经过改进的基于Rabin密码机制的一次性口令身份认证方案能够有效地弥补这个漏洞。
采用Rabin密码体制对明文信息加密后在网上传播,同时在服务器上保存加密的一次性口令,只有服务器的私钥才能解密,判断是否进行后续鉴别。图2为新型认证方案交互示意图。
图2 基于Rabin密码体制的OTP认证方案交互示意图
(1)初始化和注册阶段
基于Rabin密码体制选出系统的公钥密钥,提高系统的安全性。设客户端U的公钥和私钥分别为KUK和KUS。服务器端A的公钥和私钥分别为KSR和KSS。用户注册时,交换用户的公开密钥和服务器的公开密钥,并各自保存自己的秘密密钥,在这里密钥交换不需要第三方参与,从而免去了CA认证体系。用户端计算K=KUS×KSR。,服务器端计算K=KUK×KSS,K是用户与服务器共同拥有的会话密钥。服务器为用户创建一个用户信息条目,生成一个随机数R并发送给客户端。用户注册时需用共同密钥加密的口令K(pw)和随机数月进行一次散列运算a=H(K(pw)||R),将散列结果传递给服务器端。将其与用户ID一同存入数据库中,服务器中存放了用户ID、鉴别口令H(K(pw)||R)和随机数R。 (2)身份鉴别阶段
用户登录到服务器,传送自己的身份标识ID。服务器用接收到的用户传送来的ID鉴别用户身份:
1)验证ID的有效性,如果ID不正确,则拒绝用户登录。
2)若正确,根据用户ID查找相应的随机数R和当前鉴别口令H(K(pw)||R)。然后取出随机数R,利用共同的密钥K加密计算得出b=K(a||R),b作为挑战传给客户端。
3)客户端解密DK(b),得出a和R,并用公共的密钥K加密口令pw,得K(pw),然后连同传来的随机数R做一次散列计算c=H(K(pw)||R),将结果与a进行比较,如果两者相等说明通过验证,进行后续验证,若不相等,则终止与服务器的本次会话。
4)验证通过后,客户端产生一个随机数R,然后和密码口令K(pw)再做一次散列计算得d=H(K(pw)||R),这将是新的鉴别口令,将d和R做一次散列计算得e=H(d||R)(e为常量),然后将散列结果连同生成的随机数R。及当前鉴别口令d用公共的密钥K进行加密得f=K(e||d||R),将f传给服务器端。
5)服务器端将f解密DK(f),得出d=H(Kpw)||R)、e(常量)和R。然后将存储在服务器端上的鉴别口令连同分离出来的随机数R做一次散列计算得到H(a||R),其中,a为H(K(pw)||R),将散列结果与客户端传来的e(e=H(d||R))进行比较,若相等,则验证通过,用户身份得到验证,若验证失败,则结束本次与用户的会话。
6)将本次鉴别口令d替换原来的鉴别口令a,即a←d,将备份的随机数R替换为当前的随机数R,即R←R。
3.2.2 种方案的比较分析
S/KEY密码系统能够有效地抵抗重放攻击,由于每次散列函数运算不同,每次传输口令并不相同,对于截取到的口令,攻击者无法再次使用,因此有一定的安全性。但由于每次认证时迭代次数就要减1,因此每过段时间用户就必须重新注册,很繁琐;并且S/KEY最大的弊病是不能有效防止小数攻击,使攻击者有机可乘。而经过改善的基于Rabin密码机制的一次性口令身份认证方案能有效地弥补这个漏洞,其优点如下:
(1)不用设置迭代值,用户不要每隔一段时间重新初始化,便于用户使用。而且Rabin是基干e=2的RSA,具有较高的运算速率。
(2)能够有效地克服当前基于散列一次性口令认证方案难以抵抗小数攻击的弱点。
(3)实现了双向身份认证,客户端和服务器端都要通过相互之间的验证,有效地克服了S/KEY缺乏完整性保护机制的弱点,避免攻击者注入虚假信息、修改输入过程中的鉴别数据、修改口令等问题。
(4)用户口令只在客户端输入一次,通过加密后将散列结果在网络上传输,因为散列函数具有单向性,防止重放攻击,所以有效保证了安全性。
(5)用户每次产生的随机数不同,认证通过后存储在服务器上的信息也不同,有效防止重放攻击。
(6)由于采用了Rabin密码系统,基于数论中求和数模平方根问题的困难性,因此保证了其安全性。
4 形式亿分析
SVO逻辑是目前较完善的BAN类逻辑语义分析系统,用它分析密码协议是当今较流行的一种方法。本节将介绍SVO逻辑的相关知识,并用SVO逻辑对本文的改进认证协议进行形式化分析。
SVO逻辑系统由2条推理规则和20条基本推理公理组成。
2条基本的推理规则如下:
SVO逻辑的推理公理如下:
(1)信任公理(believing)
应用SVO逻辑分析认证协议一般有3个步骤:(1)给出该协议的初始假设集合,即用SVO逻辑语言表示各主体的初始信念、接收到的消息、对所收到的消息做出合理的解释和理解;(2)给出该协议可能或应达到的目标集,并用SVO逻辑形式化描述出来;(3)分析、推理、证明,考察利用初始假设是否经过有限步的推导得到步骤(2)所希望达到的目标结论。下面用SVO逻辑方法分析该协议是否满足实体认证目标(G2.Entity authentication):A believes B says F(X,Nu)。首先给定初始假设(用户端为U,服务器端为A):
推理过程如下:
(1)由假设P2、P5、公理Ax1、Ax8、Ax10及Nec,MP得出:U believes U sees K;
(2)由推理1、假设P2、P5、公理Ax1、Ax8及Nec,MP得出:U believes U received a;
(3)由推理2、假设P6、公理Ax1、Ax3及Nec,MP得出:U believes PKa(A,K);
(4)由推理2、推理3、假设P3、P7、公理Ax2、Ax4及Nec,MP得出:U believes A said a;
(5)由推理4、假设Ax1、Ax17、Ax18、Ax19及Nec,MP得出:U believes A says a。
通过以上的分析,该协议满足实体认证目标(G2.Entityauthentication)——A believes B says F(X,Na),通过认证后,U认证了主体A的身份。上述过程是客户端U对服务器端A的身份认证进行的形式化分析,服务器端对客户端的身份认证分析过程与此类似。
5 结束语
本文设计了SaaS应用系统下一种新型的基于Rabin密码体制的一次性口令身份认证方案。该方案基于Rabin密码技术,利用求模合数门平方根问题的困难性提高运算安全性;并且实现了客户端和服务器端的双向身份认证,可以有效地抵制口令窃听,重放攻击、小数攻击等。SVO逻辑证明该协议达到预期的安全目标。
CIO之家 www.ciozj.com 公众号:imciow