李德順 姚姜源* 吳漢煒 譚毓銀
(1.海南大學(xué)計算機科學(xué)與技術(shù)學(xué)院,海南 ???570228;2.海南大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,海南 ???570228)
應(yīng)用密碼學(xué)實驗是網(wǎng)絡(luò)空間安全專業(yè)的核心必修課程,需要學(xué)生在掌握理論的基礎(chǔ)上通過編程實現(xiàn)重要密碼學(xué)算法,并能夠進(jìn)行加解密應(yīng)用[1-3]。當(dāng)前應(yīng)用密碼學(xué)實驗課程存在著算法實現(xiàn)難度大、學(xué)生理論掌握不透徹、編程實踐能力不足和積極性不高等問題,這導(dǎo)致實驗課程難以在既定的時間內(nèi)完成教學(xué)目標(biāo)[4,5]。
針對當(dāng)前存在的問題,教研團(tuán)隊提出了基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗課程教學(xué)設(shè)計。授課教師根據(jù)內(nèi)在邏輯將復(fù)雜的密碼算法和應(yīng)用進(jìn)行模塊化任務(wù)分解,學(xué)生以任務(wù)分解模塊為單位逐步進(jìn)行編碼實現(xiàn),最后組合成完整的密碼學(xué)應(yīng)用程序。該教學(xué)模式為學(xué)生提供了一種介于全局和細(xì)節(jié)之間的粒度理解密碼學(xué)算法的基本原理和操作,使學(xué)生能夠深入密碼算法的核心運算和變換過程。
兩個學(xué)年的教學(xué)實踐表明,基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗教學(xué)能夠有效提升學(xué)生密碼算法編程實踐能力和應(yīng)用技巧,以及面對復(fù)雜應(yīng)用的任務(wù)分解能力。
應(yīng)用密碼學(xué)實驗主要是鍛煉學(xué)生將算法編碼實現(xiàn)為加解密應(yīng)用程序的能力,然而,學(xué)生難以僅通過應(yīng)用密碼學(xué)理論課程教學(xué)完成實驗任務(wù)[6-8]。教研團(tuán)隊對當(dāng)前應(yīng)用密碼學(xué)實驗課程教學(xué)現(xiàn)狀分析如下:
(1)算法實現(xiàn)難度大。應(yīng)用密碼學(xué)算法需要實現(xiàn)并調(diào)用復(fù)雜的代數(shù)運算和變換,這需要學(xué)生在理解算法的基礎(chǔ)上編程實現(xiàn)應(yīng)用程序。該過程需要學(xué)生熟練掌握算法的基本運算和變換規(guī)律,且需要學(xué)生具備較強編程技巧。因此,對缺乏實踐經(jīng)驗沒有開發(fā)基礎(chǔ)的學(xué)生而言,應(yīng)用密碼學(xué)算法實現(xiàn)難度大。
(2)理論掌握不透徹。應(yīng)用密碼學(xué)理論課程涉及多學(xué)科交叉知識,理論基礎(chǔ)復(fù)雜,學(xué)生難以在有限的理論課堂中透徹掌握其基本原理。在進(jìn)行應(yīng)用密碼學(xué)實驗課程教學(xué)時,部分學(xué)生存在著或不知其然,或不知其所以然的狀況。
(3)學(xué)生實踐能力較弱。在校學(xué)生理論課程安排緊密,應(yīng)用實踐鍛煉機會少,且實踐中通常使用現(xiàn)有工具或軟件接口。學(xué)生較少進(jìn)行復(fù)雜應(yīng)用的開發(fā)實踐訓(xùn)練,僅少數(shù)學(xué)生具備復(fù)雜算法的編程實踐能力。學(xué)生編程實踐能力較弱,面對應(yīng)用密碼學(xué)算法等復(fù)雜程序時無處著手。
(4)應(yīng)用密碼學(xué)實驗課程還存在著學(xué)時有限等問題,學(xué)生難以在有限的時間內(nèi)獨立思考并實現(xiàn)復(fù)雜的密碼學(xué)算法和應(yīng)用。
上述問題降低了學(xué)生應(yīng)用密碼學(xué)實驗課程學(xué)習(xí)的主動性和積極性[9-11]。部分學(xué)生在未能按時完成實驗代碼的情況下,容易對密碼學(xué)實驗失去信心而大量借鑒已有代碼,難以達(dá)到教學(xué)目標(biāo)中鍛煉學(xué)生編程實踐能力的目的。
應(yīng)用密碼學(xué)實驗算法和程序復(fù)雜,但其實現(xiàn)過程具有顯著的模塊化特征,各個模塊功能相對獨立。在實驗教學(xué)過程中,授課教師對應(yīng)用密碼學(xué)實驗進(jìn)行模塊化分解可以幫助學(xué)生逐步實現(xiàn)完整的應(yīng)用程序。本節(jié)以AES為例從4個方面介紹基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗課程教學(xué)設(shè)計。
在應(yīng)用密碼學(xué)實驗過程中,學(xué)生要在理解理論知識的基礎(chǔ)上實現(xiàn)重要密碼學(xué)算法,并能夠使用密碼算法完成對文件的加解密操作。
AES是DES算法之后成為新標(biāo)準(zhǔn)的對稱密碼算法,至今廣泛應(yīng)用于各類數(shù)據(jù)加密傳輸和存儲,在對稱密碼學(xué)理論和實驗教學(xué)中均處于核心地位。AES采用SPN結(jié)構(gòu),基于有限域GF(28)上的代數(shù)運算實現(xiàn)基本數(shù)據(jù)變換。因此,學(xué)生在進(jìn)行AES實驗之前,應(yīng)熟練掌握GF(28)上運算的基本規(guī)律和特點。AES具有算法整體理解容易,但編程細(xì)節(jié)實現(xiàn)難度大的特點。授課教師根據(jù)AES的內(nèi)在邏輯和組合關(guān)系,將其實現(xiàn)和應(yīng)用分解為7個模塊,學(xué)生在理解的基礎(chǔ)上逐步實現(xiàn)每個模塊。
密碼算法和應(yīng)用的模塊化分解能夠降低學(xué)生對復(fù)雜算法實現(xiàn)的迷茫性。授課教師根據(jù)算法的內(nèi)在邏輯提前進(jìn)行模塊分解,并在其后的課程實踐中逐步引導(dǎo)學(xué)生自主進(jìn)行自頂向下的任務(wù)分解。
根據(jù)AES算法和應(yīng)用程序基本運算和變換步驟之間的邏輯關(guān)系,授課教師將AES實驗分解為以下有序的7個功能模塊。AES模塊分解如下:
模塊一,GF(28)域上的基本運算;
模塊二,S盒子和S逆盒子生成;
模塊三,AES密鑰擴展算法;
模塊四,AES的4種基本變換;
模塊五,AES加解密算法;
模塊六,文件加解密;
模塊七,程序演示并撰寫實驗報告。
在AES模塊分解中,后繼模塊需要調(diào)用前驅(qū)模塊或者使用前驅(qū)模塊的基本設(shè)定,前驅(qū)模塊是后繼模塊的實現(xiàn)基礎(chǔ),各個模塊逐項實現(xiàn)并組合成為完整的AES應(yīng)用程序。
基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗過程就是逐步實現(xiàn)上述每個任務(wù)模塊。在應(yīng)用密碼學(xué)算法和應(yīng)用的實現(xiàn)過程中,學(xué)生根據(jù)需要和個人興趣自行選擇編程語言和編譯平臺。
以AES實驗?zāi)K一為例介紹基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗?zāi)K實現(xiàn)過程。模塊一主要完成GF(28)域上基本運算,為后繼模塊實現(xiàn)調(diào)用接口。在AES加解密算法中,至少需要完成GF(28)域上的以下基本運算:加、減、乘、除和乘方運算,歐幾里得算法求最大公因子,擴展的歐幾里得算法求逆元等。在GF(28)域上的基本運算中,加運算建議函數(shù)名為GF_Add(),減運算建議函數(shù)名為GF_Minus();乘運算建議函數(shù)名為GF_Multiply();除運算建議函數(shù)名為GF_Divide();乘方運算建議函數(shù)名為GF_Power();歐幾里得算法求最大公因子建議函數(shù)名GF_Euclid();擴展的歐幾里得算法求逆元建議函數(shù)名為GF_ExEuclid()。授課教師首先介紹上述運算在AES加解密算法中的用法和作用,然后講解GF(28)域上元素和運算的具體存儲和實現(xiàn)方式。學(xué)生按照上述次序?qū)崿F(xiàn)從簡單的GF_Add到復(fù)雜的GF_ExEuclid。只有學(xué)生獨立完成了加、減等基本運算后,才可以繼續(xù)進(jìn)行更復(fù)雜運算的編碼實現(xiàn)。
學(xué)生順利完成模塊一任務(wù)之后,在其基礎(chǔ)上逐步實現(xiàn)模塊二和模塊三。這些模塊都需要用到模塊一的基本運算。例如,S盒子生成過程中求解每個字節(jié)的逆,需要使用到模塊一的擴展的歐幾里得算法求逆元GF_ExEuclid()運算。模塊四包括字節(jié)替代、行移位、列混淆和輪密鑰加等子模塊,這些子模塊在GF(28)域基本運算上均容易實現(xiàn)。然后將模塊二到四通過循環(huán)組合構(gòu)成模塊五,即AES加解密模塊。模塊六調(diào)用模塊五完成AES算法對指定類型的文檔進(jìn)行加解密操作,該模塊需要學(xué)生根據(jù)文檔類型進(jìn)行加密模式的選擇。模塊七包括AES程序演示和撰寫實驗報告兩個部分,該模塊由授課教師根據(jù)學(xué)生算法實現(xiàn)過程中存在的問題進(jìn)行有針對性的檢查,并以演示表現(xiàn)和實驗報告作為該實驗的平時成績。
模塊化實驗任務(wù)分解能夠讓學(xué)生掌握復(fù)雜密碼算法的實現(xiàn)過程,從而能夠把握密碼算法的核心運算和變換過程。在應(yīng)用密碼學(xué)算法模塊實現(xiàn)的過程中,絕大部分學(xué)生能夠獨立實現(xiàn)各個任務(wù)模塊。針對有些難以實現(xiàn)的子模塊,或者通過學(xué)生之間相互幫助,或者通過授課教師指導(dǎo),也均能完成該模塊功能,從而不至于產(chǎn)生一處卡殼全部放棄的局面?;谀K化任務(wù)分解的應(yīng)用密碼學(xué)實驗課程教學(xué)有助于學(xué)生從全局和細(xì)節(jié)的中間角度理解密碼學(xué)算法的基本原理和操作。
經(jīng)過兩個學(xué)年的教學(xué)實踐探索,教研團(tuán)隊對基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗課程教學(xué)從優(yōu)勢和不足兩方面進(jìn)行實踐效果總結(jié)。
模塊化實驗教學(xué)能夠讓學(xué)生更清晰地掌握密碼學(xué)算法的基本過程,學(xué)生對各模塊實現(xiàn)難度的反饋有助于授課教師了解其理論理解程度,從而使授課教師對學(xué)生實驗結(jié)果的檢查更具有針對性。模塊化實驗教學(xué)消除了學(xué)生對復(fù)雜算法和應(yīng)用實現(xiàn)時無處著手的迷茫感,提高了學(xué)生主動完成應(yīng)用密碼學(xué)算法程序的自信心和積極性。
經(jīng)過一個學(xué)期的課程鍛煉,大部分學(xué)生都可以獨立完成常見應(yīng)用密碼學(xué)算法,如AES、RSA、DSA和SHA等。學(xué)生面對復(fù)雜應(yīng)用時產(chǎn)生了自頂向下的問題分解意識,并能夠按照步驟和規(guī)劃逐項執(zhí)行。
在應(yīng)用密碼學(xué)實驗課程的32個學(xué)時內(nèi),學(xué)生難以在課堂上完成全部的算法和應(yīng)用。因此,需要學(xué)生在課下投入大量的時間和精力完成實驗代碼,而課堂時間主要用于授課教師講解算法模塊和指導(dǎo)學(xué)生改正問題。在教學(xué)實踐過程中,部分同學(xué)編程技巧和能力有所欠缺,這方面有待進(jìn)一步加強。
基于模塊化任務(wù)分解的應(yīng)用密碼學(xué)實驗教學(xué)提高了學(xué)生的主動性和積極性,增強了學(xué)生編程實踐能力。該實驗教學(xué)模式鍛煉了學(xué)生對復(fù)雜程序應(yīng)用的分解能力,學(xué)生能夠主動進(jìn)行任務(wù)分解并按照步驟執(zhí)行完成。經(jīng)過兩個學(xué)年4個班級的教學(xué)實踐,教研團(tuán)隊積累了大量教學(xué)實踐經(jīng)驗,初步形成了一套可推廣的基于模塊化的應(yīng)用密碼學(xué)實驗教學(xué)模式。