王利涛 李敏 邢宇航
[摘 要] 针对“密码学”课程教学实践中存在的编码理论理解难度大、算法编码实现入手难、编译运行过程相对复杂、难以结合算法编码开展课堂教学等现实问题,首先分析了现有的教学过程和方法,然后分别结合AES和ECC两种典型的密码算法,对传统纯理论授课和基于C/C++语言授课中存在的问题进行分析,结合Matlab语言的特点和优势,提出基于Matlab的密码编码教学方式,提出了对教学设计的一些考虑,阐述了教学实践过程,通过实际教学分析说明了教学的效果,最后给出了进一步教学应用的方向。
[关键词] 密码编码;教学实践;教学研究
[基金项目] 2015年度国家社会科学基金项目“大数据技术在内网舆论掌控与导向中的应用研究”(No.15GJ003-243)
[作者简介] 王利涛(1983—),男,河南许昌人,博士,火箭军工程大学作战保障学院讲师,主要从事密码与信息安全教学与改革研究;李 敏(1971—),女,河南扶沟人,博士,火箭军工程大学作战保障学院教授,主要从事信息安全、人工智能与机器学习等研究;邢宇航(1979—),男,河南南阳人,博士,火箭军工程大学作战保障学院副教授,主要从事信息安全研究。
[中图分类号] G642.0 [文獻标识码] A [文章编号] 1674-9324(2021)37-0077-04 [收稿日期] 2021-04-06
一、引言
近年来,随着网络安全事件频发及人们对个人隐私保护的关注,全社会对信息安全的重视程度也在不断提高,各高校在越来越多的专业开设了信息安全类相关课程,而“密码学”作为信息安全的基础更是此类课程的首选。然而,由于其对数学理论要求较强,已成为许多工程类专业学生学习起来难度最大的课程之一。
“密码学”(特别是密码编码部分)教学内容涉及的知识跨度广、课程难度高、理论性和应用性均比较强[1],通常需要诸多数学类课程作为基础,而学生对这些基础课程的掌握不同,因此教学内容与授课方式将直接影响学生对知识的掌握和能力的提升。对此,现有研究尝试用密码学实验工具CryptTool开展教学[2],但该工具只展现了算法输入与输出结果,难以展现密码算法的过程和细节。我们在教学过程中,曾尝试使用编码教学与密码算法讲解相结合的方式,取得了一定的效果,但由于C/C++语言编程过程相对繁杂,编译调试耗时较长,占用了较多的课堂时间,也影响到了教学的体验。通过分析研究其他理论性要求较高课程的优秀教学方法[3-5],并结合科研工程实践,基于Matlab语言具有易于学习、编码简单、运行直接等诸多优点,将Matlab用到“密码学”的教学中,并在随后开展了相关的教学实践。本文以AES和ECC算法为例,对基于Matlab的编码教学内容与方式进行实践和分析。
二、Matlab在AES教学中的实践
AES属于对称密码算法,作为许多软件应用的加密算法进行数据保护,如在WinRAR、Office文件加密及WIFI安全认证等应用中仍在使用。AES算法设计精妙,体现了很多基本的密码算法设计思想,个别计算处理环节涉及有限域数学知识和编程技巧,在教学中基于Matlab编码开展讲解展现出了明显的优势。
(一)AES一般授课特点分析
AES是迭代型分组密码算法,分组长度128比特,密钥长度128、192、256比特可选,分别对应10、12、14个圈子运算。每个圈子运算都包括字节代替变换、行移位变换、列混合变换及圈密钥加。圈密钥加运算法的前提是进行圈子密钥生成。
若不考虑设计理论细节,AES字节代替就是一个S盒查询变换,行移位是一种线性变换,圈密钥加则是将行移位的结果与圈子密钥按比特进行异或运行。最复杂的是列混合变换,其数学基础是有限域GF(28)上的加法和乘法两种面向字节的运算,其中加法运算可以看作是两个字节按比特异或,较容易理解;而乘法运算对应多项式的乘积模上二元域GF(2)上的8次不可约多项式m(x),m(x)=x8+x4+x3+x+1;而进一步推导后发现,乘法运算可通过左移运算和异或运算来实现。
针对AES算法,一般的讲授方法是,先对基本的数学基础进行讲解(此为难点知识,个别授课中可能略去不讲),然后列出算法结构,再按照各步骤进行分解讲授,最后再回到整体来讲解算法的过程,该过程按部就班,能够讲出知识点细节,但学生学起来比较抽象,教学效果差。
(二)用Matlab编码进行AES算法授课思考
针对原教学方法中的问题,为使算法结构更加清楚,密码算法编码设计过程更形象地展示出来,设计使用基于Matlab的辅助教学方法。在备课阶段,先对AES算法进行Matlab编码,主程序(如图1所示)框架简单明了,与算法结构框图有明确的对应关系,而且算法执行逻辑也直接体现出来,对于一些测试数据也可以通过断点调试方法查看数据的变化情况,能够让学生更深刻地掌握算法的逻辑结构及数据的处理过程,从而更好地掌握相关知识要点。
AES算法Matlab代码简要说明:加密算法中,输入明文PT是4×4的矩阵(16字节共128比特,是AES算法的要求);密钥KEY可以是16、24或32字节(byte),即128、192、256三种密钥长度可选;判断输入后,由函数KeyGenEnc计算执行迭代的次数Nrnd,并生成所需的圈子密钥EncKey。
进行AES加密运算时,首先进行一次圈子密钥加运算,程序中为SubKeyAdd(CT,EncKey(:, :, 1);然后进行Nrnd次轮运算,包括字节代替AESSBox,行移位ShiftRows,列混合MixColumn(当i~=Nrnd时,即在最后一轮之前都要进行列混合运算)和圈子密钥加SubKeyAdd运算,运行执行完毕即得到密文CT。从图1中可以看出,Matlab程序与AES算法框架有关明显的对应关系,且程序结构简洁明了,输入明文分组与密钥参数后,在Matlab中调试运行可进一步使学生看到运行细节,更好地体验数据在算法中的变化过程。