報(bào)文摘要加密技術(shù)在網(wǎng)絡(luò)化考試中的應(yīng)用

信息化考試是一種新興的考試形式,它在帶來(lái)眾多優(yōu)點(diǎn)的同時(shí),也帶來(lái)很多的問(wèn)題需要解決。如何防止考生在這種考試系統(tǒng)下作弊就是其中的一個(gè)焦點(diǎn)。由于答卷系統(tǒng)具有比較特別的重要性和特殊性,因此考生答卷系統(tǒng)至少需要滿(mǎn)足諸如考生身份認(rèn)證、非文本數(shù)據(jù)處理、考試計(jì)時(shí)、試卷內(nèi)容的自動(dòng)保存和自動(dòng)恢復(fù)、試卷的格式化處理、考生答案完整性、不可否認(rèn)性驗(yàn)證等技術(shù)要求。

因?yàn)榭忌拇鸢复鎯?chǔ)在數(shù)據(jù)庫(kù)里,所以需要保護(hù)考生的答案不被可以合法接觸到數(shù)據(jù)庫(kù)的人修改(諸如考試管理員、數(shù)據(jù)庫(kù)管理員),即對(duì)考生的答卷具有完整性和不可否認(rèn)性的驗(yàn)證手段。當(dāng)考試結(jié)束后答卷被修改,或者考生對(duì)其答案是否被修改提出質(zhì)疑時(shí),系統(tǒng)應(yīng)該提供明確的證據(jù)。

一、主要技術(shù)

保護(hù)考生試卷的完整性可以采用網(wǎng)絡(luò)安全技術(shù)中經(jīng)常使用的“報(bào)文摘要”技術(shù)。報(bào)文摘要算法(Message DigcstAlgorithms)印采用單向HASH算法將需要加密的明文進(jìn)行摘要,而產(chǎn)生具有固定長(zhǎng)度的單向散列(HASH)值,其中散列函數(shù)是將一個(gè)不同長(zhǎng)度的報(bào)文轉(zhuǎn)換成一個(gè)數(shù)字串(即報(bào)文摘要)的公式,該函數(shù)不需要密鑰,公式?jīng)Q定了報(bào)文摘要的長(zhǎng)度。報(bào)文摘要通常和非對(duì)稱(chēng)密鑰加密一起,提供了數(shù)字簽名的方法。MD5算法是一種常用的報(bào)文摘要算法,它采用單向Ilash函數(shù)將需加密的明文“摘要”成一串128bit的密文,這一串密文亦稱(chēng)為數(shù)字指紋,它有固定的長(zhǎng)度,且不同的明文摘要成密文,其結(jié)果總是不同的,而同樣的明文其摘要必定一致。這樣這個(gè)摘要便可成為驗(yàn)證明文是否是“真身”的“指紋”了。在考生成功提交試卷以后,系統(tǒng)自動(dòng)調(diào)用報(bào)文摘要算法,將考生的試卷內(nèi)容和考生考號(hào)進(jìn)行摘要計(jì)算,然后生成一個(gè)固定長(zhǎng)度的摘要,考生試卷中的任何一個(gè)字節(jié)變化都會(huì)影響到該摘要。

從數(shù)學(xué)上講,需要一個(gè)散列函數(shù)作為計(jì)算的變換函數(shù),表示為:X=H(x)。如果xl=x2,那么H(x1)=H(x2)。反之亦然。而x=H-1(x)=H-1[H(x)]是不可計(jì)算的。

二、MD5的數(shù)據(jù)組成

報(bào)文摘要算法有很多種,MD5是Internet上廣泛使用的摘要算法。在輸入任意長(zhǎng)度的報(bào)文后,經(jīng)過(guò)MD5算法運(yùn)箅,輸出一個(gè)128位固定長(zhǎng)度的報(bào)文摘要。通過(guò)該報(bào)文摘要,可以驗(yàn)證考生答卷的完整性,同時(shí)也可以作為不可否認(rèn)性的依據(jù)。

MD5的數(shù)據(jù)由四部分組成:數(shù)據(jù)字段、填充字段、長(zhǎng)度字段。摘要字段。填充字段的第一位為1。隨后的其他字段均為O。MD5算法規(guī)定至少填充一位填充字段,最多可以填充512位。

填充字段的長(zhǎng)度應(yīng)該滿(mǎn)足下面的條件:

[(數(shù)據(jù)長(zhǎng)度L)+(填充字段長(zhǎng)度)]/512= 448

長(zhǎng)度字段說(shuō)明數(shù)據(jù)的長(zhǎng)度。該字段足64位的數(shù)據(jù),于是數(shù)據(jù)的最大長(zhǎng)度應(yīng)該小于264,應(yīng)該保證低字節(jié)在前、高字節(jié)在后的順序(這是Intelx86架構(gòu)處理器對(duì)整型數(shù)的存儲(chǔ)格式)。

摘要字段是對(duì)數(shù)據(jù)、填充、長(zhǎng)度字段進(jìn)行MD5算法計(jì)算的結(jié)果。

三、摘要算法的描述

給定一個(gè)報(bào)文比特流后,計(jì)算其摘要需要完成以下幾個(gè)方面的工作。

1、對(duì)原始數(shù)據(jù)進(jìn)行填充

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

對(duì)于原始數(shù)據(jù),至少需要填充1位,最多填充128位。

而且填充字段的第一位必須足?!甽”,隨后的其他位必須是“O”。消息被填充(延長(zhǎng))后,其長(zhǎng)度<按位計(jì)算>取模512余數(shù)應(yīng)該等于448。這足因?yàn)镸D5算法要求被計(jì)算的長(zhǎng)度是512的整數(shù)倍,其中除了原始數(shù)據(jù)和填充字段外,還應(yīng)該有64位的長(zhǎng)度守段。因此,原始數(shù)據(jù)被填充后,加上長(zhǎng)度字段,應(yīng)正好滿(mǎn)足512整數(shù)倍的要求。

假設(shè)原始數(shù)據(jù)長(zhǎng)度取模512后余數(shù)為n,填充宇段長(zhǎng)度為T(mén)。填充字段長(zhǎng)度的計(jì)算公式為:

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

按照上面的公式,可以得出以下的結(jié)論:如果n= 447。則填充一個(gè)比特“l(fā)”。如果n= 448(該余數(shù)正好滿(mǎn)足要求)則填充512個(gè)比特,因?yàn)镸D5要求必須存在填充字段。

2、添加長(zhǎng)度字段

MD5用64位表示原始數(shù)據(jù)的長(zhǎng)度。一般情況下,原始數(shù)據(jù)的長(zhǎng)度不會(huì)大于264。長(zhǎng)度字段的保存方法應(yīng)該遵循低字節(jié)在前、高字節(jié)在后的原則。64位的長(zhǎng)度字段可以劃分為4個(gè)部分。

3、數(shù)據(jù)分段

MD5運(yùn)算法則以32位作為最小的運(yùn)算單位,以16個(gè)32位的運(yùn)算單位作為一個(gè)數(shù)據(jù)塊。因此,在進(jìn)行MD5運(yùn)算前應(yīng)該首先將數(shù)據(jù)進(jìn)行分段處理,即以16X32位劃分?jǐn)?shù)據(jù)段。數(shù)據(jù)段包括原始數(shù)據(jù),填充字段和長(zhǎng)度字段。于是將會(huì)劃分出n個(gè)數(shù)據(jù)塊。

4、初始化摘要寄存器

用4個(gè)32位的內(nèi)存空問(wèn)作為摘要寄存器,設(shè)為A、B、G、D。將摘要寄存器的內(nèi)容設(shè)置為算法約定的十六進(jìn)制初始值,注意低位字節(jié)在前、高位字節(jié)在后。

A= Ox67452301 (相當(dāng)于01234567)

B= Oxefcdab89 (相當(dāng)于89ABCDEF)

C= 0)08badde (相當(dāng)于FEDCBA98)

D= Oxl(B25476 (相當(dāng)于7654321o)

5、摘要的計(jì)算

MD5算法以數(shù)據(jù)塊(16X32位)為單位進(jìn)行摘要計(jì)算。設(shè)置長(zhǎng)度為64的32位數(shù)組:T(O],T[1],...,T[i]---T[63]并且使T[i];abs(sin(0)將數(shù)據(jù)塊的數(shù)據(jù)(16個(gè)32位數(shù)據(jù))放置在X數(shù)組中:X[O],--X[15]

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

encV結(jié)束對(duì)J的循環(huán)

/* 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]

/*然后進(jìn)行如下操作*/

A= A*- AA

B= B+ BB

C= Ci- CC

D= D+ DD

end/*結(jié)束對(duì)I的循環(huán)*/

6、輸出摘要結(jié)果

報(bào)文摘要的產(chǎn)生后的形式為:A,B,C.D。也就是低位字節(jié)A開(kāi)始,高位字節(jié)D結(jié)束。即按照低字節(jié)往前、高字節(jié)在后的順序輸出ABCD寄存器中的128位(16個(gè)字節(jié))的摘要。

四、結(jié)論

MD5算法實(shí)現(xiàn)很容易,它提供了任意長(zhǎng)度的信息的“指紋”(或稱(chēng)為報(bào)文摘要)。據(jù)推測(cè)要實(shí)現(xiàn)兩個(gè)不同的報(bào)文產(chǎn)生相同的摘要需要2^64次的操作,要恢復(fù)給定摘要的報(bào)文則需要2-128次操作。

為了便于記錄,可以將該數(shù)據(jù)流格式化為ANSI或者Unicode字符串提供給考生。最好將試卷鑒別碼一式三份分別存放于考生、考試組織部門(mén)、考試管理部門(mén)中,以防止任何一方修改該鑒別碼。

小知識(shí)之報(bào)文

報(bào)文(message)是網(wǎng)絡(luò)中交換與傳輸?shù)臄?shù)據(jù)單元,即站點(diǎn)一次性要發(fā)送的數(shù)據(jù)塊。報(bào)文包含了將要發(fā)送的完整的數(shù)據(jù)信息,其長(zhǎng)短很不一致,長(zhǎng)度不限且可變。