基于MD5加密的身份认证系统研究
2022-12-06李可石兆军周晓俊郭珂琪
◆李可 石兆军 周晓俊 郭珂琪
基于MD5加密的身份认证系统研究
◆李可 石兆军 周晓俊 郭珂琪
(北京计算机技术及应用研究所 北京 100854)
近些年,信息化社会越来越发达,上网已经成为人们的日常。同时,网络上传输的信息也越来越多。随着信息泄露、信息被恶意篡改等网络安全问题的暴露,人们对自身信息的安全保护需求更加强烈。如何确认进行交谈的对象、保证密码不被泄露是人们所担心的问题,因此对密码合理保存颇为重要,通常使用加密或者信息摘要的形式保存。本文介绍IntelliJ IDEA、Eclipse开发工具以及Mysql数据库,并对MD5算法进行介绍以及算法安全性分析,采用Hash函数MD5算法加密的方式与数据库数据比较,进行身份的验证,同时实现统一身份认证。
MD5;身份认证;单点登录;Abstract
1 前言
1.1 研究背景
虽然近些年发展迅速,但是生活中依然能看到许多盗版网站,甚至包括即使有些正版官方网站都使用明文存储密码,贪图方便,减少成本。一旦出现数据库泄露等安全问题,会带给用户极大的损失。所以用户密码如何安全存储,Hash函数作为密码学中一个经典的理论范畴,在实际生活中具有良好的应用型优势。经典算法包括MD系列和SHA系统,而MD5算法是Hash函数中典型的算法之一,能将任意消息长度的信息转为固定128bit长度的一个摘要。因此Hash算法在数据存储方面具备得天独厚的优势,并且在校验完整性以及数字签名、身份认证方面都发挥着不错的效果。因此,对MD5算法的研究具有重大的借鉴意义。因此将Hash算法和CAS合理的结合起来,有利于人们在进行身份认证过程中更加安全也更加方便。相信随着技术的再进步,会有更多、更加优秀的身份认证方式出现,给人们信息安全方面带来更多福音。
1.2 国内外研究现状
近年来,随着科技的高速发展,信息安全技术得到一定的进步,在密码学方面也有许多进展。从最初二十世纪七十年代末,Hash函数在密码学领域得到应用,人们开始对Hash函数进行研究。目前,对Hash函数的探索集中在两个方面:一方面是对已有的Hash函数进行攻击的研究,另一个方面是如何设计出一个更加安全的Hash函数的研究。1992年,Rivest在MD4算法的基础上设计出了MD5算法,MD5算法的安全性能比MD4算法的安全性高,该算法的Hash值的长度以及填充准则与MD4算法是完全一样的。因此,在那个计算机性能较差的时代,MD5可以称得上值得信赖的算法之一。在那段时间内,有许多科学家研究员都希望能通过不断的探索来对MD5进行一个突破,找到相应规律,对其实现破解。直到2004年,出身在中国的王小云提出了关于MD5算法碰撞的策略。这个策略方法经过她与团队多年的努力,能在已知明文的情况下,更快、更有效的找到一个能与明文产生一模一样Hash值的另一个不同的信息。这一发现彻底的说明了Hash函数MD5算法是存在一定的安全隐患的,也由于证明了MD5算法的抗弱碰撞性存在问题,NIST在2007年开始征集更加安全的Hash算法。虽然MD5算法被证明存在一定的安全问题,但是在之后出现的SHA系列等Hash函数均有MD5算法的影子。因此对MD5算法的研究更加重要。
现阶段,各方提供了多种身份认证方式与机制。在其中非常常见的几种认证方式有:生物特征识别、用户名与密码、短信密码、数字签名等。其中用得最多的还是属于用户名与密码体系。如今,由于小程序以及网站的发展,各种系统层出不穷,其中有许多系统属于同一公司、同一部门或者同一机构,它们有着不同的登录系统界面,用户每次进行登录时,通常需要多次输入相同的用户名与密码,虽然在一定程度上提供了安全性,但这也带给用户不太好的体验和诸多不便。而统一身份认证属于身份认证行列之一,提供了SSO(Single Sign On)单点登录的功能,也就是说用户在进行了一次登录之后,在有效期间内,无需重复认证就能直接登录相关的受信网站。这种方式能有效解决该问题。包括微软的Passport,但是它的安全性没有得到保证,并且因为技术不公开,有一定的垄断性。由于我国的IT技术在身份认证领域发展起步晚,相对落后,导致现阶段所用产品大多数都是国外的,国内几乎没有比较成熟的产品出现。而其中比较典型的CAS框架因为本身配置简单、开源、能实现跨域且安全性较好等特点受到广泛的关注。
2 系统的开发平台以及相关技术
2.1 系统开发平台及工具说明
(1)IntelliJ IDEA:是一款以Java语言开发的集成环境,支持HTML、CSS、Mysql等。具有智能编码、历史记录功能、灵活排版以及完全支持JSP等优点。
(2)Eclipse:是一个开源的、基于Java的可扩展平台。支持许多插件,其中就包括WindowBuilder可视化插件。
(3)MySQL:是一个由瑞典MySQLAB公司开发的当下最流行的数据库管理系统之一。使用SQL语言,体积小、速度快、总体成本较低、开放源代码等都是该数据库的优势。
(4)Tomcat:该服务器具有开源代码的特点,并且适合人们在进行测试的时候进行本地搭建。作为一种轻量级的服务器,适用于同时访问人数较少的情况下使用。
2.2 MySQL数据库具体介绍
MySQL数据库的特点:查询速度较快、体量小、开源免费、占用空间小、经济成本低以及支持SQL语言等。这些都是MySQL令人青睐的重要原因。Mongodb数据库,该类数据库属于分布式存储的方式,没有固定的格式,基于索引查询,存储方式是JSON。显然,本研究使用用户名与密码的身份认证方式,有着固定的格式要求,采用MySQL数据库更加合理。同时,因为可以使用jdbc对数据库进行连接。这样的话,可以让人们在对数据库的数据改变时更加的简单明了,而且更多开发平台都支持jdbc的使用。
3 关键技术与系统概述
3.1 MD5算法介绍
MD5算法作为哈希算法中非常经典的算法之一,是经过许多科学家、研究人员多次改进之后得到的一个在当时较为满意的算法,接下来,将会对该算法的发展背景与具体实施步骤进行相应介绍。
3.1.1 MD5算法的发展及特点
MD5算法是被人们广泛使用的密码散列函数的经典算法之一。适用场景较多,此算法隶属于MD系列算法的一员。MD5算法将一个任意长度的信息压缩成固定比特数的格式,这极大地提高了对信息的存储效率。 MD5算法类似于SP网络中的扩散作用。因为信息摘要算法可以算是一种压缩算法,由于原有信息长度为无限(任意)长,最后得到的摘要的比特长度一般来说是小于原有信息的长度。在信息摘要算法中,即使知道了摘要信息,想要确定地反推回原文是很难的,具有不可逆性。MD5算法的填充方式与得到的哈希值的长度均为128比特,但是产生冲突的概率没有理想中的那么优秀,于是,MD5算法横空出世,在MD4算法的基础上,多增加了一轮迭代,变成四轮,在将近十几年的时间内,MD5的是相对安全的。
3.1.2 MD5算法原理描述
(1)消息填充。首先,对于任意长度的原文信息转为二进制,并且需要进行消息填充,其中因为需要使用64比特用来记录该信息原文的长度,采用二进制的方式进行存储。加上使用的64比特外,需要将原有消息比特数填充至512的倍数。
(2)把原有信息的长度化为二进制加入到已经填充的消息末尾。使用64比特,采用小端存储的方式用来表示整个原文消息也就是被填充前的长度。小端方式是指根据信息数据的最低有效字节优先的顺序存储数据的方式。如果消息长度大于264,那么将会以264为模进行取模处理。
(3)对MD缓冲区初始化。在一开始初始化一个初始向量,记作IV,该初始向量由4个寄存器组成,每个寄存器长度均为32比特,IV的总长度为128比特。并且每个寄存器都采用小端方式进行数据存储,并且使用的是十六进制来保存,对每个寄存器都赋予一定规定好的初始值,寄存器分别记作A,B,C,D,并且每个小组之间需要一个CV链接变量。
(4)需要对信息进行分组处理。将填充过后的信息每512比特都分成一个小组,每个小组都有16个字(一个字包括32比特)。
(5)对每个小组通过压缩函数进行4轮、每轮16步的迭代压缩。在一开始,先建立一张常数表T。T一共有64个不同的元素。比如在T常数表中的第k个元素T[k]的值就是232*abs(sin(i))取整,并且采用十六进制来表示。每轮的压缩函数并不相同,每一个分组都会经历4轮一共64步的运算,经过若干分组的操作后,会最终得到一个长度为128比特的信息摘要。这就是MD5值。
3.2 CAS介绍
3.2.1 SSO单点登录
SSO作为一种登录体系基于统一身份认证系统,通常需要有多个角色,一个统一的认证中心,还要包括若干个相互信任的应用平台。这些平台的身份认证都会统一在认证中心进行一次认证,一般来说会使用每个系统相互承认的、共同的一部分数据在数据库进行验证,校验了用户的身份,如果没有通过,不会允许用户使用应用。反之,通过验证后,通常是采用生成一个ticket的形式,让用户拥有该票据,并且该认证中心会发送一段消息用来告知其他受到信任的平台该用户是否拥有访问应用的权限。SSO经常是建立在Web应用服务之中,因此不只是进行身份验证工作,还需要进行访问控制,会搭建一个拦截工具,让想单独访问相关应用系统的用户,必须要经过认证中心这一关卡。综上所述,Web单点登录的主要模块需要有担保服务模块使用SAML认证声明、认证模块负责身份的验证、身份映射模块等等。
3.2.2 CAS原理
CAS的原理机制是基于单点登录进行开发的。从结构上,CAS包括服务端和客户端两个部分,服务端需要单独部署。如果是Web应用,将会在客户端的web.xml中配置相应的过滤器。该过滤器会判断该用户是否具有访问应用的资格。若没有权限,就会重定向到服务端弹出一个登录界面进行验证。CAS的认证方式为:首先,如果用户想要通过浏览器访问客户端也就是一个应用服务,那么该客户端会通过过滤器对用户进行认证。若用户没有登录过该系统,那么客户端会发送302并且携带一个service参数将重定向至服务端,除此之外,附加service的原因在于需要在服务端进行验证后重定向到客户端的URL。紧接着,会弹出登录窗口界面,在服务端会进行一次身份验证。通过验证以后,服务端会生成一个ST和TGT,并且会Cookie里面生成一个TGC通过SSL的方式传输给用户。并且会暂时将ST票据显示在网址中。然后重定向到客户端,客户端看到一个传来的ST票据,就会想要验证ST票据的真实性以及是否有效。然后把ST送到服务端再次进行确认,最后服务端再传一个用户相关的信息凭证。这样,一次CAS统一身份认证完成。
3.3 伪随机数
随机数的产生与应用在信息安全领域应用面很广,通常用来防止重放攻击,用于身份认证机制的一部分。其中较为典型的就是会话密钥。随机数是一组不能被预测的数字或符号序列,这些数字与符号是完全偶然产生的,几乎可以说找不到它们的相关规律性。但是由于是通过计算机固定算法得到的随机数,因此这些数不能完全被称作随机数。随机数一般来说需要保证数列中在规定的数字范围内出现每个不同数字的概率是相等或者相近的。并且还需要确保数列中每个任意的数都不会因为其他数字已知而推导得出,也就是找不到它们之间的关联性。随机数具有不可预测性。就是说在数列之后的数不应该会被前面的若干个数猜测到。在现实生活中,真正的随机数几乎很难得到,所以网络安全方面我们一般采用的是伪随机数。虽然会受到固定算法的影响,但是算法只要通过了随机性的检测,那么就可以说这个是一个随机性良好的算法,现在使用最多的是用线性同余算法产生伪随机数列。
4 系统实现以及检测
4.1 MD5算法设计与分析
4.1.1 MD5详细步骤以及代码实现
对MD5算法进行初步分析,发现在不进行填充的部分可以优先使用MD5哈希算法处理,得到的结果不影响后面的运算结果。因此,可以调整MD5算法通常的步骤程序。
(1)首先介绍MD5算法核心的压缩函数部分。每个小组都将进行4轮每轮16步的压缩。
其中包括了在第i轮第j步所经过的逻辑函数g、T常数表、选字以及循环左移包括与寄存器B进行模232加法运算。判断是否还有需要继续进行哈希的小组,进行迭代处理。
(2)填充阶段。此时需要判断需要用来存储原始信息长度的64比特是否能够在加入最后一个小组后依然能有空位。然后针对不同情况进行不同的填充处理。若加入8个字节之后仍有空余,就会直接进行填充10000.没有剩余空位,会有两种情况,一种是刚好只有1比特存留,一种是只有0比特存留,因为填充规则规定必须要起码填充一位1字符,然后后面可以继续加入若干个0字符,那么就需要根据两种不同的情况分开处理。
(3)分组阶段与字节合并。分组阶段可以通过字节来进行分组也可以通过比特进行分组。因为512比特正好是64个字节,本次是通过字节的方法来进行分组,在进行压缩函数前,需要对每4个相邻的字节进行合并。形成16个32比特的字。以供压缩函数的选字操作使用。
(4)删除符号位。在进行字节分组的时候,因为采用Byte,是一个带有符号位的整数。这会影响我们进行相关操作,尤其是在进行字节数组合并的时候。所以我们要对符号位进行删除。
(5)输出结果。
(6)验证代码的正确性。我们使用到了一个MD5加密的网站,该网站致力于创建一个大型数据库,用来记录MD5 8算法原密文对,试图通过撞库的方式,进行MD5破解。使用123456、abcdefgh以及shuodhsoudnasucus@#fjsi随意输出的数据进行简单的验证。
4.1.2 MD5完整性测试
本研究采用MD5对传输的数据以及数据库数据的完整性进行校验,若数据不完整则不允许登录。因此,为了检验与分析MD5算法在验证数据完整性方面的特性,采用了对文件数据进行MD5加密,然后做出一个微小变动,观察MD5值的变化以及分析MD5的作用。
5 结论
近些年,人们对自身信息的安全保护需求更加强烈。如何确认进行交谈的对象其安全性、保证密码不被泄露是人们所担心的问题,因此对密码合理保存颇为重要,通常使用加密或者信息摘要的形式保存。访问网站以及系统登录时,通常需要进行身份认证,但是登录不同的系统需要输入不同的用户名和密码。这样不仅操作烦琐,而且导致用户需要记住大量的信息,本文介绍基于MD5算法加密的身份认证系统采用Hash函数MD5算法加盐的方式与数据库数据比较,进行身份的验证,同时实现统一身份认证,解决了用户的麻烦。
[1]洪丹丹,罗军峰,冯兴利,等.基于RSA与MD5签名的实名制微门户设计[J].微电子学与计算机,2016,33(09):36-41.
[2]许永达.基于MD5和RSA算法的网络考试身份认证方案设计[J].广东石油化工学院学报,2013,23(03):52-55+68.
[3]喻谦. 基于MD5算法的用户身份认证系统研究[D].华北电力大学,2013.
[4]郑之华.MD5算法在统一用户管理系统中身份认证的应用[J].齐齐哈尔大学学报(自然科学版),2012,28(02):76-80.