未邀自答。
本来我都关机、躺下、准备睡觉了,结果手贱点了知乎,看到了这么一个问题,又看到好朋友
@scalers回答了这个问题,忍不住又把电脑打开,准备花一点时间认真回答一下这个问题。这可能不仅是对问题本身的回答,也是差不多这一年来我对信息安全这个领域的理解和体会吧。
=============================
利益相关:
=============================
0. 总体感受:人才既饱和,又匮乏
现在安全行业的现状基本是:上层人才极度匮乏,下层人才极度饱和。
大概半年多前和一位领域内的人士聊天,对方说了这么一句话:
我们招人要求真的不高啊,只要领域相关,7年以上工作经验就好了。
当时,幼稚的我心想,我靠你逗我呢,这还要求不高?哪儿找安全领域干7年以上的人去?经过半年的折腾,我现在的感觉是:这个要求真的不高,一点都不高,可能太低了…
为什么?因为信息安全这个领域太大了,大到什么程度呢?大到做这个领域的人可能需要把几乎计算机科学的所有领域全理解(注意,不是了解,是理解)以后,才能集大成,然后把这个领域做好。
=============================
1. 数学和计算机理论基础要求
信息安全中最理论的基础是密码学。密码学谁提出来的?图灵提出来的。为什么是他提出的密码学?因为密码学的实现基础是图灵机,或者说是有限自动机原理。密码学的理论基础是抽象代数和信息论。想要比较深入的学习密码学里面的知识,至少要明白计算机领域的归约(Reduction),计算复杂性理论;至少要明白抽象代数里面的群(Group)、环(Ring)、域(Field);至少要了解信息论中信息熵的概念;这些如果不理解的话,安全证明估计就过不去了…
要是追新,看看密码学界的发展,起码说提出一个名字能明白是什么意思,估计得了解了解椭圆曲线(Elliptic Curve),双线性对(Bilinear Pairing)或者多线性对(Multilinear Pairing),格(Lattice)等等。
=============================
2. 编程能力要求
有人说了,我不用学密码学理论,我能看懂论文,把方案实现了就行了啊。因为实现的方案从理论上是否安全,要考察参数的选择。参数选择的话,就得看懂安全性证明了。我个人只是做了Java Pairing-Based Cryptography Library(jPBC)的一些实现,几乎时常会收到很多邮件,询问这个库怎么用,为什么自己实现的不对。多数情况都是因为对根上的东西没理解,导致用起来不对。
有人说了,我也不用看懂论文,我能写最经典的密码学算法,能正确调用就好了。很遗憾,就算是最经典的密码学算法,即使是有经验的开发人员,绝大多数都不能正确实现。仅以RSA为例,请移步我的专栏文章:
RSA有多安全,有多不安全?Black Hat 2014 - The Matasano Crypto Challenges解析 - 第一部分 - 刘学酥的密码学与信息安全专栏 - 知乎专栏看看里面有多少坑吧。
=============================
3. 计算机相关技术能力要求
有人说了,我不用写密码学算法,我能正确用就行了。提到网络通信,就有计算机网络的相关知识了。我个人感觉计算机网络知识的复杂度现在和操作系统都差不多了。尤其是现在分布式系统,比如分布式计算和分布式存储技术的普及,分布式计算机网络本身就构成了一个比操作系统还要复杂的总系统。做安全的话,没有计算机网络和操作系统的知识几乎只能做点皮毛工作。
提到网络和操作系统,就会想到这本身就需要比较强的编程能力。举个简单的例子,Java优秀的网络通信框架Netty和MINA(感谢
@Edsger Lin的指正,这里打错了),是不是需要了解一下?HDFS,MapReduce是不是了解一下?要不要看看源代码… 来吧,这相关的资料、书籍,可以放满一个书柜了。
=============================
4. 网络安全技术要求
有人说了,我也不用懂这些,我是做技术的,了解网络知识以后,找漏洞挖漏洞,直接走向人生巅峰!怎么说呢,漏洞这个东西虽然知识本身要求的不深入,但是非常考验广度。比如数据库的了解,网络得了解,各种Web语言得了解,里面有什么坑得了解。而且,很多时候漏洞检测和网络渗透会涉及到语言本身上去。举个例子,Black Hat 2014中有个视频,所在的公司开发了一套漏洞检测工具Ravage(为什么我知道,我听译的…
逆天漏洞检测及渗透生成工具——RAVAGE课程详情)。这个工具的制作已经深入到JVM的汇编层了。
=============================
5. 文档能力和与人交流的能力
信息安全领域,不光是技术层面的,还有人员层面的。软件开发过程中出现的漏洞,绝大多数都是开发人员没有遵守安全软件开发要求而导致的。同时,各个公司、各个产品的安全架构,安全技术都不太一样。这种时候,为了保证产品的安全特性,就需要文档撰写和阅读能力,以及交流能力了。我和某位领域内人士交流的时候,总听到一种抱怨:我靠,这安全机制不是瞎搞么,这怎么评估,怎么实现?
很遗憾,互联网发展太快了,很多东西都没有模块化体系化,现实就是这样。想要解决这个问题,就需要一群在计算机各个领域内都精通,或者退一步,都了解的人,将各种安全技术和产品抽象,从而提出并设计架构。这样才能提出一种比较通用的方法,从架构上去解决大部分的安全问题。不过这对一个人的要求可是有点高啊。
安全又仅仅是技术问题吗?非也。信息安全中,技术占3成,管理占7成。技术再好,密钥管理不成熟,开发流程不成熟,访问控制机制设计的不成熟,甚至私下交易,从内部泄露用户隐私,也会导致严重的安全问题。这并不是耸人听闻。CSDN密码数据库泄露可能仅仅是冰山一角。要我看,用户的密码早就被泄露光了… 当然现在已经好了很多。这就意味着,管理也是个很困难的问题。说到管理,交流能力也是必不可少的。
=============================
6. 其他能力
信息安全和通信技术是密不可分的。通信技术的发展必然会导致信息安全技术的发展。举例来说,枚举法是最没创意的攻击方法了。但是现在有了高性能计算机,分布式计算机系统,对于几年前的数据,用枚举法可能反而比其他方法更快。另一个例子,量子计算领域现在蓬勃发展,没准几年,十几年或者几十年后量子计算机就普及了。这并不是不可能,想想计算机从刚出现到现在人手几台一共花费了多长时间?那个时候,现有的体制全部推翻重来,作为安全人员就要更新自己的知识库了。当然了,这个例子有点极端,量子计算机真的来了,所有计算机科学相关的从业人员就要洗牌了。
总的来说,信息安全领域要求从业人员随时学习,随时更新知识库。而且这种更新速度是依赖于计算机科学这门学科的发展而来的。2008年DDoS攻击还没影子呢,现在DDoS几乎就是家常便饭了。网络的迅速发展,特别是后面云计算云存储的发展,给安全从业人员又带来了更多的问题。这必须要求从业人员随时更新自己的知识,持之以恒的站在最前沿思考问题。
=============================
7. 有人能做到吗?
我自己只是在公钥密码学中的一个很小的领域有一点点很小的成绩。因为计算机基础知识不足,接下来的一年我估计要各种补基础知识了,而且估计还补不完。上面说的这些对人才的需求,基本上只要精通一点,就是领域内的佼佼者了。
所以,信息安全领域是一个集大成的领域。而且几乎任何一个分领域对于领域内知识的要求,都高于本身的要求。因为基础不够的话,想做安全就有点痴人说梦了。
=============================
8. 回到主题:会饱和吗?
回到问题上面来,安全人才会达到饱和吗?我认为有生之年能把上面说的起码都做过一遍,几乎都是不可能的。信息安全的人才要求很高。能力强,哪怕是一方面能力强,都可以从茫茫人海中脱颖而出。一个直接的体现就是信息安全周围配套内容的普及。我在做Black Hat,包括密码学一些视频的听译时,就尝试过让别人帮忙听写,我来翻译。结果,即使是专业听译人员,拿到这些视频也都瞎了。因为专业词汇太多,几乎是中文都不知道什么意思。Black Hat系列这么好,为什么一直以来没人做字幕,听写翻译?因为确实对听译人员要求很高。我自己水平有限,只能听译密码学、Java、以及部分数据库、网络通信相关主题的Black Hat,而且也会遇到各种问题,遇到从来没听说过的技术、开源代码、工具、或者思想。当然这个过程也是收获的过程。
所以,从高层看,信息安全人才应该一直会保持匮乏的状态,等待新鲜血液的注入。
另一方面,由于门槛太高,不少人会在门外徘徊。门外的人多了,饱和一词也就来了。
对于我自己,虽然得到了领域内人士的部分认可。但是,越往里面走,越发现里面的坑有多深。唯一的办法就是不停的学习和更新知识。毕竟,学习要比提出新方法简单多了,大家说对吗?
=============================
9. 只有信息安全领域是这样?
就如同事物都是螺旋向上发展的一样,正像其他回答说的那样,任何领域都是:水平不高,哪里都饱和;水平高了,哪里都会要。什么叫水平高,高到什么程度就够了?我认为没有尽头。一个领域,越是钻研,越是往深了看,就越发现自己的渺小和无能。这会反过来导致更强的求知欲和更强的动力。等觉得自己小到只是一个沙子的时候,抬头一看,可能就会明白,绝大多数人,可能连分子大小都没到,但他们认为自己内部的原子和电子,就是整个世界。
希望我们都能成为一粒沙子,看着大海的波涛汹涌,而毫无意识的,为这个世界的组成贡献自己的一份力量。
以上。