王玥 罗楣宗 肖萌
武警警官学院 四川成都 610213
摘要:为顺利开展疫情期间教学工作,根据密码学学科特点和高校教学安排,对《密码学》课程开展线上直播教学。本文以AES密码算法为例,进行直播教学设计及教学反思,便于今后更好开展教学工作。
关键词:直播教学;密码学;教学设计
一、引言
2019年12月以来,湖北省武汉市陆续发现了多例新型冠状肺炎病例,为了防止疫情进一步扩散,2020年1月26日,国务院新闻发布会要求各地大、中、小学2020年春季学期推迟开学[1]。为了进一步保障教学工作按时完成,教育部1月29日发出倡议:利用网络平台,展开“停课不停学”[2]。各个高校为响应“听课不停学”政策,纷纷采取了多种教学方式,如:线上直播、电视教学、学生自学等。作者根据《密码学》课程的学科特点,并结合当前疫情的形势和教学安排,充分利用网络资源开展线上直播教学。本文以《密码学》课程中的AES密码算法为例,对开展直播教学的工作进行阐述与反思,为今后的教学工作提供经验借鉴。
二、AES密码算法课程设计
(一)教学目标
学生通过学习本节课的内容,掌握AES密码算法的数学基础、设计思想和算法流程,为后序的密码学实验课程打下理论基础。同时增强学生的信息保密意识和保密责任感,为今后从事密码学相关工作打下基础。
(二)教学设计
AES密码算法由于涉及到一些数论的基本知识且加解密流程较为复杂,因此在课程安排上采用4个学时分别对AES密码的数学基础知识、算法的由来及框架、轮函数及密钥生成算法、思考题探讨与分析进行讲解。
1.数学基础知识
(1)十六进制加法
学习AES密码的数学基础知识,可以采用回顾旧知识,引入新课的方法。首先需要同学们回忆一下我们之前学的数的进制。我们最常用的是几进制数呢?答:十进制。除了十进制数,我们还学过哪几个进制?答:二进制、八进制和十六进制。
AES密码算法主要涉及十六进制的加法和乘法运算,下面我们首先来看十六进制的加法运算。这里采用学生自学和教师讲解相结合的方式,发挥学生在学习时的主动性。请同学们先自己看课本上59页的例子,思考为什么十六进制的57+83=D4呢?
同学们通过观察和计算已经了解到,十六进制的加法运算是将数字化为多项式,再将两个多项式做模二加运算,而我们说的模二加运算,实际就是异或运算。比如:这里的57和83分别对应二进制的01010111、10000011,将对应位的二进制相加,做异或运算,得到11010011,化为十六进制就得到了D4。所有的十六进制加法运算,d都采用相同的方法。
(2)十六进制乘法
AES密码需要用到十六进制的乘法,也叫做x乘法。这里采用边讲解边写板书的方式来给同学们讲授。以5713为例:
57对应的二进制为01010111
13对应的二进制为00010011
我们根据13对57进行四次移位,每次移位的结果分别为:10101110、01000111、10001110、00000111。我们将移0位、移1位、移4位的结果相加,得到最终的结果11111110,将结果化为十六进制,得到FE,因此5713=FE。
十六进制的加法和乘法是后期AES密码加密的基础运算,对保障数据安全具有重要意义,需要同学们熟练掌握。
2.算法的由来及框架
AES密码算法的由来主要采用理论讲授、举例分析的方式开展教学。2001年11月,高级加密标准AES(Advanced EncrCyption Standard)被美国国家标准技术研究所NIST宣布成为取代DES的新一代的加密标准。
目前AES被世界广泛使用,已成为对称密码算法中最流行的密码算法之一。比如我们目前使用的微信小程序,就是用这种算法传输加密的。
AES是基于SP网络的迭代型分组密码,具备以下基本参数:
分组长度:128位
密钥长度:128、192、256位
轮数:依据密钥长度而定
这时候通过提问和对比分析的方式,给同学们提一个问题。当AES密码算法的密钥长度为128位时,加密轮数却是10轮,比DES少,这是为什么呢?
答:因为DES算法使用Feistel结构并没有在每一轮迭代中对整个分组加密,单轮的DES只加密64位的一半,而AES是使用SP网络,每一轮要对整个分组的128位加密。
我们下面针对AES-128来分析:16字节的明文首先和密钥做异或,用异或操作是因为快,而且开销小,可使用简单的硬件进行运算。然后,进行10轮迭代,第10轮运算后的输出就是密文。
注意,在入口处和出口处有两个变换。入口处是明文和密钥异或,出口的变换是在第10轮完成的,仔细观察,可以发现,第10轮迭代少了什么呢?答:列混合!这里是和其余9轮不一样的。
图1 AES密码的设计思路
前9轮的加密涉及4种操作:字节替代、行移位、列混淆、轮密钥加。第10轮由于出口处理,少了列混淆。每一轮加密使用的子密钥是不同的。
这些操作都有什么作用呢?我们知道分组密钥要满足香农提出的扩散和混淆,这些是通过轮函数来实现的,第一层字节代替是轮函数中唯一的非线性层,起到了混淆的作用。行移位和列混淆共同构成了线性扩散层,在这里起到高度扩散的作用。轮密钥加起到生成密钥的作用。轮函数是AES的重要部件,下节课我们来重点讲解一下轮函数的工作原理。
3.AES密码轮函数及密钥生成算法
轮函数的及密钥生成算法主要采用理论讲授、举例分析、对比分析的方式进行。
(一)字节代替
字节代替:通过S盒完成一个字节到另一个字节的非线性映射,位置不变。
首先将128比特的数据分为16字节,前4个字节为1列,依次排列。这样就将128比特的数据和4×4的矩阵建立了联系。通过查找S盒完成替换。AES可以看作是用16个不同的S盒完成替换。将数据的高4位作为行号,低4位作为列号,输出行和列的交叉值。
例题:输入为10001101,求输出。
图4 S盒
答:将高4位作为行号,得到8,低4位作为列号,得到d,通过查找S盒,得到输出为5d。
(二)行移位子层
行移位能够实现4x4矩阵内部之间的置换,第i行循环左移i个字节。这么变换能够使同一列中的元素变换到不同列中。目的是增加AES的扩散属性。
图5 行移位
(三)列混淆子层
列混淆就是将矩阵中的每一列列固定矩阵相乘。每个输入字节都会影响4个输出字节,因此列混淆也是AES中的主要扩散元素。
(四)轮密钥加
在每一轮的最后将上一步得到的矩阵与下一步的密钥矩阵进行异或,得到新的矩阵。
图8 轮密钥加运算
(五)轮密钥生成算法
轮密钥基本参数如下:
长度:128比特
迭代轮数:Nr
个数:Nr+1,即4(Nr+1)个32位字的密钥扩展
因为轮密钥需要密钥白化,白化时也需要密钥,所以轮密钥的个数为轮数加1。AES的前4个子密钥是直接取自初始密钥,分别记为W0、W1、W2、W3,后面的子密钥是由前面的子密钥递归生成。
图9 轮密钥生成算法
具体生成的方法:
如果i不是4的倍数,
如果i是4的倍数,首先需要32位的变换,然后将循环左移1个字节,再做字节代替,之后与32比特的常量和异或。AES的解密操作的每一步分别对应和加密操作的逆操作,所有操作的顺序和加密是完全相反的,这样保证了解密能够正确的恢复明文。
4.思考题探讨与分析
下面我们来做一道思考题,同学们将自己计算的结果写在讨论区。
做完后,我们一起来看一下这道题解题的视频,这道题来源于MOOC,老师针对视频中的难点和易错的地方给同学们讲解。通过这道题,相信同学们已经完全掌握AES算法的加解密过程了,那么我们一起来总结一下今天都学习了哪些知识呢?大家可以在评论区将自己的收获写下来。
3.3教学重难点
本节课的教学重点为AES密码的算法流程,由于AES密码算法的整体设计是基于数学计算,因此十六进制的乘法成为本节课的一个难点内容。学生在平时学习的过程中常用十进制进行加减乘除的基本运算,在进行二进制和十六进制的转换后再对转换后的数据进行运算,容易受到惯性思维的影响。同时AES密码的加解密流程比较复杂,涉及的计算较多,学生在计算和加解密时容易出错,因此需要例题来帮助学生理解和掌握算法。
3.5教学方法
由于直播教学不同于传统教学,可以综合线上多种资源丰富课堂内容,同时采取翻转课堂的授课方式,增加学习的趣味性,提高学生学习的主动性。下表中显示每一部分内容采用的教学方法:
三、教学反思
在本次教学过程中,充分利用了直播课程的特点,采用以学生为中心的教学模式,设置多次讨论与答疑,充分调动学生学习的积极主动性,突出学生在学习中的主体地位。
同时,线上直播课程充分利用了网络资源,丰富课程内容,在本次教学中,由于算法的流程和计算比较枯燥,同学们学习的兴趣不浓厚,教师采用给学生设置思考题,给学生观看线上视频的方式讲授知识,使用问题引导学生的思路,调动学生的探索热情,同时又充分利用了线上优质课程的资源,提升教学效果。
直播教学的教学方式比传统教学更多样化,在课程设计中设置了讨论和答疑,还结合了观看线上课程等多种教学方式,提高学生对课堂的参与度,同时还能及时有效的解答学生在学习时遇到的问题,提升教学质量。
四、结论
结合当前疫情形势,为达到“听课不停学”的教育目标,本文以《密码学》课程中的AES密码算法为例,对直播教学进行设计并反思,为今后更好的开展《密码学》教学工作提供经验借鉴。
参考文献
[1]教育部.教育部关于2020春季学期延迟开学的通知[EB/OL].http://www.moe.gov.cn/jyb_xwfb/gzdt_gzdt/s5987/202001/t20200127_416672.html,2020-01-27.
[2] 教育部.教育部:利用网络平台“, 停课不停学”[EB/OL].http://www.moe.gov.cn/jyb_xwfb/gzdt_gzdt/s5987/202001/t20200129_416993.html,2020-01-29.