原文发在奇迹号上。
听说中国发射了一颗量子科学实验卫星(Quantum Experiments at Space Scale)。
它的任务之一就是实验量子秘钥(Quantum key)。
要理解什么是量子秘钥,我们首先自己问自己:
什么是通信?
假设两个人,A和B,A对B说了一句话:
Help!
这个就是通信。
如果我们考察这个过程的话,可分为三个单元:
- A发出信息,通过声带;
- B接受信息,通过耳膜;
- 信息通过声音传播,需要空气作为介质。
A传递给B的信息是有意义的,在这里是人的自然语言,B听到这个后,懂得并导致其后续行动。
如果我们只考察这里的信息,
Help!
我们应如何表示它?
纯粹物理的角度,我们可以把它表示为(不同频率)声音强度随时间的变化,但这个太琐碎了,很多细节我们并不需要。
适度抽象后,我们说这就是26个字母在时间轴上“由左到右”,“有方向地”展开。
简单说就是这样,我们可以管这个叫编码,常见的编码有:
- 二进制,0101这种;
- 16进制;
- 当然还有英文字母;
- 中文的汉语拼音,借用英文字母(精确讲应是拉丁字母)。
现在通信可被叙述为A向B发送一段有序的编码,比如:
Hi, ...
这段编码A、B看了都懂。于是A就能让B帮他做事情,比如A对B说:
把红色的旗子举起来。
但有时我们不希望别人知道这段信息,比如打仗的时候,敌人C可能会截获这段信息,从而知道A的意图,从而不利于A和B。
这个时候就需要加密了。
能否设想一个最简单的加密方案呢?
据说古代斯巴达人是这样来传递信息的,将军A和前线指挥官B各持一根木棍,这两根木棍是完全相同的,主要是“粗细”。
将军A拿出一定粗细的纸条(或者皮革条),以特定角度把纸条缠绕在木棍上,然后沿平行于木棍的方向写下命令:
Blah, blah...
然后再把纸条取下来展开,继续在纸条上写满字母,也许是这样的:
cxBaxhnlxhon...
现在这个纸条上的信息就是被“加密”过的了,将军A可以把纸条交给传令官C,由他送给前线指挥官B。
假如敌人截获了这个纸条,它是看不懂上面的信息的,除非……,知道加密的方案,及棍棒的粗细和缠绕纸条的倾斜角度。
拷问传令官C也没用,因为他没见过加密用的棍棒。
以上就是一个加密的方案,在这里我们需要的其实是两个数字,一个是棍棒的粗细,一个是纸条缠绕的角度,当然想想的话,我们会补充上第三个数字,即我们由第几位开始读。
这三个数字就是秘钥。
现在的问题是如何传送秘钥。
我们打个比喻:
我们想传送的信息就是一个密码箱,秘钥就是密码箱的钥匙,即密码。
一般来说密码箱的密码就是三个数字,比如:
798
这个798有意义吗?
完全没有意义,因为它并不代表地名,如果你认为这是个地名的话,那恰恰是不能make sense的。
但完全没有意义,完全随机的三个数加上密码箱就能对应有意义的信息。
我们用无意义的密码打开了看不懂的密码箱,得到的是有意义的,能看懂的文件。
密码箱可以随便给所有人看,被敌人C截获也不怕,因为它没有密码。
所以现在的问题就变成,如何生成这个密码,使得只有A、B知道,而C不可能知道。
这就需要用到量子力学了
措辞的角度,
我小心翼翼地不说我们传送密码,
我喜欢说我们(A、B)生成了密码(所以这与狭义相对论并不矛盾)。
这个生成,可以比喻为“掷骰子”,骰子一掷,A和B就知道密码了,而且是相同的,然后A用这个密码去加密信息,而B用密码解密收到的信息。
被传递的信息是可以让全世界人知道的。
我们利用量子纠缠来掷骰子
我们想象两个硬币,一个向上、一个向下,一个在A手边,一个在B手边。
设想这两个硬币通过一根刚性的杆子焊死,
设想它们围绕刚性的杆子飞速地旋转起来。
我们管这个就叫量子纠缠。
杆子转的飞快,A没法说他手边这个硬币是向上还是向下的,除非他
“啪”
地拍下去,然后看一眼,
A有一半几率得到硬币向上,另一半几率向下。
同时假如B立刻在远处观察他手边的硬币的话,所谓观察就是他
“啪”
地一下也拍下去,他看到另一硬币的取向一定和A相反,A、B并不需要通信,通过这个“量子机制”就能知道对方手上硬币的取向。
但可惜硬币可以有很多取向,我们的刚性机制只能保证两个硬币取向恰好相反。
简化叙述,我们会说取向可以是“上、下”,“左、右”或“前、后”的。
我们可以沿“上、下”方向拍下去,也可以“左、右”或“前、后”。
我们约定A每次拍下去的方向是任意的,B在远方也任意地拍他手边的硬币。
假设第一次,A是上下拍,得到硬币取向是一半上,一半下。不妨假设是“上”。
但B和A是独立随意地拍硬币,假设B是按“左、右”的取向“拍”。此时会如何呢?
A端向上,因为量子机制,B端硬币取向应该是向下的,奈何B是“左、右”拍,我们只能说有一半可能是左,一半可能是右。
不妨假设B端拍下去的结果是“左”。
类似地我们可以得到一系列结果,并记录如下:
A | 取向 | B | 取向 | 匹配 |
---|---|---|---|---|
“上下” | 上 | “左右” | 左 | No |
“上下” | 上 | “上下” | 下 | Yes |
“左右” | 左 | “上下” | 下 | No |
“前后” | 前 | “前后” | 后 | Yes |
“左右” | 右 | “左右” | 左 | Yes |
“上下” | 下 | “前后” | 前 | No |
...
这个记录可以很长,在做完如上操作后,A、B在互相告诉对方拍下硬币的取向。
就是A说
“上下”、“上下”、“左右”……
B说
“左右”、“上下”、“上下”……
在说这些信息的时候,拍硬币的动作已经完成了,所以不怕C偷听到。
A、B知道这个信息很有用,他们可以把不匹配的测量都划掉(对应这里,就是我标“No”的那些),剩下的就是“秘钥”了,A、B并不需要直接告诉对方秘钥是什么,就已经知道了。
假如C硬要偷听会如何呢?
假设C成功地偷听,所谓成功偷听就是C在B之前就偷偷地捉到了硬币,并抢先拍了下去。
但C并不知道A、B是延什么方向拍硬币的,同时A、B都是随机地按不同方向拍硬币。
C只好也随机地拍下去。
可能拍下去的取向和B的选择相同,也可能不相同。几率都不是0
考虑ABC可以有不同拍硬币的取向,我们可以选取以下两种情况进行讨论:
第一种,ABC拍硬币的方向都相同,A上导致C下,C得到下后,再把它传给B,B将也得到下。
A | C | B |
---|---|---|
上 | 下 | 下 |
此时B无法判断是否被偷听。
第二种,C拍下去的方向和AB拍下去的方向不同,同时AB拍下去的方向相同:
A | C | B |
---|---|---|
上 | 右 | 上 |
A得到上,假如不被C偷听的话,B一定是下。但C偷听了,并恰好选取的是左右方向,假设得到右,B是对“右向”硬币沿上下方向拍下去,有一半几率上,一半几率下,不妨假设正好是上(无人偷听应该是下)。
如果A、B互相交流一下他们的硬币取向簿记结果的话,他们就会发现:
被人偷听了!
这个过程,可以称之为校验。对校验的部分,不仅拍硬币的取向A、B需要互相交流,拍硬币的结果(即取向簿记)也需要互相告知对方。
可以想象这是一串数字,只要这串数字够长,将能发现是否被偷听。
假如校验后,发现A上一定对应B下,A左一定对应B右,A前一定对应B后,则说明没有人偷听。
我们可以这么构造生成秘钥的过程,在最终簿记结果中随机选取“校验”和“真实”的部分。
校验部分,发送“拍下硬币方向+硬币取向”结果给对方,真实部分只发送拍下去的方向,不发送硬币取向。假使校验部分百分百相合的话,说明无人偷听,秘钥有效。但如果并非百分百相合,而是特定百分比的话,则说明有人偷听,秘钥无效,需要重新生成。
参考链接
Sheldon: 量子通信卫星到底是什么鬼?
PhysicsWorld: China launches world's first quantum science satellite
(这篇文章挺有意思,它告诉我们老外在用纳卫星做和中国科学家类似的事儿,当然花的钱会少很多。)