密码学的总体内涵和特征(下)
撰文 | 康老师
上一回展现的是密码学大厦的体系结构,这回将从空间维度转移到时间维度、从静止展示转向动态展示,接着阐述密码,从上下几千年的密码学发展历史这样的宏观角度转向更微观的个体角度,如果能将密码系统比拟成人的话,让我们一起看看一个密码系统的一生是个什么样子。
上期说到了密钥可以理解成是密码中可抽象分离出的可变部分,要说清密码系统的生命周期,我们需要首先说清密钥这个可变部分的生命周期怎么变化。这么安排的另一个原因是由于专业术语使用的不严谨性,造成不少科普和报道性文章里混淆了密钥与密码的概念,明明只是说的暴力破解弱口令很容易这回事,非要扣上“几分钟破解你的密码”这种耸人听闻的标题,唉,密码学家表示,这个锅不能背啊。
一个密钥匆匆而过不留痕迹的一生
由于密钥具有的价值,使得它成为密码攻防方争夺的焦点,守的一方要千方百计藏住它,攻的一方不惜代价要拿到它,拿到了多少密钥,就相当于拿到了多少明文,有了密钥,加密就瞬间透明化了,攻击方甚至完全不用再攻击难啃的“破解算法山头”——至少也可以大大降低攻山头的难度。
因此,虽然密钥本身仅仅是一个无意义的比特序列,但它从诞生开始,就受到密钥管理系统的严格管束。反过来讲,密钥管理系统之所以会做得功能很复杂,安全要求很高(密码管理系统的安全要求普遍高于密码应用系统),也完全出于妥善管理密钥的目的。
密钥管理过程包括密钥的生成、存储、分配与协商、使用、备份与恢复、更新、撤销和销毁等内容。这些“强加于”密钥身上的管束,简单的总结起来就是要做到密钥不可预测,遵循密钥有效期限制、绝不重复使用。
假设密钥可预测,或者哪怕是可预测一部分,那对敌方就方便了,也不用去费劲偷你的密钥了,简直是“闭门家中坐,信息天上来”。因此密钥的生成最讲究出处、讲求质量,最起码要使用密码领域专用的伪随机数生成算法。而真随机数发生器产生的密钥质量高于伪随机数算法,伪随机数算法生成的密钥质量又高于通过口令扩展方式生成的密钥,其原因是源于各自熵源的不同,在此就不展开了。
密钥作为密码中的可变部分,需要及时进行密钥更新,密钥更新是密码应用系统和密钥管理系统共同配合、主动完成的。
密钥有各类的用途,有代表各类实体身份的身份密钥,有对某段明文加密使用的工作密钥,有实施密码管理用途的管理密钥等,其生命周期也各不相同,但即使生命周期相对最长的身份密钥(证书有效期就是密钥有效期的典型例子),也需要定期更换(证书有效期最长是几年);即使比较难于更换的管理密钥,也要采取由旧密钥通过一定算法计算生成新密钥等较封闭的方式定期更换;更不要说数量需求最大、使用最频繁的工作密钥了,不仅像一次性用品一样“用过即抛”——不重复使用,还恨不得让它“一出场就赶紧下台”——使用时间尽量短、更新频率尽量快。
OK,说到这大家理解了吧,一个密钥的愿望真的是匆匆而过不留下一丝痕迹,“挥一挥衣袖,不带走一丝云彩”,既不要感觉到我的存在,更不要感觉到我的迭代,若是留下了痕迹,等于给敌人留下了破解明文乃至破解密码的启迪。
一个密码励志而又纠结的一生
这里我们想讲的是一个密码系统励志而又矛盾的一生。
说它励志,是因为一个密码系统的诞生,耗时漫长(至少数年乃至十数年不足为奇),充满了人类艰辛的劳动,类比一下,研发新型密码系统可真不比研发一款新药物省劲。
说它纠结,是因为一个密码系统从酝酿、设计开始到退出历史舞台,就是一个不停自我验证、自我怀疑与否定的过程,就是一个密码的攻防两派不停斗争博弈的过程。尤其是应用于高安全需求的密码,必须从理论上、从实施上能够抵御惟密文、选择密文、已知明文、选择明文等已知攻击方式;从工程实现上,做到防拆解、抗逆向工程等;即便如此,面对未来的未知攻击,到底能不能顶得住,大概率仍然是个未知的问题,不由谁的意志所左右。
你说这是不是可称为励志到进无可退又纠结到左右为难呢?
密码复杂但并不神秘
密码系统很复杂,因为它是数学、计算与通信科学、工程学等诸多学科的综合,但密码并不神秘,从简化的角度看,可以把密码系统看成主要由密钥、密码算法、算法软/硬件实现的模块/设备、密码管理模块组成。无论采用何种密码体制,这“几大件”都是固定需要的,而且这样进行细化区分就能从变与不变的角度、从理论逻辑与工程实现的角度、从应用与管理的角度对一个密码系统进行层层分解,非常有利于把握其内部功能模块的各自特征。
上一节已经谈了密钥的特性,这里讨论一下密码算法,密码算法可以理解成是密码系统中可单独理论抽象出来的运算函数,密码算法一定需要有理论支撑,无论这个支撑是数学、密码编码学、计算复杂度、乃至是物理学;一个密码系统出于用途分离、运行效率、安全防护等多种需求,其所使用的密码算法一定是多个,因此对其安全性的关注也“一个都不能少”。提到算法,不能不提到算法公开性原则,算法公开的做法很有效率,这从之前美国国家安全局NSA公开征集分组密码算法、最近美国国家标准技术研究所公开征集后量子公钥密码算法的行为可以看出来,可以把它看做是力图建立好的密码系统的一种特殊“众筹”行为,能够以最大限度和最快速度筛选出好的密码算法,避免算法存在漏洞将造成的更大损失。
说完好的密码算法,密码算法还需要有好的、独立完成的工程实现,这点无论是对软件形式实现的代码模块还是硬件形式实现的密码专用设备都是成立的。通过工程实现,密码系统才最终由理论、由方案转变到实物,完成了具象化、实体化。密码系统的工程实现涉及算法的正确实施、涉及功能与安全性的验证、乃至涉及为密码更安全所加上的特殊技巧,因此,技术含量可一点也不低。没有哪个密码设计者会愿意将密码工程实现假手于人,去做“外包”、“众包”,这也就说明了就算使用的密码算法是公开的,并不意味着基于此算法的密码系统要公开。
到这可以总结下,密码的复杂和困难在于:设计密码算法既需要经验与技巧,更需要建立牢固的理论支撑,密码算法的工程实现需要严谨的验证,密码管理既需要面面俱到、严丝合缝,又需要最大限度方便用户使用。
密码的诞生——我太难啦
一个密码系统的诞生涉及算法设计、论证验证、工程实现、出台使用管理规定等诸多环节,这也就是开发高强度密码极其困难、耗时很长的原因。更尴尬的是,不管因为破解的利益驱动力大也好,因为设计时考虑不周也好,有的密码开发出来很快被破解,不仅快速宣告了自己的失败,还连累到众多制造商,对行业发展造成了损失。例如1999 年DVD播放机使用的由日本东芝公司牵头开发的CSS密码算法发布很短时间内就被破解。2007 年非接触式IC卡使用的MIFARE Classic密码算法被破解。这些算法发布时都是保密的,攻击者通过逆向工程的手段对其进行分析,并找到漏洞实现了破解。由著名的美国RSA 公司于1987年设计开发用于无线通信网络的RC4密码算法发布时是保密的,2001年以色列研究者指出RC4加密算法存在着漏洞,通过逆向研究,一位匿名黑客还开发并公开了与其等效的程序。
密码也是“人比人,气死人”吗?
不仅一个密码的诞生非常困难,比较两个现行密码的强弱也是极其困难的。首先,如前所述,密码是一个复杂系统,应该被看做一个整体,密码的强弱有理论部分,还有理论以外的工程实现等各种因素的影响。其次,就拿理论部分——密码算法来讲,数学定理可以被证明,但密码算法的强度并不像数学那样可以进行严密的证明,甚至想通过一个统一的标准量化都是不可能的,这是密码学和数学的非常不同之处。我们会看到一些科普文章说破解某个密码算法需要一台性能多高的计算机运算多少多少年,严格说这只是一种不精确或者形容性的说法,破译者不会按这种最笨的方法来破解,既然是以“最笨”的破解方法去估算,参考价值就不大,还容易让人产生这个密码很安全的假想。
无论世界各国使用的密码还是我国使用的核心密码、普通密码和商用密码的这种区分,各类现用密码算法的安全性都是基于客观的科学问题、而且往往是基于同类的科学问题(密码学界认可的只有信息论安全性、计算安全性、可证明安全性三类有限的问题,在此不详述),因此既不存在哪类算法更加安全的说法——不可比较,比较也无实际意义。严格说,密码算法的强度、密码实现的完善性这些只能通过事实来证明,即如果专业密码破译者经过数年的尝试仍然没有破解某个密码,则说明这种算法的强度较高。在世界上公开的被认为强度较高的密码算法,几乎都是经过密码破译者长期尝试破解未果而存活下来的。密码的纠结一生,让人不禁感叹:果然是活着不易。
一个密码的非正常死亡是常态
现代密码学发展实践证明,除基于信息论安全的OTP一次一密算法(在此不详述)以外,尽管时间有长短,密码算法最终都会被破解。所以,一个密码的被动非正常死亡是常态。使用密码本来就是为了更安全,密码管理者本着慎之又慎的原则,不会等到被攻破那天,只要存在了现实被攻破的可能,就算这种攻击成功概率并不高,这种密码也到了该被终结的时候了。
典型的实例是我国王小云院士取得的重大成果,她基于对MD5和SHA1杂凑算法得到杂凑值的分布规律的研究,公布了对应的碰撞研究成果,美国对此马上宣布五年内将改用更复杂、杂凑值更长的杂凑算法。尽管对于SHA1杂凑算法来说构造这种碰撞(也就是找到对应相同杂凑值的两个初始值)所需算力大约相当于用5万台计算机工作100年。
反之,一个密码的寿终正寝——经过若干年的正常使用,人们发现破解该密码没有必要、没有意义了,那一定是破解密码所需代价远超了明文信息所带来的价值。这种情况的发生相当少见,只会是信息系统快速过时、被人们弃用了,而其中的密码一直没有过时、没有被攻破,这得是多特殊的一种情况。
密码的终结者都是谁?
密码的终结者到底都是谁?由于密码系统和信息安全对抗的复杂性,这个问题可不好回答,可能是敌方秘密建造的专用量子计算机这类“大杀器”,可能是敌方间谍特工,还可能是你自己使用密码上的麻痹大意,更有可能是所有这些因素凑到一起的合集。
我们只能总结一下规律:密码系统不是被“正面硬钢”,而往往是被“巧取豪夺”+“零敲碎打”拿下的。
所谓“巧取”,是指破解者不会走编码者希望他走的预设路线,一定是想方设法寻找捷径和漏洞。极致的“巧取”可以参看很多美国RSA大会中展示黑客攻击安全系统的例子,黑客可能资源有限,但千万不要低估了他们的经验和技巧,完美的绕过你的密码就是他们的目标。
所谓“豪夺”,是指只要被保护的秘密有价值,则破解者一定拥有比密码设计者更多的资源,通俗的说就是更聪明、更有钱,说不定还有你设计者不知道的“大杀器”。无论战时还是平时,最好是先假设敌人都会不惜代价造出这个大杀器来。
所谓“零敲碎打”,是指从一个密码诞生开始,敌方就会不间断的收集密码系统相关信息,做不间断的破解尝试,破解一定是从零碎成果慢慢积累到一个可观的百分比,敌方从来不需要百分百破解一个密码。
这方面的历史佐证非英格玛密码机的破解莫属,英国人一直在跟进研究德国密码,先是继承了二战前期波兰破译者的成果,又有天才图灵帮助发明了“炸弹”机,而取得破译中的突破是来源于不惜代价专门打捞出被击沉的德国潜艇U-110(下图所示)中德国人未及时破坏的完整英格玛密码机和使用的密码本。
这种密码攻防战的态势就是一场典型的、隐秘的非对称战争。密码终结者往往是最让设计者意想不到的,而且密码越重要,这个终结者一定越要把自身隐藏起来,让对方摸不清其面目和行为,只要毕其功于一役、实现攻破一点就可以了。而防御者不得不处处设防、尽量做到天衣无缝。为什么密码这么低调还这么容易挂掉,不是自己不努力啊,实在是密码终结者太凶险了。