这是一篇刊登在Sensys 2012年的文章,Sensys是无线传感器网络的顶级会议,不过由于传感器网络已经淡出学术视线,且国内中过这个会议的人寥寥无几,所以知道的人想必不多。这篇文章想研究的问题是:如何用现有的无线路由器来监视人们的手机位置。
首先,科普一个知识点:为什么人们的手机可以被监视到呢?能够监视到哪些信息呢?现有的无线通信基本上是基于广播的机制,当A通过无线发消息给B的时候,离A比较近的范围内都能听到该消息。在手机发出的各种消息中,很多都经过加密,所以基本上不用担心隐私信息泄露(比如用户名、密码、信息内容等)。但是消息里包含的手机的MAC地址一般是不加密的。目前大多数手机的MAC地址都是固定的,所以,MAC地址可以唯一确定手机用户。也就是说,通过监听无线信道,可以推断一个手机用户出现的位置。不过,如果监听方不知道MAC地址与用户之间的映射关系,所以仅仅通过MAC地址不足以确定究竟是“谁”在使用这个手机。
本文的主要内容集中在第4章和第5章。第4章中解决的问题是如何根据监听结果恢复一个人的可能的行动路线,也就是tracking。为什么这个问题难呢?由于手机发出消息的时间有很大的不确定性,所以可能监听到某个MAC地址的过程是:
T1时刻,路由器A1,坐标(x1,y1)
T2时刻,路由器A2,坐标(x2,y2)
...
Tn时刻,路由器An,坐标(xn,yn)
这个过程中,相邻两条记录的时间间隔是很不确定的,比如手机在锁屏的情况下可能长时间不发送任何消息。所以,直接将上面的(x1,y1)到(xn,yn)连起来得到的路线可能误差很大。并且需要注意一点,上面的坐标只是路由器估计得到的,可能非常粗糙。因此,作者将这个跟踪的过程描述为一个隐马尔科夫过程(HMM)。具体的状态定义可以参考论文原文4.3到4.5,定义完成后直接套用Viterbi算法就能算出概率最大的路线。不过,这种做法其实并不新颖,参看引用[26]就能找到另一篇采用一模一样建模方法的论文了。
其实论文真正有意思的是第5章,这里面讨论了有什么办法能促进手机发消息。可能很多人想问题都只想到前4章,我个人认为第5章才真正决定这篇文章收还是拒。作者提到了三种方法:
- Popular SSID AP Emulation:一些通信运营商(如AT&T和T-mobile)都会部署一些AP来缓解日益增大的流量需求,这一点国内中移动、联通也这么干。这些运营商部署的AP都有相同的SSID(就是AP的名字),这样做方便用户自动连接这些AP。于是,监听AP佯装这些很多人都会自动连接的AP也广播与它们相同的SSID来“骗”手机连接,于是捕获它们的MAC地址。
- Opportunistic AP Emulation:手机会时不时搜索周围是否有以前连接过的AP,那么监听到这些查询消息的监听AP佯装自己就是某一个被搜索的AP,诱骗手机尝试连接,捕获MAC地址。
- RTS Injection:RTS全称是Request To Send,是802.11协议里规定的一种用来协调信道使用的消息(解决隐终端问题)。按照802.11规定,如果一个手机接收到RTS消息,它必须回一个CTS(Clear To Send)消息。所以,监听AP可以不断给曾经听到的MAC地址发送RTS消息来强制它们回复CTS,这样达到持续监听的目的。
长达7个月实验数据证明了上述三种方法能够增大接收到的消息量。论文还讨论了一些其它的问题,比如能够从监听到MAC地址的数量反映高峰期的问题等等,但那真的不是重要的,只是让论文更加完整些。
后记:在科普里提到的一些问题,我一般都用了“大概”这样的关键词,是为了不绝对化问题。比如,iOS 8就号称会随机改变手机的MAC地址,让用户不容易被跟踪;一些公司也不是完全没法获得MAC地址跟用户之间的映射关系,比如通过安装APP盗取等等。