信息化考试是一种新兴的考试形式,它在带来众多优点的同时,也带来很多的问题需要解决。如何防止考生在这种考试系统下作弊就是其中的一个焦点。由于答卷系统具有比较特别的重要性和特殊性,因此考生答卷系统至少需要满足诸如考生身份认证、非文本数据处理、考试计时、试卷内容的自动保存和自动恢复、试卷的格式化处理、考生答案完整性、不可否认性验证等技术要求。

因为考生的答案存储在数据库里,所以需要保护考生的答案不被可以合法接触到数据库的人修改(诸如考试管理员、数据库管理员),即对考生的答卷具有完整性和不可否认性的验证手段。当考试结束后答卷被修改,或者考生对其答案是否被修改提出质疑时,系统应该提供明确的证据。

一、主要技术

保护考生试卷的完整性可以采用网络安全技术中经常使用的“报文摘要”技术。报文摘要算法(Message DigcstAlgorithms)印采用单向HASH算法将需要加密的明文进行摘要,而产生具有固定长度的单向散列(HASH)值,其中散列函数是将一个不同长度的报文转换成一个数字串(即报文摘要)的公式,该函数不需要密钥,公式决定了报文摘要的长度。报文摘要通常和非对称密钥加密一起,提供了数字签名的方法。MD5算法是一种常用的报文摘要算法,它采用单向Ilash函数将需加密的明文“摘要”成一串128bit的密文,这一串密文亦称为数字指纹,它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。这样这个摘要便可成为验证明文是否是“真身”的“指纹”了。在考生成功提交试卷以后,系统自动调用报文摘要算法,将考生的试卷内容和考生考号进行摘要计算,然后生成一个固定长度的摘要,考生试卷中的任何一个字节变化都会影响到该摘要。

从数学上讲,需要一个散列函数作为计算的变换函数,表示为:X=H(x)。如果xl=x2,那么H(x1)=H(x2)。反之亦然。而x=H-1(x)=H-1[H(x)]是不可计算的。

二、MD5的数据组成

报文摘要算法有很多种,MD5是Internet上广泛使用的摘要算法。在输入任意长度的报文后,经过MD5算法运箅,输出一个128位固定长度的报文摘要。通过该报文摘要,可以验证考生答卷的完整性,同时也可以作为不可否认性的依据。

MD5的数据由四部分组成:数据字段、填充字段、长度字段。摘要字段。填充字段的第一位为1。随后的其他字段均为O。MD5算法规定至少填充一位填充字段,最多可以填充512位。

填充字段的长度应该满足下面的条件:

[(数据长度L)+(填充字段长度)]/512= 448

长度字段说明数据的长度。该字段足64位的数据,于是数据的最大长度应该小于264,应该保证低字节在前、高字节在后的顺序(这是Intelx86架构处理器对整型数的存储格式)。

摘要字段是对数据、填充、长度字段进行MD5算法计算的结果。

三、摘要算法的描述

给定一个报文比特流后,计算其摘要需要完成以下几个方面的工作。

1、对原始数据进行填充

填充字段的格式如下:Ox10000000…………

对于原始数据,至少需要填充1位,最多填充128位。

而且填充字段的第一位必须足。‘l”,随后的其他位必须是“O”。消息被填充(延长)后,其长度<按位计算>取模512余数应该等于448。这足因为MD5算法要求被计算的长度是512的整数倍,其中除了原始数据和填充字段外,还应该有64位的长度守段。因此,原始数据被填充后,加上长度字段,应正好满足512整数倍的要求。

假设原始数据长度取模512后余数为n,填充宇段长度为T。填充字段长度的计算公式为:

n< 448,则T=448 -n; n>=448,则T= 960-n。

按照上面的公式,可以得出以下的结论:如果n= 447。则填充一个比特“l”。如果n= 448(该余数正好满足要求)则填充512个比特,因为MD5要求必须存在填充字段。

2、添加长度字段

MD5用64位表示原始数据的长度。一般情况下,原始数据的长度不会大于264。长度字段的保存方法应该遵循低字节在前、高字节在后的原则。64位的长度字段可以划分为4个部分。

3、数据分段

MD5运算法则以32位作为最小的运算单位,以16个32位的运算单位作为一个数据块。因此,在进行MD5运算前应该首先将数据进行分段处理,即以16X32位划分数据段。数据段包括原始数据,填充字段和长度字段。于是将会划分出n个数据块。

4、初始化摘要寄存器

用4个32位的内存空问作为摘要寄存器,设为A、B、G、D。将摘要寄存器的内容设置为算法约定的十六进制初始值,注意低位字节在前、高位字节在后。

A= Ox67452301 (相当于01234567)

B= Oxefcdab89 (相当于89ABCDEF)

C= 0)08badde (相当于FEDCBA98)

D= Oxl(B25476 (相当于7654321o)

5、摘要的计算

MD5算法以数据块(16X32位)为单位进行摘要计算。设置长度为64的32位数组:T(O],T[1],...,T[i]---T[63]并且使T[i];abs(sin(0)将数据块的数据(16个32位数据)放置在X数组中:X[O],--X[15]

SetX[j]toM[i*16+j],

encV结束对J的循环

/* SaveAasAA, BasBB, CasCC ,andDaaDD.*/。

AA=A

BB=B

CC=C

DD=D

/*第1轮*/

/*以[abcdksi]表示如下操作

a=b+((a十F(b.c,d)+X[k]+T[i])<<

/* Dothefollowing160perations.*/

[ ABCD071] [DABCl122] [CDAB2173] [BCDA3224]

[ABCD475J [DABC5126] [CDAB6177][BCDA7228]

[ABCD879] [DABC91210] [CDAB101711] [BCDA112212]

[ABCD12713] LDABC131214JLCDAB141715][BCDA152216]

/*第2轮*/

/*以[ abcdksi]表示如下操作

a=b+((a+G(b.c,d)+X[k]+T[i])<<

/* Dotliefollowing160peraeionls,*/

[ ABCD1517] [DABC6918] [CDAB111419] [BCDA02020]

[ABCD5521] [ DABC10922] [CDAB151423] [BCDA42024]

[ABCD9525 ] [ DABC14926] [CDAB31427J [ BCDA82028]

[ABCD13529] [ DABC2930J [CDAB71431] [BCDA122032]

/ *第 3轮 * /

/*以 [ abcdksi]表示如下操作

/* Dothefollowing160perations. * /

[ABCD5433][DABC81134J [CDAB111635] [ BCDA142336]

[ ABCD1437] [ DABC41138] [CDAB71639] [ BCDA102340]

[ABCD13441] [DABC01142] [CDAB31643][ BCDA62344]

[ ABCD9445 ] [ DABC121146] [CDAB151647] [BCDA22348]

/*以 [rrlxxlksi]表示如下操作

/*Dotliefollowing160perauons.8/

[ ABCD0649] [DABC71050] [CDAB141551] [ BCDA52152]

[ABCD12653] [DABC31054] [CDAB101555] [BCDA12156]

[ABCD8657 ] [DABC151058] [CDAB61559] [ BCDA132160]

[ABCD4661] [ DABC111062] [CDAB21563] [ BCDA92164]

/*然后进行如下操作*/

A= A*- AA

B= B+ BB

C= Ci- CC

D= D+ DD

end/*结束对I的循环*/

6、输出摘要结果

报文摘要的产生后的形式为:A,B,C.D。也就是低位字节A开始,高位字节D结束。即按照低字节往前、高字节在后的顺序输出ABCD寄存器中的128位(16个字节)的摘要。

四、结论

MD5算法实现很容易,它提供了任意长度的信息的“指纹”(或称为报文摘要)。据推测要实现两个不同的报文产生相同的摘要需要2^64次的操作,要恢复给定摘要的报文则需要2-128次操作。

为了便于记录,可以将该数据流格式化为ANSI或者Unicode字符串提供给考生。最好将试卷鉴别码一式三份分别存放于考生、考试组织部门、考试管理部门中,以防止任何一方修改该鉴别码。

小知识之报文

报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。