秦 斌 王艳会
摘要:本文根据计算机专业的培养目标和该专业学生的知识基础,并结合笔者自身的教学实践,针对计算机专业开设“密码学”课程的教学内容和教学方法做了探讨。
关键词:计算机;密码学;教学内容;教学方法
中图分类号:G642 文献标识码:B
密码学是一门由数学与计算机科学两门学科交叉产生、主要研究信息从发送到接收的安全通信和安全存储的学科。本学科自产生以来,便随着互联网的普及而迅速发展,又因现代社会人们隐私观念的增强而蕴含了巨大的市场需求。在国外很多高校的计算机专业,“密码学”是一门重要的课程。而在我国,长期以来,该课程很少被安排在计算机科学与技术专业的教学计划中。近年来,随着中外合作办学与学术交流的不断繁荣,一些高校的计算机专业已开始将“密码学”列为必修课。然而,由于密码学所包含的知识涉及很深的数学背景,而且截至目前为止已经出版发行的密码学教材多适用于数学专业和通信专业,所以很难找到适合计算机专业的教材。此外,国内高校计算机专业开设该门课程时间不长,尚无权威的教学大纲和授课范围,也为本门课的讲授增加了难度。笔者根据自身的教学实践和计算机科学与技术专业学生的知识基础,对教学内容和教学方法进行了一些探索,使学生在能对密码学知识有系统的理解的前提下,充分发挥计算机专业学生的专业技能,令学生达到能够将该门课中的方法应用到实际的能力。
1教学内容的选取
密码学学科所涉及的知识面较广,且涉及较深的数论知识。在很多高校的数学院系的密码学教学中,密码学的理论基础往往是讲授的重点,而这并不适宜计算机专业的学生学习。与数学专业的学生相比,计算机专业学生的长处在于较强的程序设计能力。考虑到计算机专业学生的知识基础,笔者在教学内容的选择中注重以下几个方面。
1.1密码学的发展背景和密码学研究的基本问题
介绍密码学的发展背景和密码学研究的基本问题,尤其是密码体制、单向函数以及伪随机序列生成器的阐述,既让学生对密码学有一个大致的了解,又为以后即将学习的各种加密方案以及密码安全性做好铺垫。另外还需着重介绍一下密码学的主要用途,让学生认识到密码学不止存在于战争中,也存在于我们身边,从而激发学生的学习兴趣。
1.2古典密码体制
麻雀虽小,五脏俱全。古典密码学虽然是较为简单的密码学内容,但对现代密码学的产生和发展有着深远的影响。各种古典密码体制在其设计方案、安全性分析等各方面都是各种现代密码体制的雏形,可以看作是各种现代密码体制的简易版本。通过讲授古典密码体制及其安全性的相关知识,可以进一步加深学生对密码学加密方法的理解,让学生了解加密、解密以及密码破译的具体含义,为下面介绍各种现代密码体制做好准备。在介绍这些内容的过程中,可以让学生编写一些基于古典密码体制的加密软件,激发学生对本门课的兴趣。在讲解过程中,对这部分内容涉及到的数论知识做穿插性的通俗的介绍,这样也可以避免学生对数学理论基础的畏惧。
1.3密码体制的安全性
简单介绍衡量密码体制安全性能的两个方面,让学生能够对密码体制安全性做简单的分析。密码体制的安全性是密码学的重要组成部分,但是这部分内容过程较为繁琐。在讲授过程中,着重从信息论与计算量两个角度介绍设计密码安全性的基本知识。讲授这部分内容的目的是让学生了解常用的密码体制的设计思想。
1.4各种常用的现代密码体制
较详细的讲解序列密码、分组密码、公钥密码等常用的现代密码体制;简单介绍各种密码体制的安全性和破译方法;简单介绍数字签名相关知识;同时将该部分涉及的数论知识作简单的穿插性介绍。这部分是本门课程的重点,也是前面各部分工作的目的所在。在这部分课程中,通过编程实现所学的加密算法是本门课的重中之重,也是计算机专业“密码学”课程的特色。在理论内容讲解完毕后,需要简单介绍编程过程中需要注意的技巧和事项,如C++中指针的应用和函数的应用,必要时可以带领学生编写部分函数代码作为示范。
2教学方法
根据学生的情况和教学内容的特点,为了取得尽可能好的教学效果,笔者在授课内容的组织、授课方法的取舍、实践教学效果的强化以及考核方式等方面做了一些探究。
2.1提出问题——解决问题——提出课下思考问题
由于本门课程的内容较多且较为繁琐,理论基础较深,将所有内容都向学生传授是不可能的。因此在讲授的方式上,可以采用“提出问题——解决问题——提出课下思考问题”的方法。首先,提出一个现实中要解决的问题,如在讲授古典密码学前提出问题“甲和乙通信,信件公开,采用什么办法可使第三者丙对信件的内容一无所知?”这时学生会积极思考,踊跃回答,提出很多方法,而学生所提出的众多方法往往就是本节课所要讲的方法,然后对学生提出的方法分类,并采用严格的专业语言加以表述,引出所要讲授的内容,而“如何客服古典密码学的缺陷——密钥空间太小?”则是“课下思考问题”,而后续课程对这个问题的解决也就引进了现代密码学中的一些密码体制。这样以来,学生对原本陌生枯燥难懂的新知识产生了亲切感,不仅促使学生积极思考,也降低了学习难度,激发学生对密码学的学习兴趣。
2.2鼓励学生改进学习方法,一切为教学效果服务
在具体教学过程中,不鼓励学生上课记笔记,但要求学生全神贯注于课堂;不鼓励学生预习,但督促学生课下及时地、充分地复习。笔者在教学实践中发现,记笔记往往使学生分心,影响听课效果,而且将课上的内容拿到课后再学习,将花费更多的时间和精力,学习效果也难以保证;而课前预习往往导致两个不好的结果:或者使学生对即将讲授的课堂内容掉以轻心;或者使学生感到学习内容太难,打击其学习的积极性,另外,预习时由于没有老师指导,学生花费的时间较多而收获较少,因此与其让学生将时间花在预习上,不如让其将时间花在课后的复习上。
2.3着重培养学生对所学知识的应用能力
与其他专业的学生相比,计算机专业的学生具有较强的程序设计能力,而密码学也是一门以电子计算机为实现工具的学科。因此计算机专业的“现代密码学”课程教学应该重视培养学生运用自己的编程技能将所学到的加密算法编制为应用软件的能力。在这个环节上,有一些重要的编程技巧需要强调,比如模块化的软件设计思想,C++函数与指针的使用。使用编程工具将所学的加密算法编写成应用软件是计算机专业“现代密码学”课程教学相对于其他专业密码学教学的一个特点。图1是学生使用C++编写的基于DES分组密码体制的界面。
2.4注意拓宽学生在本课程方面的知识面
课堂上的时间是有限的,难以对每种方法都加以详细介绍,因此在每次详细讲解过具有代表性的经典算法后,便将其他同类别的加密方法做一个简要的介绍,让学生对这一大类方法有一个总体的了解,比如在讲完DES分组密码后,可对美国国家标准技术研究所于2001年推出的AES分组密码做简要介绍,并带领学生分析它与具有代表性的分组密码DES的不同,如此有利于拓宽学生的知识范围;再者,不同的教材往往采用不同的组织思路和表述方法,比如在计算复杂性理论部分,不同教材描述计算复杂度所用到的表述方式相差较大,笔者采用的是较为直观的、涉及理论基础较浅的表述方法,在讲解完该种方法后,再向学生简要介绍一些基于图灵机等较复杂的描述途径,这样使学生对所讲述的内容理解更加深刻。另外,由于科学总是在实践中不断地发展,密码学新方法、新技术、新进展不断涌现,在课堂上对这部分内容加以介绍,并将其与课上所学的理论基础联系起来,对于加深学生对所学内容理解是很有好处的,比如若选讲杂凑函数部分,可以简要介绍一下我国女科学家王小云教授分别于2004年和2005年破译MD5和SHA-1的事情,这样学生不止了解了该门学科的前沿进展,而且能够认识到目前所学的基础知识的重要作用。
2.5重视实验环节,改革考核方法
实验是本门课程的重要环节。本课程中可以设置实验的内容有古典密码体制、序列密码体制、分组密码体制、公钥密码体制以及数字签名等。其中古典密码体制由于原理简单,易于完成,而且将该实验中的一些函数和类进行相应的替换和扩充,可以得出其他现代密码体制的实验结果,并且使学生在该实验过程中熟练可视化编程工具的组件使用,引导学生逐渐适应实验的难度,避免学生直接面对后面较难的现代密码体制实验而无从下手、望而却步;对于后面几个现代密码体制的实验,难度渐增,可以根据学生自身的能力和时间选做1~3个。
期终的考核是对学生平时学习的督促,也是对学生学习侧重方向的指引。笔者根据本文所提出的教学理念,采取了侧重应用能力的考核方法,即在平时表现、实验成绩和考试成绩三项中,实验成绩所占的比重不低于其他两项。
3结论
“密码学”是部分高校计算机专业近几年新开设的课程。计算机专业的培养目标和该专业学生的知识基础决定了该专业的“密码学”授课方式和重心不同于其他专业的同种课程。教师要从学生的实际情况出发,充分发挥学生的专业优势,尽力激发并维持学生的学习兴趣,才能取得好的教学效果。另外,计算机专业的各门课程都不是孤立的,寻找各门课程中的各种机会锻炼学生诸如程序设计能力等专业技能,无论对与学生本门课程的学习,还是对学生整体专业素质的培养,都是大有裨益的。
参考文献:
[1] 章照止. 现代密码学基础[M]. 北京:北京邮电大学出版社,2004.
[2] 范九伦. 密码学基础[M]. 西安:西安电子科技大学出版社,2008.
[3] 蔡乐才. 应用密码学[M]. 北京:中国电力出版社,2005.