APP下载

基于RSA算法的域名保护系统的研究与设计

2020-07-20张海阔湛雅倩徐明华

计算机工程与设计 2020年7期
关键词:用户名域名口令

陈 红,张 雷,张海阔,湛雅倩,徐明华

(中国互联网络信息中心,北京 100190)

0 引 言

域名系统(domain name system,DNS)是互联网中的基础设施,在互联网中发挥着重要的作用,负责将人们输入的域名指向复杂难记的IP地址,即完成域名解析的任务[1,2]。在互联网的应用中,绝大多数的互联网应用都是通过域名访问的,所以保证域名的数据安全,对维护中国互联网络的安全有着至关重要的作用。现有的域名保护系统,登录系统后可直接添加需要保护的域名,从而达到保护域名保护网站的目的,但是,单认证的操作方式有可能被暴力破解,因而存在很大的数据风险。为了解决该问题,通过研究双因素认证方法、TOTP算法、RSA算法,提出了基于RSA算法的域名保护系统,通过阈值控制暴力破解的风险,通过RSA算法加强双因素认证算法的安全性。并经过大量的测试,通过对比测试数据分析得出,该系统设计与实现可以解决当前域名保护系统的安全问题,对提高域名数据安全,提高网络安全有着重大的意义。

1 背景及现状分析

现有域名保护系统为单因素验证模式,系统实现如图1所示,用户通过用户名、密码、验证码登录域名保护系统后即可对域名进行保护申请、撤销等操作,系统内部会对该域名的注册时间、过期时间等条件进行校验,校验通过后,提交成功;内部审核人员使用管理员的账号登录该系统进行审核操作,操作成功后,该域名的保护正式生效;定时job等也由该系统一并实现。

图1 域名保护系统现有实现

现有实现中,普通用户和审核人员均采用同一入口进行登录,登录成功后即可进行权限内的所有操作。该方式存在显而易见的安全问题,黑客可以通过盗取数据库、暴力破解等手段获取到用户名、密码,可以对域名保护数据任意操作,还可以以审核员的身份对其审核操作进行任意操作,从而威胁到整个系统服务及数据的安全。

由此可见当前系统的单因素校验模式存在的弊端很明显,故本文中增加了双因素认证的方式,即用户通过用户名、密码登录后,对域名进行操作时仍需要通过二次身份认证才可进行域名保护申请等操作。

关于身份验证,目前主要有以下几种方式:

(1)短信验证码;

(2)生物特征验证方式,例如指纹、人脸识别、虹膜等;

(3)动态口令卡,例如工商银行的电子银行口令卡,每次根据口令刮开对应位置的涂层获取密码;

(4)动态令牌,例如RSA SecurID以及QQ软令牌等[3,4]。

对比以上几种方式:

(1)短信验证码方式价格高,点击发送短信验证码后,偶尔由于环境或者其它原因导致验证码接收不及时,且SIM卡可以克隆,容易被拦截和伪造;

(2)基于生物特征的验证方式对设备要求比较高,价格昂贵,而申请域名保护一般在PC端操作,并不适用;

(3)动态口令卡的安全性一般,且需要随身携带,不方便;

(4)动态令牌,基于硬件的动态令牌同动态口令卡一样,存在需要随身携带的不便,且成本较高。

故我们选择软令牌即电子口令,基于手机的电子口令有成本低、安全性高、更易用等特点[5]。本文采取OTP(one-time password algorithm)技术实现。

动态口令OTP(one-time password),即一次性密码,是一种重要的双因素(2FA)认证技术。其基本原理是认证双方共享密钥,使用该共享密钥对某一个事件计数、或时间值、或异步挑战数进行加密算法计算,之后比较计算值是否一致,从而进行认证[6,7]。其中HOTP(an HMAC-based one-time password algorithm)是基于事件的一次性密码的生成算法;TOTP(time-based one-time password algorithm)是基于时间的一次性密码的生成算法,也是HTOP算法的改进算法[8]。

现在流行的TOTP实现原理如图2所示,对时间、密钥以及用户名等信息进行加密后再经过截短函数处理得到一次性动态码,TOTP中加密算法采用杂凑算法实现。以有限长度的数据值来表达不限长度的信息,理论上讲,一定会有冲撞情况发生,被破解只是时间问题。

图2 TOTP实现原理

2 域名保护系统设计

域名保护系统旨在将需要保护的域名进行加锁保护,加锁保护后,将域名设置为禁止删除、禁止更新、禁止转移的状态,从而避免域名被恶意删除、更新、转移。

该域名保护系统的使用对象为注册商,即域名注册服务机构,域名所有者可向注册服务机构申请该业务,由注册服务机构通过该系统进行申请,为了保证数据的安全性,注册服务机构提交申请时需要进行身份认证。根据不同用户的不同安全需要,设有标准版域名保护和高级版域名保护,其中申请标准版域名保护时只对注册服务机构的身份进行认证,而申请高级版域名保护时不仅需要对注册服务机构进行身份认证,还需要对域名所有者进行身份认证,即在域名持有者确认的情况下才能进行操作。

域名保护系统的系统架构如图3所示,包括3个服务:

(1)域名保护申请服务,包括以下几个模块:①权限管理模块;②域名保护模块,包括标准版域名保护申请、高级版域名保护申请、标准版域名保护管理、高级版域名保护管理功能。用户通过输入域名名称、保护年限、动态口令后点击提交,系统后台会调用身份认证服务的动态码校验接口,检查用户输入的动态码和服务器产生的动态码是否一致,校验都通过后保存至数据库的待审核表中。临时撤销操作将域名的保护状态临时取消,方便用户进行更新或者转移操作,操作后再恢复保护状态。这样既能保证域名数据的安全,又不影响其正常使用和操作;③个人口令管理模块。

(2)身份认证服务,包括:①电子口令的管理;②APP 生成动态码功能,包括每周定期向服务器请求新的密钥,根据私钥对密钥进行解密得到真正的密钥,通过TOTP算法计算得到动态码;③服务器动态码模块,定期根据具体用户信息等生成新的密钥,并对密钥进行RSA算法加密。根据不同用户名、静态密码和密钥通过TOTP算法生成动态码。对外提供动态码校验的API接口服务,供域名保护模块调用。

(3)域名保护审核服务,审核员登录该系统后,可以对域名保护业务申请进行审核,审核通过后域名保护正式生效;定期统计功能;定期清理逾期的域名保护。

图3 域名保护系统架构

其中,以上3个服务中每个服务又分为两个子服务,web服务和service服务,即本系统共包含6个子服务:protect-web,protect-service,admin-web,admin-service,job-web,job-service。其中各web服务包括CSS,JSP,JS,图片等静态资源以及负责和外界进行交互,获取用户的请求,将请求封装后提交给对应的service服务进行处理。service通过REST API 的方式对web提供相应的资源,web再将结果返回给用户。

REST(representational state transfer)是Roy Fielding博士2000年在他的博士论文中提出来的一种软件架构风格,可以降低开发的复杂性同时提高系统的可伸缩性[9,10]。

service服务所在的服务器只允许固定IP的服务器访问,例如web,以及数据库,对外进行物理隔离,这样在物理上保证了域名保护系统服务和数据的安全性。

2.1 身份认证设计

虽然用户申请域名保护业务需要先登录域名保护申请服务,但是,基于用户名和静态密码的登录验证是很容易被劫持和破解的,为了增加域名数据的安全性,用户申请域名保护时,增加了身份验证逻辑。用户申请时,除填写需要保护的域名信息外,还需要根据申请的电子口令APP获取动态口令,以和身份认证服务端的口令进行匹配,来对身份进行校验。身份认证的设计,极大的保证了系统操作的安全性[11,12]。

图4为APP端到认证服务器的交互过程。

图4 身份认证过程

(1)用户首次拿到域名保护申请业务资质后,安装APP,并通过扫描二维码的方式将用户名、静态密码以及密钥(私钥)等数据导入APP。第一次使用APP时,根据用户名和静态密码向服务器请求TOTP算法的密钥。

(2)根据系统设置,每周定期向服务器请求最新的密钥,服务器也会每周生成新的密钥key,为24字节的随机值。

(3)服务器根据用户名和静态密码获取该用户对应的密钥key1(key1为服务器端使用公钥对原始密钥key经RSA算法进行加密后的结果,key值由服务器每周定时使用伪随机算法生成),返回给APP端。

(4)APP端使用私钥对密钥key1解密,获取key。

(5)APP每隔一分钟生成一次动态码,根据时间戳,用户名+静态密码+key,经TOTP算法处理后得到一个8位数字的动态码。

(6)PC端拿到APP端的动态码,发送用户名和动态码到服务器认证。

(7)服务器首先会根据用户名来查看之前的错误验证次数,判断这个动态码验证失败的次数是否达到预警值,或者该电子口令验证失败的总次数是否达到预警值,如果其中一项达到预警值则视为口令异常(可能遭遇破解攻击),禁用该电子口令。

(8)如果均未达到预警值,将动态码和服务器端生成的动态码进行比对看是否匹配。如果匹配失败将该动态码验证失败次数加1,该电子口令的验证失败总次数+1。如果成功,失败次数清零,返回结果。

传统的身份验证方法仍有可能会被暴力攻击等破解,本文针对该风险,增加了步骤(2)~步骤(4),对TOTP算法中的密钥经过加密后再传输,并定期更新,保证了密钥的安全性,增加步骤(7)的校验,有效阻止暴力破解。电子口令被禁止后只有导入新的用户信息及密钥(私钥)方可继续使用。

2.2 动态口令设计

本文实现的TOTP算法流程如图5所示:

(1)根据2.1文中得到的密钥key1,使用APP本地的私钥d,对key1进行解密,得到密钥key值, key=fun(key1,d);

(2)将用户名+静态密码+key组成新的字符串值key2,根据当前时间的毫秒值与初始值(可选时间,取其毫秒值)的差值,除以时间间隔一分钟即60 000,并转换为16进制字符作为时间值time;

(3)使用SHA-512算法,对key2和time进行加密,加密后经截短函数处理,得到最终动态码, code=trunc(encode(username+pinPw+key,time)), 其中encode函数即为加密函数,trunc为截短函数,将加密后的串经过截短处理得到动态码。

图5 TOTP算法实现

TOTP算法实现中,使用的SHA-512算法属于哈希算法(也叫杂凑算法),哈希算法是将任意长的输入信息转换成固定长的输出串,即杂凑值。哈希函数为不可逆处理,所以很安全。但是理论上来讲,由限制长度的哈希算法来计算没有长度限制的输入信息,必然会有冲撞情况,所以随着公开时间的增长,MD5,SHA-1已经可以通过碰撞破解[13]。本文采用SHA-512算法,该算法的杂凑过程较之前者更复杂,且其杂凑值更长,并且本文对密钥进行了RSA非对称加密,保证了密钥的安全性,增加了破解的难度。

2.3 RSA算法

RSA算法是1977年提出的一种非对称加密算法,被广泛应用于电子商业中,其安全性依赖于大整数的因数分解的困难性[14]。

RSA包括公钥,私钥,加密算法,解密算法。

(1)公钥的产生过程:①首选选取两个互为质数,并且两个足够大的素数p,q,这两个素数是保密的;②计算n=p*q, n是可以公开的;③计算fun(n)=(p-1)(q-1), fun(n)是保密的;④找一个与fun(n)互质的数e,且1

(2)私钥的产生过程:根据d*e≡1mod(fun(n)), 计算得出私钥值d。

(3)加密的过程:假设需要加密的明文为m,加密后的密文为c。则计算过程为: c≡me(mod n)。

(4)解密的过程: m≡cd(mod n)。

根据RSA的算法描述,我们清楚的认识到,足够大的素数是保证算法安全性的关键,所以在本文中,我们采用1024位的密钥,即n为1024位,对TOTP中所用的密钥进行加密后再传递给客户端。

3 域名保护系统分析

3.1 易用性

基于RSA算法的域名保护系统,在用户操作时增加了动态验证码的输入操作,用户在输入需要保护域名的相关参数后,需打开手机输入当前的动态口令提交即可。相较于以前的域名保护系统,只是增加了一个动态码参数的输入。采用手机电子口令的方式,对于用户来说,不需要额外携带口令设备,比较方便。

3.2 易扩展

本文采用REST分布式部署,分层系统,简化了服务的复杂性,同时提高了其可扩展性。可根据具体情况对具体服务进行扩展,充分利用服务资源。

3.3 安全性

(1)本文中所用的TOTP双因素认证方法,采用SHA-512或SM3算法对时间值以及用户名、静态码等进行加密,根据实际情况,本文对SHA-512或SM3算法进行了碰撞测试,系统中每周都会生成新的加密密钥,这里我们只对一个周期内的密钥进行测试,即密钥参数固定,测试参数见表1。

表1 测试参数

密钥、用户名、静态密码保持不变,变动的只有时间戳的值,即随着时间的变化不断增长。首先进行转码位数为6位时SM3算法和SHA算法的碰撞次数及碰撞概率测试。得到的测试结果见表2和图6。

表2 SM3和SHA算法碰撞测试结果(6位转码)

图6 SM3和SHA算法碰撞测试结果(6位转码)

根据表2和图6中的结果,我们看到SM3和SHA-512的碰撞次数是没有太大差别的,但是SHA-512算法得到的动态口令碰撞次数要稍低于SM3的碰撞次数,所以我们采用SHA-512函数实现TOTP算法。

测试结果中,当测试次数达到百万级别时,碰撞率很高。接下来基于SHA-512函数对转位码为6位和8位分别进行碰撞测试,表3和图7是基于SHA-512函数的碰撞测试结果。

表3 6和8位动态码碰撞测试结果(SHA)

图7 6位转码和8位转码碰撞概率对比

由表3的结果以及图7可以看出,转码位数为6位和转码位数为8位,在碰撞概率上相差不止一个数量级,在测试次数到达一百万的时候,转码位数为6位的碰撞概率达到了50%左右,而转码位数为8的碰撞概率只有0.5%左右,所以本系统中使用8位转码生成动态码以减少碰撞概率,提高TOTP算法的安全性。

根据表3中的测试结果,8位转码在一万次及以下碰撞的几率基本为0,随着次数不断增加,发生碰撞的次数和概率也在增加,在测试次数达到10万次的时候,发生碰撞的概率为万分之六。按照本文系统实现,每隔1周时间会生成一个新的用于生成动态码的密钥,一分钟生成一个动态码的情况下,1周共计生成43 200个动态码,发生碰撞的概率为:0.016 203 7%,即不到万分之二的碰撞概率,已经可以满足本文中实际操作的安全性要求。

(2)本文增加了一次性动态码验证时错误次数的预警值,当一个用户的口令不停进行校验并且错误次数超过预警值时,将该口令禁用,有效防止了暴力破解的可能性。

(3)对TOTP中用于生成动态码的密钥进行RSA非对称算法加密,并定期更新,确保该密钥的安全可靠,且增加了破解的难度。

(4)系统中采用web和service服务分布部署,实行了物理上的隔离,进一步保障了系统的安全性。

4 结束语

本文采用了改进的动态口令技术,使用RSA非对称加密算法对动态口令的密钥进行加密,同时增加预警值设置以及定期更新密钥的逻辑,增强了动态口令的安全性,保证了域名保护系统的操作安全可靠。同时,域名保护系统的各个服务划分为web和service子服务,分布部署,这样从物理上保证了数据及服务的安全,进一步保证了互联网的域名数据安全。本文提到的身份认证方法可推广至其它领域的web服务中,提高服务的安全性及可扩展性。

猜你喜欢

用户名域名口令
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
高矮胖瘦
口 令
Combosquatting域名抢注的测量研究
如何购买WordPress网站域名及绑定域名
机智的快递员
好玩的“反口令”游戏
健身气功·五禽戏教学口令