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