基于模块化任务分解的应用密码学实验课程教学设计
2022-12-28李德顺姚姜源吴汉炜谭毓银
李德顺 姚姜源* 吴汉炜 谭毓银
(1.海南大学计算机科学与技术学院,海南 海口 570228;2.海南大学网络空间安全学院,海南 海口 570228)
1 引言
应用密码学实验是网络空间安全专业的核心必修课程,需要学生在掌握理论的基础上通过编程实现重要密码学算法,并能够进行加解密应用[1-3]。当前应用密码学实验课程存在着算法实现难度大、学生理论掌握不透彻、编程实践能力不足和积极性不高等问题,这导致实验课程难以在既定的时间内完成教学目标[4,5]。
针对当前存在的问题,教研团队提出了基于模块化任务分解的应用密码学实验课程教学设计。授课教师根据内在逻辑将复杂的密码算法和应用进行模块化任务分解,学生以任务分解模块为单位逐步进行编码实现,最后组合成完整的密码学应用程序。该教学模式为学生提供了一种介于全局和细节之间的粒度理解密码学算法的基本原理和操作,使学生能够深入密码算法的核心运算和变换过程。
两个学年的教学实践表明,基于模块化任务分解的应用密码学实验教学能够有效提升学生密码算法编程实践能力和应用技巧,以及面对复杂应用的任务分解能力。
2 应用密码学实验教学现状
应用密码学实验主要是锻炼学生将算法编码实现为加解密应用程序的能力,然而,学生难以仅通过应用密码学理论课程教学完成实验任务[6-8]。教研团队对当前应用密码学实验课程教学现状分析如下:
(1)算法实现难度大。应用密码学算法需要实现并调用复杂的代数运算和变换,这需要学生在理解算法的基础上编程实现应用程序。该过程需要学生熟练掌握算法的基本运算和变换规律,且需要学生具备较强编程技巧。因此,对缺乏实践经验没有开发基础的学生而言,应用密码学算法实现难度大。
(2)理论掌握不透彻。应用密码学理论课程涉及多学科交叉知识,理论基础复杂,学生难以在有限的理论课堂中透彻掌握其基本原理。在进行应用密码学实验课程教学时,部分学生存在着或不知其然,或不知其所以然的状况。
(3)学生实践能力较弱。在校学生理论课程安排紧密,应用实践锻炼机会少,且实践中通常使用现有工具或软件接口。学生较少进行复杂应用的开发实践训练,仅少数学生具备复杂算法的编程实践能力。学生编程实践能力较弱,面对应用密码学算法等复杂程序时无处着手。
(4)应用密码学实验课程还存在着学时有限等问题,学生难以在有限的时间内独立思考并实现复杂的密码学算法和应用。
上述问题降低了学生应用密码学实验课程学习的主动性和积极性[9-11]。部分学生在未能按时完成实验代码的情况下,容易对密码学实验失去信心而大量借鉴已有代码,难以达到教学目标中锻炼学生编程实践能力的目的。
3 基于模块化任务分解的应用密码学实验课程教学设计
应用密码学实验算法和程序复杂,但其实现过程具有显著的模块化特征,各个模块功能相对独立。在实验教学过程中,授课教师对应用密码学实验进行模块化分解可以帮助学生逐步实现完整的应用程序。本节以AES为例从4个方面介绍基于模块化任务分解的应用密码学实验课程教学设计。
3.1 基础准备
在应用密码学实验过程中,学生要在理解理论知识的基础上实现重要密码学算法,并能够使用密码算法完成对文件的加解密操作。
AES是DES算法之后成为新标准的对称密码算法,至今广泛应用于各类数据加密传输和存储,在对称密码学理论和实验教学中均处于核心地位。AES采用SPN结构,基于有限域GF(28)上的代数运算实现基本数据变换。因此,学生在进行AES实验之前,应熟练掌握GF(28)上运算的基本规律和特点。AES具有算法整体理解容易,但编程细节实现难度大的特点。授课教师根据AES的内在逻辑和组合关系,将其实现和应用分解为7个模块,学生在理解的基础上逐步实现每个模块。
密码算法和应用的模块化分解能够降低学生对复杂算法实现的迷茫性。授课教师根据算法的内在逻辑提前进行模块分解,并在其后的课程实践中逐步引导学生自主进行自顶向下的任务分解。
3.2 AES模块化任务分解
根据AES算法和应用程序基本运算和变换步骤之间的逻辑关系,授课教师将AES实验分解为以下有序的7个功能模块。AES模块分解如下:
模块一,GF(28)域上的基本运算;
模块二,S盒子和S逆盒子生成;
模块三,AES密钥扩展算法;
模块四,AES的4种基本变换;
模块五,AES加解密算法;
模块六,文件加解密;
模块七,程序演示并撰写实验报告。
在AES模块分解中,后继模块需要调用前驱模块或者使用前驱模块的基本设定,前驱模块是后继模块的实现基础,各个模块逐项实现并组合成为完整的AES应用程序。
3.3 模块实现
基于模块化任务分解的应用密码学实验过程就是逐步实现上述每个任务模块。在应用密码学算法和应用的实现过程中,学生根据需要和个人兴趣自行选择编程语言和编译平台。
以AES实验模块一为例介绍基于模块化任务分解的应用密码学实验模块实现过程。模块一主要完成GF(28)域上基本运算,为后继模块实现调用接口。在AES加解密算法中,至少需要完成GF(28)域上的以下基本运算:加、减、乘、除和乘方运算,欧几里得算法求最大公因子,扩展的欧几里得算法求逆元等。在GF(28)域上的基本运算中,加运算建议函数名为GF_Add(),减运算建议函数名为GF_Minus();乘运算建议函数名为GF_Multiply();除运算建议函数名为GF_Divide();乘方运算建议函数名为GF_Power();欧几里得算法求最大公因子建议函数名GF_Euclid();扩展的欧几里得算法求逆元建议函数名为GF_ExEuclid()。授课教师首先介绍上述运算在AES加解密算法中的用法和作用,然后讲解GF(28)域上元素和运算的具体存储和实现方式。学生按照上述次序实现从简单的GF_Add到复杂的GF_ExEuclid。只有学生独立完成了加、减等基本运算后,才可以继续进行更复杂运算的编码实现。
学生顺利完成模块一任务之后,在其基础上逐步实现模块二和模块三。这些模块都需要用到模块一的基本运算。例如,S盒子生成过程中求解每个字节的逆,需要使用到模块一的扩展的欧几里得算法求逆元GF_ExEuclid()运算。模块四包括字节替代、行移位、列混淆和轮密钥加等子模块,这些子模块在GF(28)域基本运算上均容易实现。然后将模块二到四通过循环组合构成模块五,即AES加解密模块。模块六调用模块五完成AES算法对指定类型的文档进行加解密操作,该模块需要学生根据文档类型进行加密模式的选择。模块七包括AES程序演示和撰写实验报告两个部分,该模块由授课教师根据学生算法实现过程中存在的问题进行有针对性的检查,并以演示表现和实验报告作为该实验的平时成绩。
3.4 模块化实验教学总结
模块化实验任务分解能够让学生掌握复杂密码算法的实现过程,从而能够把握密码算法的核心运算和变换过程。在应用密码学算法模块实现的过程中,绝大部分学生能够独立实现各个任务模块。针对有些难以实现的子模块,或者通过学生之间相互帮助,或者通过授课教师指导,也均能完成该模块功能,从而不至于产生一处卡壳全部放弃的局面。基于模块化任务分解的应用密码学实验课程教学有助于学生从全局和细节的中间角度理解密码学算法的基本原理和操作。
4 实践效果分析
经过两个学年的教学实践探索,教研团队对基于模块化任务分解的应用密码学实验课程教学从优势和不足两方面进行实践效果总结。
4.1 优势
模块化实验教学能够让学生更清晰地掌握密码学算法的基本过程,学生对各模块实现难度的反馈有助于授课教师了解其理论理解程度,从而使授课教师对学生实验结果的检查更具有针对性。模块化实验教学消除了学生对复杂算法和应用实现时无处着手的迷茫感,提高了学生主动完成应用密码学算法程序的自信心和积极性。
经过一个学期的课程锻炼,大部分学生都可以独立完成常见应用密码学算法,如AES、RSA、DSA和SHA等。学生面对复杂应用时产生了自顶向下的问题分解意识,并能够按照步骤和规划逐项执行。
4.2 不足
在应用密码学实验课程的32个学时内,学生难以在课堂上完成全部的算法和应用。因此,需要学生在课下投入大量的时间和精力完成实验代码,而课堂时间主要用于授课教师讲解算法模块和指导学生改正问题。在教学实践过程中,部分同学编程技巧和能力有所欠缺,这方面有待进一步加强。
5 结语
基于模块化任务分解的应用密码学实验教学提高了学生的主动性和积极性,增强了学生编程实践能力。该实验教学模式锻炼了学生对复杂程序应用的分解能力,学生能够主动进行任务分解并按照步骤执行完成。经过两个学年4个班级的教学实践,教研团队积累了大量教学实践经验,初步形成了一套可推广的基于模块化的应用密码学实验教学模式。