企业专用网环境中密钥的分发和管理
作者:徐令予
中国银行业通信安全管理的规范称为PBOC,这其实是沿袭美国的银行标准制定出来的,全世界其它地区也基本遵照这个标准。如果物理学家在策划量子通信工程之前,认真坐下来消化一下这几十页的行业标准,他们就不会再有“彼可取而代之也”的冲动了。因为银行这套密码系统完全不像他们想象中的那样,需要不断分发对称密钥,并用RSA这类公钥密码进行加密。其实银行间的密钥更新根本不分发密钥的,分发的只是完全不需要保密的随机数而已。这些随机数任何人拿去都无所谓,因为它根本不带有密钥的信息,对称密钥的分发就是这么神奇。
对称密钥的分发和管理采用分级的形式,从总行到各大区的支行,大概不超过3级,每级的密钥分发管理中心称为KDC,每个用作层级管理的对称密钥就叫该级别主密钥,比如第三级就叫3级主密钥。总行的KDC用来生成顶级密钥,这个顶级密钥一般有多组,每次拿出一组顶级密钥使用,其它组密钥处于备份状态。主密钥可不是用来分发的,而是用来生成分发密钥。生成分发密钥首先需要系统产生一随机数,并用主密钥对其进行加密操作,生成的密文就作为分发密钥,用于分发到下一级KDC。下一级接收到上一级的分发密钥,将其作为这一级KDC的主密钥,然后使用该主密钥给下一级生成分发密钥。
假如一个KDC要将一个新的对称密钥传送给下级KDC,我们把这个新的对称密钥记作K。
1)上级KDC从已有的一组对称密钥中选择一个出来,不妨称作密钥A,并记下这个对称密钥在已知密钥小组中的序号。
2)然后在系统中生成一个随机数,接着用密钥A对其进行加密,生成一个密文,这个密文作为过程密钥,不妨称作P。
3)再用P对要传送的新的对称密钥K进行加密生成密文。
4)最后将上一步产生的密文、生成过程密钥的随机数和对称密钥的序列号一起发送给下一级KDC。
请注意,这个时候,在公网上发送的K是使用P经过对称加密的密文,这个是绝对安全的,而且P并没有发布到公网上,发布出去的只有随机数和加密密钥序列号,这些信息是不能利用来还原P的,因而也毫无办法对密文进行破解的。
5)接收端的KDC有了加密密钥小组序列号,就能够从自己的主密钥库中提取出来对应的密钥,并将收到的随机数进行加密,这样就能还原过程秘钥P,然后就可以直接用P将收到的K的密文解码成明文K,下级KDC就得到了新的对称密钥,从而完成主密钥的更新。
上面介绍的是企业网专用环境中对称密钥的分发和更新的真实过程,从中我们可以得到以下五点结论:
第一点, 在银行系统这类专用环境中,对称密钥都是事先配置好的,绝不会依赖公钥密码。密钥分发除了初始化的第一次以外,之后采用的都是对称密码加密,而且对分发密钥加密用的是不断变化的过程密钥,所以密钥分发过程是非常安全可靠的。即使是初始化过程,其实也不需要用公钥密码系统,任何能够安全地将初始化密钥设置到KDC的手段都可以采用,毕竟只需要做一次的事情,再高的代价也能接受。在金融、军队等专用环境中,公钥密码从来只起辅助作用,主要是为了方便和降低成本,不用公钥密码一点问题也没有,认为没有公钥密码就会沦落到用人工传递密钥是量子通信布道者无知的表现。
第二点, 对称密钥在经过所有的线路、路由器和中继站时都是由对称密码加密后产生的密文形式出现,所以根本不可能在网络任何环节泄密。这一点比量子通信的可信任中继站方案不知要安全多少倍!认为传统密码通信钱路上需要点点设防是量子通信布道者的慌言。
第三点, 在PBOC系统中对称密钥可以随时更新和分发,密钥分发的成码率高、不受网络结构和传输距离的限制,相比量子密钥分发技术(QKD)更安全、更方便、而且成本要低得多。
第四点, 更新的密钥在KDC进行还原,只有在这个环节会产生泄密的危险,因此保护KDC的安全才是整个环节中的关键。KDC的功能除了负责对称密钥的更新分发以外,还承担了密钥的分级管理、存贮备份、应急处理、逐级监督、用户身份认证等等重要功能,在安全级别要求极高的系统中,类似KDC这样的职能部门是不可或缺的。如果密钥没有分级管理,难道允许下级用户之间自己协商出密钥作通信,把上级也封杀掉?在一个系统中,特别是军队和金融机构,密钥必须实行分级分发和管理。量子通信不仅无法取消KDC,还要增加很多的漏洞百出的可信任中继站,这将使得整个系统的安全隐患变得更难控制。这也是为什么至今没有一个银行系统把QKD作为他们密码系统的核心技术的,因为既没有这个必要,也根本不可行。
第五点, 请注意,本文一直使用密钥“分发”两字,而QKD实质上只能作密钥协商,知道这两字的严重区别吗?“分发”的密钥是在过程开始前已被确定,而“协商”的密钥是在过程完成后才被确定。正是这个区别使得量子通信根本无法在这种有上下结构的系统中提供密钥分发管理的主要功能。对此我也不想再多讲了,让量子通信的布道者去玩孩子般的游戏吧。密码学工程的本质就是高度的猜忌、怀疑和不信任任何人,由自我感觉特别良好的物理学教授主持密码学工程,这本身就是天大的笑话。
上面介绍了在企业网专用环境中KDC之间对称密钥分发更新的细节。下面将介绍在专用网环境中两个终端用户通信开始时如何取得一致的对称密钥(又称作通信密钥)[1]。请注意,在这个过程中也根本没有公钥密码的什么事,更无需量子通信添乱。
基本原理:密钥分发中心KDC和终端用户A和B都共享一组主密钥。终端用户之间每次通信,都要向KDC申请全新的通信密钥,通信密钥是通过用户与KDC共享的主密钥加密来完成传递。具体过程如下(参见图1)
1)A用自己的主密钥Ka加密向KDC发送通信密钥请求包,其中包括通话双方A、B的身份以及该次传输的唯一标识N1,称为临时交互号(nonce)。临时交互号可以选择时间戳、随机数或者计数器等。KDC可根据临时交互号设计防重放机制。
2)KDC返回的信息包括两部分。
第一部分是A想获取的信息,用A的主密钥Ka加密,被加密的内容包括通话密钥Ks和KDC收到的请求包内容(用以验证消息到达KDC前是否被修改或者重放过)。
第二部分是B想获取的信息,用B的主密钥Kb加密,被加密的内容包括通话密钥Ks和A的身份。
3)A收到后将第二部分信息后按原样转发给B。
4)为保证A发给B的通信密钥信息未被重放攻击,A、B使用通信密钥进行最后的验证。B使用新的通信密钥Ks加密临时交互号N2并发给A。
5)A对N2进行一个函数变换后,用通信密钥发给B验证。
从这里我们进一步可看到,在专用环境中两个终端用户之间通信前为取得对称密钥,他们并非按某些人想像的那样是使用公钥密码分发对称密钥的,更不是靠人来传递的。事实上,两个终端用户是在KDC的支持和监督下使用对称密码取得共享的对称密钥,这个过程是安全可靠的,同时也把身份认证也一併解决了。
本文讲述了在企业专用网环境中,各级密钥分发中心KDC之间是如何使用对称密码更新和分发主密钥,终端客户又是如何在KDC的支持和监督下使用对称密码获得共享的通信密钥。在企业专用网环境中公钥密码不是非缺不可的,在某些场合中使用公钥密码只是为了方便和降低成本。所谓的公钥密码危机也是危言耸听、虚张声势的宣传。退一万步,即使公钥密码明天早晨崩溃,那么不用公钥密码就是了,企业专用网的通信运行“我自岿然不动”,不会有任何问题的。明白了这些最基本朴素的道理,谁还会认为量子通信工程可以在专用企业网环境中发挥什么作用就不仅仅是无知了。
量子通信在企业专用网环境的密钥分发过程中根本没有切入口,完全是画蛇添足、多此一举。那么量子通信在互联网环境中能否找回一点颜面呢?请听下文分解。
[1] https://engineering.purdue.edu/kak/compsec/NewLectures/Lecture10.pdf
感谢:本文在写作过程中得到信安专家李红雨好友的许多帮助和指教。