黑夜,在街的另一边停着一辆没窗的小货车,一根天线从玻璃纤维面板上伸出来,指向三楼的一间办公室。办公室里,一位CEO正在电脑上编辑一份文档,那是他正在精心构思的一份如何打败竞争对手的计划,但是他永远不会知道,他屏幕上的一切已经被下面货车里的人捕捉记录了下来。

所有的电子设备都是有辐射的,这包括显示器,处理器,通信线路等等,辐射可在空间或者导体中传播。辐射中可能包含信息,并有可能被捕捉并重建。比如本文开头例子中,显示器辐射的电磁波被接受,重建之后可以得到显示器上的图象。这绝对不是危言耸听,因为你自己可以做个实验,用CRT显示器产生调幅(AM)信号,并用普通的短波收音机接收。

为了让CRT显示器产生AM信号,我们需要在显示器上显示特定的图象,从而让电子枪在显示这幅图象时,其信号正好是我们需要的AM信号。假设被调制信号是一个频率为ft的余弦信号,而载波的频率为fc,则AM信号可表示为:

    s(t) = A * cos(2 * pi * fc * t) * [1 + m * cos(2 * pi * ft * t)]

       
这里说一下显示器电子枪,比如800 x 600点的显示器,显示一幅图象,电子枪从屏幕左上角开始,水平打第1行的800个点,然后跳到第2行的左边,又打第2行的800个点,这样一直下去,一直打600行就完成了一幅图象。然后又从屏幕左上角开始刷新第2帧...刷新率85Hz的显示器,每秒要刷新85帧。

显示器有几个参数。首先是点频fp,是电子枪从一个点打到下一个点所用时间的倒数。然后是行频fh,就是扫描一行所用时间的倒数,但是fh并不恰好等于fp除以水平方向的点数,因为电子束从上一行的最后一个点移动到下一行的第一个点需要较长的时间。另一个参数是场频fv,也就是帧的刷新率。

这样就可以开始计算了,假设开始时t=0,电子枪打在屏幕左上角,也就是x=0, y=0的位置,那么当电子束移动到(x, y)处时,所经过的时间为:

     t = x/fp + y/fh + n/fv


其中n为帧数。我们在屏幕上显示静止的图象,这样每一帧都是一样的,我们可以取n=0,并在屏幕上显示一幅256级灰度的图象,这样对每一个象素,我们可以计算t,取s(t)公式中A=255/4, m=1,则可以计算出s(t),然后显示的灰度值为255/2 + s(t) + R,R是[0,1]之间均匀分布的随机数(用来分散量化噪声)。

行频fh、场频fv、点频fp这些参数都可以从显示器的铭牌或者说明书上找到。有些显示器的智能菜单中也会显示这些信息。

所以我们可以做一个程序来实验一下。下面的图形是别人做的一个实验:



载波频率为2MHz,被调制信号的频率分别为300Hz和1200Hz,都在音频范围内,通过AM解调后可以听到。

也有人更进了一步,他们实现了一个linux下的程序,可以通过CRT显示器发射语音广播,甚至MP3音乐。见[url]http://www.erikyyy.de/tempest/[/url]


参考资料:
1. [url]http://www.eskimo.com/~joelm/tempest.html[/url]
2. Markus G. Kuhn's and Ross J. Anderson's, "Soft Tempest: Hidden Data
  Transmission Using Electromagnetic Emanations"

      [url]http://www.cl.cam.ac.uk/~mgk25/ih98-tempest.pdf[/url]
3. [url]http://www.erikyyy.de/tempest/[/url]