一种基于MD5算法的Web,Service接口身份认证方法概述
摘 要 随着互联网技术的不断发展,跨平台和跨系统间的数据共享和数据通信应用也越来越广泛,在目前的实际应用中最常用的就是通过Web Service接口方式来实现。为了保证数据的安全性,在Web Service调用访问中必须要对调用方的身份进行认证。本文提出了一种基于MD5算法的Web Service接口身份认证的方法,并从声称方和认证方两个角度进行了详细的说明。
关键词 信息安全;身份认证;MD5;Web Service接口
引言
随着信息技术和各行业软件系统的发展,信息安全在各个行业中都占有特殊的地位,安全不容忽视,在政府、金融、航天、军事等领域信息安全管理要求也会比一般的行业高,信息安全已纳入到各行业的日常经营和生产中,各行业的企业也相应地制定了信息安全标准和要求。
身份认证是国家信息安全标准的主要考核指标之一,作为信息安全的最重要一个环节,它可以防止信息泄露、越权访问、破坏销毁数据,身份认证是一种最有效的方法,它可以最大限度地保护系统和数据的安全。
1 基于MD5的Web Service接口身份认证的方法
1.1 MD5算法原理
MD5算法原理和其他信息摘要算法一样,要对信息进行补位处理,然后将得到的字符串以512位来经行分组,每一分组又划分为16个32位二进制数的子分组。算法的输出将四个32位分组级联成一个128位的哈希值。
具体操作如下:首先填充信息使其长度加上64可以整除512。填充方法是在信息后面附一个1,后接多个0直到满足长度要求,然后再附上64位的二进制数,表示填充前信息的长度。完成这两个步骤,得到的字符串长度恰好是512位的整数倍,同时确保信息在填充后的唯一性,MD5算法有四个32位的变量。以十六进制表示,初始化为:A=0x01234567;B=0x89abcdef;C=0xfedcba98;D=0x76543210;ABCD被称为链接变量(Chaining Variable)。接着进行四轮算法主循环,循环的次数是信息中512位信息分组的数目。先将链接变量复制到另外的变量中:A到a,B到b,C到C,D到d。第一輪循环包括16次操作,每次操作对abcd中的其中三个变量作一次非线性函数运算,然后将所得结果加上第四个变量、信息的一个子分组和一个常数。将所得结果向右循环移位一个随机的数位,并加上abcd中的一个变量。最后该结果存入a,b,c或d之一变量中[1-4]。
1.2 基于MD5的Web Service接口身份认证的方法
下面通过URL传值方式来说明基于MD5的Web Service接口身份认证方法的设计和实现过程。
URL格式定义如下:
http://域名或主机地址?Method=***×tamp =***&app_key=***&sign=***&CID=***
其中各个参数说明如下:
参数参数说明类型约束
method相关的业务接口名称,如订单取消的请求,method= order.cancel字符串必须
timestamp时间戳,格式为yyyy-mm-dd-HH-mm-ss字符串必须
app_key由认证方分配给声称者(即请求方)的Key字符串必须
sign根据url和密钥计算的结果字符串必须
CID认证方颁发给用户的ID字符串必须
body代表要提交给Method方法的数据,用请求中的body数据代替字符串可选
secret由认证方统一分配给声称者,用于数据加密,确定数据的起始位置字符串必须
(1)声称方(请求方)工作流程
第一步:准备MD5加密的源文字符串
接参数名与参数值,并在首尾加上secret,按以下顺序连接参数名和参数值
secret+app_key+值+CID+值+method+值+timestamp+值+body值+secret
假设secret=test,app_key=testkey,CID=123,
method=order.cancel,timestamp=2018-01-15-09-20-07由MD5加密前的源字符串S为以下:
S = testapp_keytestkeyCID123methodorder.canceltimestamp2018-01-15-09-20-07bodytest
其中body用请求中的body数据代替,body数据可以通过XML格式来定义和描述,可以通过以下XML格式来定义body数据。
<?xml version=”1.0” encoding=”utf-8”?>
<!--仓库代码-->
<!--订单编号-->
<!--订单类型-->
<!--取消原因-->
第二步:生成签名 sign
32位大写MD5值示例: MD5(S)=D06D88CB34B2EC0E5C9BAB396C9542B6
第三步:拼装URL请求并发送请求
将所有参数值转换为UTF-8编码,然后拼装,并将参数值作URL ENCODING 如下:
http://域名?method=order.cancel×tamp=2018-01-15-09-20-07&app_key=testkey&sign= D06D88CB34B2EC0E5C9BAB396C9542B6&CID=123
(2)认证方工作流程
第一步:从URL中获取参数并进行解码
根据URL中的参数格式说明,认证方依次将各个参数及参数值接收并存储
第二步:得到Body数据
一般请求方通过Post方式将body数据提交给认证方,body数据是声称方提交的XML格式数据
第三步:确认声称方身份,得到Secret
通过参数CID和app_key的值在认证方配置文件或数据库中找到对应的secret,确定声称方的身份。如果未找到对应的secret,返回声称方信息在认证方不存在。
第四步:判断时间戳是否过期
根据timestamp中的值与服务器的时间来比对,判断时间戳是否过期,通常时间戳在正负1分钟内都是有效的,返回时间戳过期。
第五步:校验声称方身份是否合法
依据secret,CID,app_key及body,進行MD5加密,得到认证方加密后的字符串R,
R的值如下:
R=MD5(secret+app_key+值+CID+值+method+值+timestamp+值+body值+secret)
判断R是否与URL中MD5参数的值相等,如果相等则身份合法,否则身份不合法或数据被篡改。R与URL中MD5参数的值不相等时,有以下两种情况:
情况1:声称方的secret,CID或app_key不正确,由于CID和app_key在URL中可以直接获得,伪装者可以轻松的得到这两个值,而secret是认证方线下颁发给声称方的,因此一般不容易得到。
情况2:当body数据在网络传输过程中被截取并进行篡改,当body数据被篡改后,认证方得到篡改后的body数据,通过body加密后得到的sign签名必然与url中MD5参数的值不相等。
通过以上两种情况可以说明,通过此方法进行身份认证,同时可以有效的防止数据篡改问题,对数据的完整性和正确性进行了有效的保护。
3 结束语
Web Service接口作为软件系统中接口通信中重要的一个部分,其安全性和可靠性直接关系到整个软件系统的稳定运行和数据的安全性。身份认证是声称方在请求服务时第一道保护关卡,因此在实际的应用中显得更为重要。身份认证系统必须基于密码学的非对称算法,也就是说必须是不可逆的算法,而MD5算法经历了时间的检验,拥有良好的性能。本文通过对MD5算法的学习研究,提出了一种适合于Web Service接口身份认证的方法,该方法适用于通过URL传值Post方式调用接口的所有系统的身份认证。
参考文献
[1] 张裔智,赵毅,汤小斌.MD5算法研究[J].计算机科学,2008,35(7):295-297.
[2] RFC1321,The MD5 Message-Digest Algorithm[S].MIT:Ron Rivest,1992.
[3] 章照止.现代密码学基础[M].北京:北京邮电大学出版社, 2004:13-25.
[4] 冯登国,裴定一.密码学导引[M].北京:机械工业出版社,1999: 31-59.