电子商务安全(第2版)
上QQ阅读APP看书,第一时间看更新

3.1 密码理论与技术概述

3.1.1 基本理论与概念

在历史上,军事人员、外交人员、日记作者和情侣有意或者无意地用到了密码学,并且为之做出了贡献。在这四类人中,军事人员扮演了重要的角色。而且几个世纪以来他们不断完善着这个领域。在军事联盟内部,需要加密的消息通常被交给下级译码军士来加密和传输,由于消息的数量不大,所以这项工作不必依赖密码专家来完成。

在计算机出现以前,密码学的一个主要限制是译码军士执行各种必要的明密文变换的能力,尤其在战场上往往缺乏相应的装备予以辅助。另一个限制是很难从一种密码方法切换到另一种密码方法,因为这需要重新训练大批译码员。然而,由于译码军士有可能被敌人俘虏,所以,在必要的时候能及时直接地更换密码方法变得非常关键。这些相互矛盾的需求导致了图3.1所示模型的产生。

图3.1 对称密码模型

密码协议出现以前,密码学几乎专指加密(Encryption)算法和解密(Decryption)算法。待加密的消息称为明文(Plaintext),它经过一个以密钥(Key)为参数的函数变换过程,这个过程称为加密,输出的结果称为密文(Ciphertext),然后密文被传送出去(往往由通信员或者无线电方式来传送)。对方收到以后,再由密文转换回明文,这个过程称为解密。一般情况下,加密即同时指称加密(Encrypt或Encipher)与解密(Decrypt或Decipher)的技术。

加解密的具体运作由两部分决定:一个是算法,另一个是密钥。密钥是一个用于加解密算法的秘密参数,通常只由通信者拥有。假设敌人或者入侵者听到了完整的密文,并且将密文精确地复制下来。然而,与目标接收者不同的是,他并不知道解密密钥是什么,所以无法轻易地对密文进行解密。有时候敌人或者入侵者不仅可以监听通信信道(被动入侵者),而且还可以将消息记录下来并且在以后某个时候回放出来,或者插入他自己的消息,或者在合法消息到达接收方之前对消息进行篡改(主动入侵者)。

密码协议(Cryptographic Protocol)是使用密码技术的通信协议(Communication Protocol)。近代密码学者多认为除了传统意义上的加解密算法,密码协议也一样重要,两者为密码学研究的两大课题。在英文中,Cryptography和Cryptology都可代表密码学,前者又称密码术。但更严谨地说,Cryptography是指密码技术的使用,而Cryptology是指研究密码的学科,包含密码术与密码分析。密码分析(Cryptanalysis)是研究如何破解密码学的学科。但在实际使用中,通常都称密码学(英文通常称Cryptography),而不具体区分其含义。

通常的做法,用一种合适的标记法将明文、密文和密钥的关系体现出来,这往往会非常有用。通常使用C=EKP)来表示用密钥K加密明文P得到密文C。类似地,P=DKC)代表了解密C得到明文P的过程。由此可以得到

DKEKP))=P

这种标记法也说明了ED只是数学函数,事实上也确实是这样。唯一值得特别注意的地方是,它们都是带两个参数的函数,但是其中一个参数(密钥)被写成下标的形式,而不写成实参的形式,从而将它与消息本身区别开来。

密码学的基本规则是:必须假定密码分析者知道加密和解密所使用的方法。换句话说,密码分析者知道加密方法E和解密方法D的所有操作细节。每次当旧的加解密算法泄露(或者认为它们被泄露)以后,总是需要重新设计、测试和安装新的算法,这使得将加解密算法本身保持秘密的做法在现实中并不可行。当一个算法已不再保密的时候仍然认为它是保密的,这将会带来极大的危险。

而密钥的引入正好解决了这个问题。密钥是由一段相对比较短的字符串构成的。一般的加解密算法可能几年才会发生变化,与此不同的是,密钥可以根据需要频繁地被改变。因此,密码学的基本模型是一个稳定的、广泛公开的通用方法,它采用一个秘密的、易改变的密钥作为参数。“让密码分析者知道加解密算法,并且把所有的秘密信息全部放在密钥中”,这种思想被称为Kerckhoffs原则,这是用荷兰军事密码学家Auguste Kerckhoffs的名字来命名的。因为他在1883年第一次提出了这种思想。

Kerckhoffs原则:所有的算法必须是公开的,只有密钥是保密的。

强调算法的公开性是合理的,企图使算法保持秘密的做法(这种做法也称为含糊的安全性)不会一直有效。算法公开以后,密码设计者可以自由地与大量学院派的密码学家进行交流探讨,这些密码学家一直在研究如何破解密码系统。如果一个密码算法被公开了五年,尽管在此期间许多专家试图破解该算法,但是无人能够成功,那么,这个算法应该是非常可靠的。

由于真正的秘密在密钥中,所以它的长度是一个非常重要的设计要素。以一个简单的密码锁为例,一般的原则是,按照顺序输入正确的号码即可打开锁,每个人都知道这点,但是锁的号码(即密钥)是保密的。如果密钥长度是两个数字,则意味着共有100种可能。若密钥长度为三个数字,则意味着共有1000种可能。同样地,六位数字的密钥意味着百万种可能,密钥越长,则密码分析者要应对的破译难度就越高。通过穷举搜索整个密钥空间来破解密码系统,这种做法产生的工作量是密钥长度的指数量级。保密性来自于两个方面,一是强而牢固的(但是公开的)算法,二是长的密钥。例如,为了防止攻击者阅读个人的电子邮件,64位密钥就足够了,但是,对于常规的商业用途,至少应该使用128位密钥,而为了保护政府机构数据,则至少需要256位密钥。

从密码分析者的角度来看,密码分析问题有四个主要的类型。当他得到了一定量的密文,但是没有对应的明文时,他面对的是“唯密文”(Ciphertext-Only)问题,报纸上猜谜栏目中的密码难题就属于这一类问题。当密码分析者有了一些相匹配的密文和明文时,密码分析问题被称为“已知明文”(Known Plaintext)问题。当密码分析者能够加密某一些他自己选择的明文时,问题就变成了“选择明文”(Chosen Plaintext)问题。而当密码分析者能够解密某一些他自己选择的密文时,则变成了“选择密文”(Chosen Ciphertext)问题。

3.1.2 密码学的发展历程

在近代以前,密码学只考虑到信息的机密性(Confidentiality),即如何将可理解的信息转换成难以理解的信息,并且可以使有秘密信息的人能够逆向恢复,缺乏秘密信息的拦截者或窃听者则无法解读。近数十年来,这个领域已经扩展到涵盖身份认证(或称鉴权)、信息完整性检查、数字签名、互动证明、安全多方计算等各类技术。

1.古典密码

在公元前,秘密书信就已用于战争之中。西方“史学之父”希罗多德(Herodotus)的《历史》(The Histories)当中记载了一些最早的秘密书信故事。公元前5世纪,希腊城邦为对抗奴役和侵略,与波斯发生多次冲突和战争。公元前480年,波斯秘密集结了强大的军队,准备对雅典(Athens)和斯巴达(Sparta)发动一次突袭。希腊人狄马拉图斯(Demaratus)在波斯的苏萨城(Susa)里看到了这次集结,便利用了一层蜡把木板上的字遮盖住,送往并告知了希腊人波斯的图谋。最后,波斯海军覆没于雅典附近的萨拉米斯湾(Salamis Bay)。

由于古时多数人并不识字,最早的秘密书写的形式只用到纸笔或等同物品,随着识字率的提高,就开始需要真正的密码学了。最经典的两个加密技巧是代换和置换,代换是系统地将一组字母换成其他字母或符号,而置换是将字母顺序重新排列。凯撒密码(Caesar Cipher)是最经典的代换法,据传由古罗马帝国的皇帝凯撒所发明,用在与远方将领的通信上。

加密旨在确保通信的秘密性,例如间谍、军事将领、外交人员间的通信,同时也有宗教上的应用。

古代兵书《六韬·龙韬》中也记载了密码学的运用,其中的“阴符”和“阴书”便记载了周武王问姜子牙关于征战时与主将通信的方式。阴符是以八等长度的符来表达不同的消息和指令,可算是密码学中的代换,即把信息转变成敌人看不懂的符号。至于阴书则运用了移位法,把书一分为三,分三人传递,要把三份书重新拼合才能获得还原的信息。

许多物理装置被用来辅助加密,例如古希腊斯巴达的密码棒(Scytale),这是一个协助置换法的圆柱体,可将信息内字母的次序调整,利用了字条缠绕木棒的方式,把字母进行位移,收信人要使用相同直径的木棒才能得到还原的信息。

由经典加密法产生的密码文很容易泄漏关于明文的统计信息,以现代观点来看它其实很容易被破解。阿拉伯人津帝(al-Kindi)便提及如果要破解加密信息,可在一篇至少一页长的文章中计算出每个字母出现的频率,在加密信件中也计算出每个符号的频率,然后互相对换,这是频率分析的前身,此后几乎所有此类的密码都能马上被破解。但经典密码学现在仍未消失,经常出现在谜语之中。这种分析法除了被用于破解密码法外,也常用于考古学上。在破解古埃及象形文字(Hieroglyphs)时便运用了这种解密法。

2.中世纪至第二次世界大战

在这段时期,本质上所有的密码仍然受到频率分析的破解方法的危害,直到阿伯提(Leon Battista Alberti)约在1467年发明了多字母表代换加密法(Polyalphabetic Cipher),阿伯提的创新在于对信息的不同部分使用不同的代码,他同时也发明了可能是第一个自动加密器的一个实现他部分想法的转轮。多字母表代换加密法最典型的例子是维吉尼亚加密法(Vigenère Cipher):加密重复使用到一个关键字,用哪个字母进行代换操作视循环到关键字的哪个字母而定。尽管如此,多字母表代换加密法仍然受到频率分析法的部分危害,不过这直到19世纪中期才被查尔斯·巴贝奇(Charles Babbage)发现。

多字母表代换加密法出现后,更多样的物理辅助工具出现,如阿伯提发明的密码盘(Cipher Disk)、特里特米乌斯发明的表格法(Tabula Recta)以及美国总统托马斯·杰斐逊(Thomas Jefferson)发明的多圆柱,Bazeries约在1900年再次独立发明改进。20世纪早期,多项加解密机械被发明且被注册专利,包括最有名的转轮机(Rotor Machines),第二次世界大战时为德军所用,别名“谜”(Enigma密码机),其加密法是在第一次世界大战后针对当时解密术所做的最好的设计。

比较著名的例子可数中世纪苏格兰玛丽女王(Mary Stuart,Queen of Scotland)的密码、第一次世界大战时德国的齐默尔曼电报(Zimmerman Telegram)和第二次世界大战的“谜”。

第二次世界大战时德国汲取了第一次世界大战的教训,发展出以机械代替人工的加密方法。谢尔比乌斯(Arthur Scherbius)发明了“谜”,用于军事和商业上。“谜”主要由键盘、编码器和灯板组成。三组编码器加上接线器和其他配件,总共提供了一亿亿种编码的可能性。1925年,“谜”开始有系列生产,此后20年间,德国军方购入了3万多台“谜”,亦难倒了“40号房间”(Room 40,英国最早的情报机构),成为德国在战争期间的重要加密方法。当时的波兰位于德国东面,俄国的西面,一直受到威胁,故成立了波兰密码局(Biuro Szyfrow)以获取情报。波兰从汉斯-提罗·施密德(Hans-Thilo Schmidt)处得到谍报,由年轻的数学家马理安·瑞杰斯基(Marian Rejewski)破译,用了一年时间编纂目录,并在20世纪30年代制造了“炸弹”(bomba),渐渐掌握了解“谜”的技术。

1938年12月德国加强了“谜”的安全性,令波兰失去了情报。“谜”成为希特勒闪电战略的核心,每天更改的加密排列维系了强大快速的攻击。1939年4月27日,德国撤销了与波兰的互不侵犯条约,波兰才不得不决定把“炸弹”这个构想与英、法分享,合力破解新的“谜”。1939年9月1日,德国入侵波兰,第二次世界大战爆发。英国得到了波兰的解密技术后,“40号房间”除了原有的语言和人文学家,还加入了数学家和科学家,后来更成立了政府代码暨密码学校,5年内人数增至7000人。1940年至1942年是加密和解密的拉锯战,成功的解码提供了很多宝贵的情报。例如英国在1940年得到了德军进攻丹麦和挪威的作战图,以及在不列颠战役前事先获得了空袭情报,化解了很多危机。但“谜”却并未被完全破解,加上“谜”的网络很多,令德国一直在大西洋战役中占上风。最后,英国在一次名为“顺手牵羊”的行动中从德国潜艇上俘获“谜”的密码簿,破解了“谜”。英国以各种手段掩饰这件事,免得德国再次更改密码,并策划摧毁了德国的补给线,缩短了大西洋战役。

3.现代密码

第二次世界大战后,计算机与电子学的发展促成了更复杂的密码,而且计算机可以加密任何二进制形式的资料,不再限于书写的文字,以语言学为基础的破解技术因此失效。多数计算机加密的特色是在二进制字串上操作,而不像经典密码学那样直接地作用在传统字母或数字上。然而,计算机同时也促进了破解分析的发展,抵消了某些加密法的优势。不过,优良的加密法仍保持领先。通常,好的加密法都相当有效率(快速且使用少量资源),而破解它需要许多级数以上的资源,使得破解变得不可行。

大量的公开学术研究的出现,起源于20世纪70年代中期,美国国家标准局(National Bureau of Standards,NBS;现称国家标准技术研究所,National Institute of Standards and Technology,NIST)制定数字加密标准(DES),W.Diffie和M.Hellman提出的开创性论文,以及公开释出RSA(Rivest,Shamir and Adleman)。从那个时期开始,密码学成为通信、计算机网络、计算机安全等方面的重要工具。许多现代密码技术的基础依赖于特定计算问题的困难度,例如因子分解问题或是离散对数问题。许多密码技术可被证明为只要特定的计算问题无法被有效地解出,那就安全。除了一个著名的例外:一次一密(One-Time Pad),这类问题被证明是偶然的而非决定性的,但也是目前可用的最好的方式。

密码学算法与系统设计者不但要留意密码学历史,而且必须考虑到未来发展。例如,持续提高计算机处理速度会增进暴力攻击法的速度。量子计算的潜在效应已经成为部分密码学家的焦点。

20世纪早期的密码学本质上主要考虑语言学上的模式。从此之后重心转移,现在的密码学使用大量的数学,包括信息论、计算复杂性理论、统计学、组合学、抽象代数以及数论。密码学同时也是工程学的分支,但却与其他不同,因为它必须面对有智能且恶意的对手,大部分其他的工程仅需处理无恶意的自然力量。检视密码学问题与量子物理间的关联也是目前热门的研究方向。

3.1.3 经典密码学

在历史上,加密方法被分成两大类:代换密码和置换密码,这里简要地介绍这两种密码,以作为现代密码学的背景信息介绍。另外,由于量子密码系统的研究突破,一次一密作为代换密码中理想的加密方案,也逐渐转向实用,这里也一并介绍。

1.代换密码

在代换密码(Substitution Cipher)中,每个字母或者每一组字母被另一个字母或另一组字母取代,从而将原来的字母掩盖起来。最古老的密码之一是凯撒密码,它因为来源于Julius Caesar而得名。在这种方法中,a变成D,b变成E,c变成F,…,k变为N,t变成W。例如,attack变成DWWDFN。在例子中,明文以小写字母给出,密文则使用大写字母。

恺撒密码的一种通用化的方案是,允许明文字母表被移动k个字母,而并不总是移动3个字母。在此情况下,k变成了这种循环移动字母表的通用加密方法的一个密钥。恺撒密码也许确实欺骗了庞贝(Pompey),但在那以后再也没有成功骗过别人。

接下来的改进是,让明文中的每个符号(为了简化起见,这里假设为26个字母)都映射到其他某一个字母上,例如:

明文:a b c d e f g h i j k l m n o p q r s t u v w x y z

密文:Q W E R T Y U I O P A S D F G H J K L Z X C V B N M

这种“符号对符号”进行代换的通用系统被称为单字母表代换(Monoalphabetic Substitution),其密钥是对应于整个字母表的26字母串。对于上面的密钥,明文attack被变换为密文QZZQEA。

初看起来,这似乎是一个非常安全的系统。因为虽然密码分析者了解通用的系统(即字母对字母的置换),但是,它并不知道到底使用哪一个密钥,而密钥的可能性共有26! ≈ 4×1026种。与恺撒密码不同的是,要试遍所有这么多种可能的密钥不是一种可行的做法。即使一台计算机测试每个密钥只需1ns,试遍所有的密钥也将需要约1010年时间。

然而,只要给出相对少量的密文,就可以很容易地破解该密码。基本的攻击手段利用了自然语言的统计特性。例如,在英语中,e是最常见的字母,其次是t、o、a、n、i等。最常见的双字母组合(或者双字母连字)是th、in、er和an。最常见的三字母组合(或者三字母连字)是the、ing、and和ion。

密码分析者为了破解单字母表密码,首先计算密文中所有字母的相对频率;其次,可以试探性地将最常见的字母分配给e,次常见的字母分配给t;再次,查看三字母连字,找到比较常见的形如tXe的三字母组合,这强烈地暗示着其中的X是h。类似地,如果模式thXt出现得很频繁的话,则Y可能代表了a。有了这些信息以后,便可以查找频繁出现的形如aZW的三字母组合,它很可能是and。通过猜测常见的字母、双字母连字和三字母连字,并且利用元音和辅音的各种可能组合,密码分析者就可以逐个字母地构造出试探性的明文。

另一种做法是猜测一个可能的单词或者短语,例如,考虑以下这段来自于一家会计事务所的密文(分成5个字符为一组):

CTBMN BYCTC BTJDS QXBNS GSTJC BTSWX CTQTZ CQVUJ

QJSGS TJQZZ MNQJS VLNSX VSZJU JDSTS JQUUS JUBXJ

DSKSU JSNTK BGAQJ ZBGYQ TLCTZ BNYBN QJSW

在会计事务所的消息中,一个可能的单词是financial。在financial这个单词中有一个重复的字母i,并且这两个i之间有4个其他的字母。根据这样的知识,在密文中查找相隔4个位置的重复字母,可以找到11个地方,分别在6、15、27、31、42、48、56、66、70、71和82位置上。然而,只有其中两个地方,即31和42,它的下一个字母(对应于明文中的n)也在正确的位置上重复。而在这两者之中,只有31有正确的a位置(考虑在financial中有两个a),所以,由此可知financial从位置30开始。以此为出发点,利用英语文本的频率统计规律可以很容易地推断出密钥。

2.置换密码

代换密码保留了明文符号的顺序,但是将明文伪装起来。与此相反,置换密码(Transposition Cipher)重新对字母进行排序,但是并不伪装明文。图3.2给出了一个常见的置换密码:列置换。该方案用一个不包含任何重复字母的单词或者短语作为密钥。在这个例子中,密钥是MEGABUCK。密钥的用途是对列进行编号,第1列是指在密钥的字母中最靠近英文字母表起始位置A的那个字母,第2列是指在密钥的字母中仅次于指定第1列字母的下一个字母,以此类推。明文按水平方向的行来书写,如果有必要的话填满整个矩阵(填充内容一般可自由设定)。密文被按列读出,从编号最低的密钥字母开始逐列读出。

图3.2 置换密码示例

为了破解置换密码,密码分析者首先要明白,自己是在破解一个置换密码,通过查看E、T、A、O、I、N等字母的频率,很容易就可以看出它们是否吻合明文的常规模式。如果是,则很显然这是一种置换密码,因为在这样的密码中,每个字母代表的都是自己,因而不改变字母的频率分布。

接下来要猜测共有多少列。在许多情况下,从特定的环境信息中或许可以猜到一个可能的单词或者短语。例如,假定密码分析者怀疑消息中的某个地方出现了明文短语milliondollars。他观察到在密文中出现的双字母组合MO、IL、LL、LA、IR和OS是因为这个短语字母交换排列的结果。密文字母O跟在密文字母M的后面(即在第4列的垂直方向上它们是相邻的)。这可能是因为它们在短语中被一段等于密钥长度的距离所隔开。如果,密钥长度为7的话,则双字母组合MD、IO、LL、LL、IA、OR和NS就会出现。实际上,对于每一个密钥长度,在密文中都会出现一组不相同的双字母组合。通过检查每一种可能性,密码分析者往往很容易就能够确定密钥的长度。

最后的步骤是确定列的顺序。当列数比较小(比如说k)的时候,则总共有kk-1)种可能的列对,你可以对每一个列对进行检查,看它的双字母组合的频率是否与英语文本的双字母组合频率相匹配。假定最佳匹配的那一对已经有正确的位置关系了。现在,用剩下的每一列尝试着跟在这一对的后面,然后检查它的双字母组合和三字母组合的频率,假定最佳匹配的那一列是正确的。通过同样的方式可以陆续找到后继的列。整个过程继续下去,直至找出可能的列顺序关系。到这时候,通过检查明文就可以确定是否破解成功了(比如,如果出现million的话,很明显就知道错误在哪里了)。

有些置换密码接受一个固定长度的块作为输入,并产生一个固定长度的块作为输出。只要输出一个能指明字符输出顺序的列表,就可以完整地描述这样的密码。例如,图3.2中的密码可以被看作一个64字符块的密码。它的输出是4,12,20,28,36,44,52,60,5, 13,…,62。换句话说,第4个输入字符a首先被输出,然后是第12个字符,以此类推。

3.一次一密

要想构建一个不可能被攻破的密码其实是非常容易的,相应的技术在几十年前就已经被发掘出来了,首先选择一个随机位串作为密钥,然后将明文转变成一个位串。比如使用明文的ASCII表示法,最后,逐位计算这两个串的异或(XOR)值。结果得到的密文不可能被破解。因为即使有了足够数量的密文样本,每个字符的出现概率是相等的,双字母组合的概率也是相等的,三字母组合的概率也相等,以此类推,这种方法被称为一次一密,不论入侵者的计算能力有多么强大,这种密码总是能够对抗所有现在的和将来的攻击。

图3.3给出了一个一次一密用法的例子。首先,消息1(I love you.)被转换成7位ASCII码。其次,选择一个一次性密钥Pad1,并且与消息l进行异或而得到密文。密码分析者可以试验所有可能的一次性密钥,并检查每个密钥所对应的明文。例如,图中列出的一次性密钥Pad2可以被用来做试验,结果得到明文2(Elvis lives),这个结果有点似是而非。实际上,对于每一个11字符长的ASCII明文,就有一个生成此明文的一次性密钥。也就是说在密文中没有任何破解信息,因为总是可以得到任何一条长度正确的消息。

图3.3 一次一密用法举例

一次一密在理论上是非常有意义的,但是在实践中也有许多缺点。首先,一次性密钥无法记忆,所以发送方和接收方必须随身携带书面的密钥副本,如果任何一方有可能被敌人捕获,则显然书面的密钥是一个很大的威胁,而且,可被传送的消息数据量受到可用密钥数据量的限制。如果一名间谍非常走运,发现了一批极有价值的数据,他可能由于密钥已经用尽而无法将这批数据传送回总部。另一个问题是,这种方法对于丢失字符或者插入字符非常敏感。如果发送方和接收方失去了同步,则从失去同步的点之后所有的数据都会无效。

随着计算机的出现,一次一密方法对于某些应用可能会变得实用起来。例如,密钥源可以是一张开头部分是几分钟真实电影片断的DVD碟片,但随后它包含了几千兆字节的密钥信息,因此不会招人怀疑。但是在发送消息之前,必须首先通过其他途径,例如通过网络等,将DVD转运到接收方,为此,一次一密方法的实际使用效率将很有限。

然而针对如何在网络上传输一次性密钥的问题,可能通过量子密码方案予以解决,尽管这个领域现在仍然在被探索,但是截至目前的试验都非常成功。如果能够更加完美一些,而且效率又很高的话,那么,几乎所有的密码系统都可以利用一次一密方法来完成,因为一次一密方法可以被证明是绝对安全的。

以BB84协议为代表的量子密码系统(Quantum Cryptography)的物理基础是,光是以一种极小的光包(Photon,也被称为光子)的形式被传递的,并且光子具有某种特殊的属性。而且,光在通过一个偏振滤光器的时候,可以被调整到一个方向上。摄影师都知道这样一个事实,即如果将一束光(即一个光子流)通过一个偏振滤光器,则该光束中的所有光子都将被偏到滤光器的轴向(比如垂直方向)上。如果现在光束再通过第二个偏振滤光器,则从第二个滤光器出来的光的强度将与两轴之间夹角的余弦平方成正比,如果这两个轴相互垂直的话,则所有的光子都通不过。两个滤光器的绝对方向并不重要,关键是它们之间的夹角。

可以假定Alice和Bob在一根光纤的两端,通过这根光纤他们可以发送光脉冲。为了产生一个一次性密钥,Alice需要两组偏振滤光器,第1组滤光器是由一个垂直滤光器和一个水平滤光器组成的,这种选择被称为直线基(Rectilinear Basis)。这里的一个基只是一个坐标系统而已。第二组滤光器也一样,但是旋转45°,一个滤光器的方向是从左下至右上,另一个滤光器的方向是从左上至右下。这种选择被称为对角基(Diagonal Basis)。因此,Alice有两个基,她可以根据需要快速地将这些基插入到她的光束中。Bob也有一套与Alice相同的设备,两个人都有两组可用的基。

对于每一组基,Alice现在将一个方向分配为0,另一个方向分配为1。在下面的例子中,Alice选择垂直方向为0,水平方向为1。另外,她也选择从左下至右上方向为0,从左上至右下方向为1。她通过明文方式将这些选择发送给Bob。

现在Alice选择一个一次性密钥,比如她利用一个随机数发生器来生成该密钥,然后将密钥逐位地传送给Bob,在传送每一位的时候,她会随机选择其中一个基。为了发送每一位,她的光子枪发射出来的光子已经正确地偏振到她为这一位所选择的基上。她将会发送图3.4中①所示的光子,给定了一次性密钥和基的序列之后,用于每一位的偏振方向也被唯一确定了下来。像这样每次发送一个光子的数据位被称为量子位(Qubit)。

图3.4 量子密码系统示意

Bob并不知道Alice使用了哪些基,所以他随机地为每一个到来的光子选择一个基,如图3.4中②所示。如果他选择了正确的基,则他会得到正确的数据位。如果选择的基不正确,则得到一个随机的位,因为如果一个光子被发射到一个与它自己的偏振方向成45°角的滤光器上,那么它将会随机地跳到滤光器的偏振方向或者垂直的偏振方向上。因此,有些位是正确的,而有些位是随机的,但是Bob并不知道哪些是正确的,Bob得到的结果如图3.4中③所示。

Bob为了如道他选择的哪些基是正确的,简单地告诉Alice他为明文中的每一位使用了哪个基,然后Alice告诉他,明文中哪些是正确的,哪些是不正确的,如图3.4中④所示。利用这些信息,双方就可以根据正确的猜测结果获得一个位串,如图3.4中⑤所示。平均而言,这个位串的长度将是原始位串的一半。但是,由于双方都知道这个位串了,所以他们可以将这个位串用作一次性密钥。Alice所需要做的事情仅仅是传输一个略微超过期望长度的两倍的位串,于是Alice和Bob就有了一个期望长度的一次性密钥。

假设Trudy是一个入侵者,能够割断光纤,用一个主动式分接头再将光纤连接起来。Trudy可以读取两个方向上的所有数据。Trudy收到了Alice发送给Bob的光子,但是她并不知道每个光子使用哪一个基。她也同Bob一样,随机地为每个光子选择一个基,如图3.4中⑥所示。当Bob后来用明文向Alice报告他使用了哪些基,并且Alice也用明文告诉Bob哪些基是正确的时候,Trudy也就知道她得到的哪些位是正确的,哪些位是错误的。通过图3.4可知,Trudy的以下位是正确的:0、1、2、3、4、6、8、12和13。但是,根据图3.4中④的Alice应答,Trudy知道只有1、3、7、8、10、11、12和14位才是一次性密钥的组成部分。其中只有4位(即1、3、8和12)猜测是正确的,其他的4位她猜测错误,所以她并不知道真正传输的位是什么。

如果Trudy有办法复制光子,她就可以监视其中一个光子,并且将另一个同样的光子发送给Bob,那么,她也就可以将自己隐藏也来,避免被Bob发现。但是,迄今为止人们尚未发现有理想的方法可以复制光子。尽管研究人员已经证明了在超过60km距离的光纤上可以运行量子密码系统,但是装备非常复杂和昂贵。不过,量子密码学的思想仍然很有前途。