致信息安全专业同学的一封信

时间:2020-12-05 18:24:54

      你们好,我先简单的自己介绍一下,我是西安邮电学院04级信控系信息安全专业的学生,我们当时是第一届,总共79人,我去年毕业,现在在北京大学软件与微电子学院学习,考研的时候报考的是软件开发专业,但是到这边以后转到了信息安全系,继续信息安全方面的学习。我并没有什么资格进行长篇大论式的教诲,我只是觉得我大学四年走了很多的弯路,而在研究生阶段的短短几个月,却感觉进步不小,所以个人觉得我私人的教训有点值得借鉴的地方,因此就在我的研究生第一个学期结束的这会,写一篇长长的文章,把我以为可能有点裨益的东西写写。我前几天和一个朋友说我要写写,后来发现我那个朋友比我写得还早了两三天,今天这里信笔写去,倘若能够对我们专业后来的学弟学妹有有那么点小小的裨益,则不枉我花费了几个小时了。另外,我先声明,我并不是一个高手,这里写的很多东西我自己也不太了解,但是我知道我应该去了解,或者是值得我花时间去了解,仅此而已。

  为了叙述上的方便,我按照几个主题来进行讲述吧。

  一:关于我们专业的课程

  信息安全的话,我们学校的专业课程总体设计还是比较合理的,但是我一直有一个偏见,就是搞信息安全的话,如果不是真正成为技术高手,很难靠这个专业吃饭,而要真正在信息安全方面(尤其是指技术方面,而不是理论研究方面)有所深入的话,我以为计算机系的一些课程我们都是应该好好学习的,比如计算机体系结构,编译原理,汇编语言等,并且我以为要搞技术,比如软件破解,漏洞,病毒等,汇编语言首先要熟悉,否则根本没有办法使用最为重要的几个安全工具,比如反汇编,逆向工程之类,都需要我们掌握牢固的汇编基础。而我们的有些课程实在不是很好,比如防火墙,病毒,入侵检测,以及网闸,其实这些课程都是一次两次课就可以搞定的,我们研究生的话,这些以及其他一些方向的概论,就是一门课,讲的内容我看也比大学那会的多,倘若是我要学那方面的知识,我想我会先下载一篇相关的博士论文或者是优秀的硕士论文,大概了解一下该技术的发展概况,使用到的主要技术,原理讲解,分类,以及最新的技术方向,展望之类。一篇综述性的论文的含量我估计不比我们当时的一门课讲的东西少。

  二:关于我现在研究生课程的教学

  我们现在虽然不是特别好,但是我觉得这样的教学模式还是比较好的。我现在的专业课程不多,就三门,一门是密码学,一门是网络与信息安全概论,一门是安全程序设计。我先大概说说教学模式,一般我们比较理想的模式是,以项目为核心,以小组为组织,进行学习。这样的话,几个有共同兴趣的人可以一起看一两本该方向的书籍,遇到不会的也可以相互请教,而一个项目的话,一起合作又有它的好处,比如协调,比如带动后进的,当然我们的项目都很简单。这里简单说说几门课程的主要内容,现在的密码学和之前大学那会的还是差不多,不过容量远远大了。在第四点我会主要讲讲密码学,因为我觉得密码学是信息安全技术的基础,重要性不言而喻。这里说说我们的安全程序设计吧,我们课程没有考试,就要求一个项目,五个人一组,项目大概有一下几个:

  openssl库研究报告

  CryptoAPI库研究报告

  .NET平台下的安全技术

  Java语言安全问题

  Windows平台下的ShellCode实现技术

  SELinux机制研究

  Web应用访问控制框架设计

  Linux平台下简单Shell实现

  Windows平台下简单Shell实现

  这些我觉得都是很不错的一些小项目,你们也可以自己好好研究研究,比如.net和java的两个,不仅有关安全,也很实用。而像openSSL 和CryptoAPI等最重要的信息安全方面的开源库,好好研究都是大有裨益的,这里在下面将详细讲讲。如果有熟悉Linux的,学学SELinux等也是不错的,做网站的,在Web应用访问控制框架设计这方面下点功夫,也不错。

  2

  致信息安全专业同学的一封信

  三:关于编程语言

  这个的话,如果是坚定从事信息安全方面的工作,还是老老实实把汇编语言和C/C++学好比较实在,而我发现我们这一届的编程基础都极其糟糕,这里没有夸大的意思,的确是极其糟糕。当做毕业设计的时候,或者是大四课程设计的时候,我发现很多同学写个HelloWorld或者从1加到100的小程序还没有能够写出来,要么就是程序风格一塌糊涂,要么就是语言不太标准。

  关于语言,首先得指出,我们这一级的所有同学,可能也就是三四个在汇编语言方面稍微入门了,但是熟悉的估计就是两个或者不到。这是很可惜的,大概是和当时老师的教学方式有关,另外就是教材的选择上不是很好。汇编我自己也是很糟糕的,不过我正打算全力学习,因为我清楚,不能够攻克汇编,几乎大半的信息安全技术我根本不可能学进去。这里推荐几本书籍,一本是《汇编语言程序设计》,红皮的,国外的,具体作者忘了,从C和C++的角度,反过来学习汇编,可以说会有预想不到的效果。另外一本是很厚的《深入理解计算机系统》,这本书讲得透彻,不管是对学习计算机系统还是学习汇编,还是提供C语言的功力,都应该大有裨益。

  另外,再说说C语言吧,我们这一届的总体上C语言也没有学好,原因的话,我觉得和教学方式以及教材都有很大的关系。教学的话,在编程方面没有足够重视,我们当初抄来抄去的挺多,自己真正编写出几个程序并正常运行的,估计都没有几个,我当初自己也几乎没有写出过什么程序,期末混过去的,刚好60.后来我有了电脑,才自己学习,总算把C语言补上了。这里要说的有几点,

  (一)老师没有足够重视上机环节,并且这门课程应该使用多媒体教室,至少对编译环境进行简单的介绍,并且在课程开始的时候,至少使用几个简单的程序进行示范,因为我当初到考试的时候还没有搞懂怎么编译,怎么运行。

  (二),使用好的教材,这方面的话,好教材挺多,但是我觉得谭浩强的并不是特别好,原因有一下两点,1,语法不符合新标准,这个估计是连老师自己也不清楚的了,2,将语言与算法混杂在一起,不利于学习语言,语言只是一个工具,不必要将算法之类的东西放在语言的课程上。我推荐看的教材是K&R的《C程序设计语言》,这本书篇幅短小,讲解到位,并且提供了很有用的习题,那些习题在细节上是很有挑战性的,可以说倘若有时间把那些习题全部做一遍的话,参加大公司的笔试没有问题。另外,国外两父子写的的How to 系列,也是学习语言很好的书籍。至于深入的,可以阅读《C专家编程》与《C与指针》,这些书籍现在都不好买,但是都是可以找到电子书的。C++就更多了,我觉得《c++ primer》《C++程序设计语言》值得好好看看,《c++编程思想》和Effective之类的也很不错,最难的可能就是侯捷翻译的《深度探索C++对象模型》了。

 

(三)使用方便使用的编译器,而不是选一个不友好并且陈旧过时的编译器,我们当初使用的就有点糟糕,并且老师并没有进行详细的介绍,机房又不能上网。最好是使用短小精悍的,并且对标准符合程度好的,这些你们可以很方便地在网上找到相关的文章,这里就不多说了。

  我建议,大学的时候,汇编,面向过程,面向对象的语言都要学学,具体哪种语言倒没有多大关系。

  另外,如果你们能够争取到在大一就可以上网,将是大大有助于学习程序设计技术的,因为遇到语言学生上的问题,一般在网上都已经有了解决方法了,只要搜索就可以了,这样的话,刚入门的时候就不至于有“这门语言太难了”的畏惧心理,我认识一个北大的大一新生,他们的C语言,每节课都有编程的任务,放在网上,一次大约5-7道编程题,难易不一,要求编程后提交,如果出错有出错提示,直到你提交的程序能够得出正确的输出结果才算过。我觉得这样的学习方式非常不错,很值得借鉴。

  3

  回复:致信息安全专业同学的一封信

  四:关于密码学等课程

  之所以对密码学这门课程进行特别的说明,一方面是因为我觉得这门课程在信息安全领域的基础性作用,另一方面则是我自己对这门课比较了解一些,本科也恰好学了两个学期,进行对比一番,可能比较有针对性。大学开了两门课,一个是密码学,一个是现代密码学,现代密码学这门课其实不必开了,放在密码学那门课的最后一两次,做一个简单的介绍也就可以了,因为我们当初好像考试时候,大家无非就是背背不超过40页ppt的内容,而一般上课的话,一次课讲40页左右还是可以的。

  下面说说密码学这门课,大家不要以为这是一门理论性太强而太不使用的课程,恰恰相反,密码学在信息安全的各个领域都是最为重要的。不管是操作系统,还是桌面软件,还是网络通信,密码学都发挥着重要的作用。密码学也不是太理论的课程,因为有一大堆的密码库,不管是windows平台的密码库API,还是.net与java都提供了密码方面的类库。并且网上有一大堆的加解密工具,也有一些常用的加解密算法的实现,一些MD5,SHA-1的工具,这些都为形象理解密码算法的原理与应用提供了很不错资料。而密码学也是最为容易学习的,比如简单实现一下近十个古典加解密算法,有选择得实现一些经典的对称加密和非对称加密算法,对于操练自己的程序设计能力都是不错的。编程不太行的话,那么你去了解了解windows的cryptoAPI或者是crypto++之类的类库,写写简单的加解密算法测试测试如何使用,对于学好密码学,已经提高对密码学的兴趣,都大有好处,另外就是,如果自己对.net或者java比较感兴趣,可以对这两个框架提供的安全方面的类库和其他支持进行学习,就拿java来说,就有《Beginning Cryptography with Java》这本好书,选择这样的书籍进行学习,可以说是一箭双雕,理论结合实践,效果好。

  我们这学期也开密码学,讲了古典密码与现代密码,讲了数论,讲了组合群论,讲了安全协议的一些东西。课程项目就是实现DES,RSA以及一些古典算法,还有就是素数测试的很多算法,这里也顺便提提以供参考。

  这里重要介绍几本书,《应用密码学—协议,算法与C源程序》,作者是这本书可以说是密码学的圣经级著作,分析了非常多的密码算法,密码协议,每个算法都讲解详细,并且对每个算法的速度,安全性等进行了巨细无遗的剖析,该著作是国际知名的安全专家,自己维护有一个网站,并且每个月发布一封免费的有关密码学最新动态的邮件。详细信息请自己搜索。

  还有一本也是不错的,《密码编码学与网络安全》,这个我就不详细介绍了,请自己查找相关信息。

  五:介绍几个论坛

  国内的好论坛好像不是很多,我现在知道的也就是几个而已,我以为逛论坛看看相关专业的发展趋势,以及一些专业方面的新闻,看帖学习,发帖请教,是很有效的学习方法,并且好的论坛,一般都会积极回帖,帮助新人的。下面是几个网站或论坛。

  看雪软件安全网站:

  http://www.pediy.com/

  这个论坛牛人很多,并且有很好的技术讨论氛围,论坛里有很多非常不错的信息安全工具,牛人多多,并且该论坛出版了几本信息安全方面的书籍,非常推荐去逛逛。

  网络安全焦点:

  http://www.xfocus.net/

  这个论坛是看了一本《网络渗透技术》后才知道的,因为这本书就是这个论坛的高手写的,这个论坛不太熟悉,不过也举办了几次会议,水平较高。

  http://www.securityfocus.com/

  这个是一个很不错的国外网站,并且有几乎信息安全各个领域的邮件列表,大家可以订阅一下。

  http://www.schneier.com/

  这个就是上面提到的《应用密码学》一书的作者公司的网站,很不错,该作者自己也开发了几个很有名的密码算法,当初AES公开征求算法的时候,他开发的名列第二。

  4

  回复:致信息安全专业同学的一封信

  六,介绍一些书籍

  好书太多,我简单写一些书籍的名称,至于详细的信息,你们如果有兴趣把我的这篇文章看完的话,应该是会自己去查阅相关的书籍信息的。

  操作系统方面:《操作系统概念》,《UNIX环境高级编程》,《windows内核编程》,《深入解析windows操作系统》

  程序设计方面:《C程序设计语言》《.net框架程序设计》《java核心技术》《深入理解计算机系统》,罗云彬的《Windows.环境下32位汇编语言程序设计》等

  信息安全方面:《应用密码学》《密码编码学与网络安全》《安全程序设计》《构建安全的软件》《securing Java》《编写安全的代码》《黑客大曝光:网络安全机密与解决方案》。《Beginning Cryptography with Java》这本书尤其推荐给学过java的同学,这本书不仅对于java程序设计有好处,可能也是学习密码学的最佳书籍之一。

  其他方面:

  《TCP/IP详解》,

  《Unix网络编程》,

  《计算机网络》(这个是国外最权威的所谓龙书,影印的已经有高等教育出版社引进了),《代码大全》,这本书通俗易懂,深入浅出,适合各个层次的开发人员,让我受益匪浅。

  《计算机程序设计艺术》与《算法导论》,这两本计算机算法领域最为权威的著作,但是前者太难,我虽然买了,但是就是翻阅了一部分,适合作为参考书。后者相对比较适合通读,详细介绍几种算法设计技术,并且包括数据结构。

  5

  回复:致信息安全专业同学的一封信

  八:介绍几个软件:

  软件的话,最好直接去看雪论坛看看,那个论坛提供有很多安全方面的工具软件的下载,也有这些软件的使用指南之类的资料收集。下面列出几个常用的软件。

  Gdb

  WinDbg

  Snort

  Sniffer

  Winpcap

  Ethereal

  IDA

  上面这些工具,鉴于时间关系,同时也因为篇幅不宜太长,就不进行介绍,但是可以说每个都是非常重要的安全工具,倘若想从事信息安全技术行业,建议还是至少了解一下,倘若能够掌握几个,那更是最好不过。

  6

  回复:致信息安全专业同学的一封信

  九:给大四考了研或者以后准备考研的同学的几句话

  给考完研的同学:

  你们如果编程能力不行的话,还是尽快好好补上,至少得把C语言好好不上,面向对象的如果有时间,学学c++或者java或者c#都是可以的,如果足够牛,学一两门脚本语言还是很有必要的,因为网络攻击很多时候需要使用到脚本程序。我们班当时考上研究生的一些同学,编程能力很不行,我个人觉得如果编程不行,搞信息安全的话,技术肯定是不行的,但是数学不行,搞理论更是不成了,所以就是上了研究生,也不可能在将来从事信息安全方面的研发工作,只能是沾边了,而转到软件开发的话,编程不行肯定也是不会有什么公司要的。这里建议真想好好学习的同学,赶紧好好在程序设计方面下下苦功,其实编程并没有那么难,要有信心,不要因为大一没有学好就彻底没有了信心。另外,因为要做毕业设计,这是一个很好的锻炼自己的编程能力的机会,不要轻易放过,更不要让其他同学帮你做,要不后悔莫及。

  给将来准备考研的同学:

  可能你们的选择是对的,要是你准备转行,比如转到软件开发,或者到通信行业,那无话可说,但是如果要在信息安全专业上进行到底的话,那么选择考研应该是一个正确的选择,因为信息安全学科是一门新的,综合性的,高难度的学科,要想在大学四年就学好,并且靠这个专业吃饭,显然是不大可能的。考研的话,建议在平时的时候,选择国外最好的书籍作为学习的资料,比如计算机网络的,操作系统的,编译原理的,程序设计的,数据结构,算法设计,只要搜索互联网,这些学科一般都是有公认的国际上最优秀的教材的。这些教材一般深入浅出,更新快,习题经典,覆盖范围广,不仅适于学习,也适于工作后参考。

  十:结语

  今天晚上花了两三个小时写这篇文章,虽然不好,但是我想对我们学校信息安全专业的的学弟学妹们应该还是有一些借鉴之处的,我们作为信控系信息安全专业第一届学生,并没有能够给你们立下一个很好的榜样,但是我们希望我们能够给你们提供一些学习上的建议,或者是以后就业方面的经验教训,希望你们都能够青出于蓝,一届胜过一届,为我们学校的信息安全专业争一口气。我们没能够做得更多,而我们毕业后的学生的确是乐意为你们做点什么的,也希望我们专业从此有一个传统,保持相互交流,让我们共同把西邮的信息安全专业搞得更成功。最后谢谢耐心读完这篇文章的同学。

  我的邮箱是yeshunping@gmail.com,倘若有可以帮得上的,我将很乐意帮忙,但是无关学习的请勿打扰,另外我也不是技术高手,上面提到的很多,其实我自己也正在学,或者是很想在将来好好学。所以,技术上的具体问题,我也帮不上。我只是在我自己学期已经结束的当口,写点或许能够给你们一些借鉴的东西,同时也是给自己一次总结。最后祝你们学业有成,打造一个更为优秀的信息安全专业品牌。

  04级学生叶顺平

  2009年1月16日