• <rt id="ea8m2"><optgroup id="ea8m2"></optgroup></rt>
    <xmp id="ea8m2"><samp id="ea8m2"></samp>
    <acronym id="ea8m2"></acronym>
    <sup id="ea8m2"><center id="ea8m2"></center></sup>
    <acronym id="ea8m2"><small id="ea8m2"></small></acronym><rt id="ea8m2"><small id="ea8m2"></small></rt>
    <rt id="ea8m2"><small id="ea8m2"></small></rt>
    <tr id="ea8m2"></tr>
    当前位置:首页 > 杏耀夏日通讯手机网文章列表 > 查看文章
    车真的那么容易偷吗?汽车无线钥匙杏耀通信安全的一点科普
    发布时间:2019年1月7日 点击次数:233
    不久前在HackPWN的启动仪式上,安全人员仅用2分钟就通过无线钥匙破解了一辆奔驰汽车,看起来黑客要偷走一辆汽车很容易。真的这么简单吗?作为无线安全研究者,在这里给大?#26131;?#19968;点简单的汽车无线钥匙通信安全的科普。

    先从汽车无线钥匙的“信号”长什么样说起吧?

    常见的汽车无线钥匙一般工作在两个频点,315MHz和433MHz。调制方式比较常见的有两种,ASK和FSK。复杂一点的有双频点FSK,还见过多频点ASK的。

    可以用俗?#39057;?#35270;棒的一种小?#24067;?#26469;观察汽车钥匙的无线信号。在网络上搜索“RTLSDR”,”电视棒?#20445;?#23601;可以找到。它本来是用来插在电脑上,收看电视节目的。大概50块钱就可?#26376;?#21040;。
    rtlsdr_pic.jpg

    把它接上天线,然后插到电脑上,使用一些观察频谱的软件就可?#38053;?#21040;,比如:

    - HDSDR (http://www.hdsdr.de/)
    - SDR# (http://sdrsharp.com/)
    - Gqrx (http://gqrx.dk/)

    把频点设在汽车钥匙使用的频点上,就可?#38053;吹较?#19979;图这样的频谱。

    carkey_bens.PNG

    这是一辆奔驰车的钥匙信号频谱。频段是433MHz。中心频点是433.96MHz。

    carkey_audi.PNG

    这是一辆奥迪车钥匙的信号。

    从图中可?#38053;?#20986;,信号的频段是315MHz频段。中心频点是315.04MHz。

    这里使用的软件是HDSDR。我们将这段信号存为波形文件。

    使用音频分析软件打开波形文件。

    audi_wav_01_01.png

    这就是一次按键发出的信号。有两段信号。如果按的时间长一点,就会是这样。

    audi_wav_01_02.png

    出现好几段信号。按下的时间内,钥匙?#20013;?#21457;出一段一段的信号。这里面的每一段信号都是一样的,重复发送。我们来仔细看一下每一段信号的样子。

    audi_wav_02_01.png

    把信号放大展开,可?#38053;?#21040;每一段信号,前面部分是一些重复的脉冲,就叫它同步引导序列吧,它用来提示接收机有信号即将到来,还可以获得时钟信息。后面的部分是有效的数据。

    我?#21069;?#19968;次按键的两段信号拖到一起,比较一下。

    audi_wav_03.PNG

    可?#38053;?#21040;是完全一样的。如果把两次按键的信号放在一起比较。

    audi_wav_04.PNG

    可以发现,两个信号是不一样的。也就是说汽车钥匙?#30475;?#25353;键,发射的信号是不一样的。

    这就是大名鼎鼎的“滚动码?#20445;癛olling code”。
    滚动码的原理大致是这样滴:


    1.滚动码是一个周期很长的伪随机码。例如有240。意思就是码的长度有40个bit。现在大部分车钥匙的码长都比40bit长。
    2.车钥匙里存有当前的滚动码。当车钥匙按下时,滚动码加上功能码(比如是开锁,解锁,还是开后备箱)一起发送给汽车。
    3.汽车也存有当前的滚动码。当它收到同样的滚动码时,它就执行相应的开锁之类的操作。如果收到的码不匹配,它就不做任何动作。
    4.车钥匙和汽车里的滚动码是保持同步的。
    5.当车钥匙距离车很远的时候,有人不小心按了几次车钥匙,车钥匙的随机码就会前进好几步。此时跟车内的码就不同步了。为了解决这个问题,汽车允许接收当前码之后的(比如)几百个码。只要车钥匙发送的码在这个窗口之内,汽车都认为是有效的。
    6.如果车钥匙被误按超过设定的几百次,那么车钥匙和车就彻底失去同步了。这时,需要查找汽车的使用手册,找到恢复同步的方法了。

    从上面这个原理可?#38053;?#20986;来,如果我们能得到汽车当前滚动码“之后”的一个码,只要在窗口之内,就可以把车打开。怎样才能得到一个有效的,未被使用的码呢?比较简单的方法是这样的:

    汽车钥匙_20150702_1.jpg

    录制一段信号,然后到汽车那边去播放。

    汽车钥匙_20150702_2.jpg

    或者是,一边录,一边播……

    不管怎样都需要接触到车钥匙,所以这并不是那么容易的事情啊。?#23478;?#24037;具呢,有很多种,用前面讲到的电视棒就可以了。播放工具呢,也有很多种,比如rfcat

    rfcat.jpeg

    再比如,使用TI的C1111自己做一个RF收发分析器,比如UnicornTeam做的下面这个东西(增加了PA和SMA)

    20150702_154316.jpg

    那有没有不需要接触钥匙,就能得到一个有效码的方法呢?

    当然也是有的,那就是一些高级方法了。下面进入密码学的学术领域……

    这个链接是2007年以色列和比利时的几个研究者,找到的一种破解滚动码的方法。它需要先花大约一个小时的时间对钥匙进行65536次试探,解出64bit中的36个bit,然后再花几秒钟就可以完全破解钥匙的滚动码。完全破解的意思就是,这个伪随机码的全部规律?#23478;?#32463;被破解了,可以知道下一个码是什么。

    在?#23548;?#20013;,它需要用相应的芯片(也就是汽车端配对的芯片)伪造一个transponder and encoder,让它工作在IFF(IDENTIFY FRIEND OR FOE)模式,对车钥匙发出试探信号(challenge),车钥匙发回一个response。车钥匙每产生一次response需要60ms或90ms。因此,收集65536个challenge/response消息对,需要65或者98分钟的时间。而且,车钥匙能?#24674;?#25345;IFF模式的距离是多远呢?应该是非常近的距离。所以场?#23433;?#19981;多是这样滴:

    汽车钥匙_20150702_3.jpg

    2008年,德国鲁尔大学的几个研究者使用了side-channel attack(中文有翻译为,?#26376;?#25915;击,也有叫边信道攻击)的方法,通过分析解码控?#30772;?#30340;功耗来解出KeeLoq密码。因为控?#30772;?#22312;做不同运算时消耗的功率是不一样的。通过测量控?#30772;?#30340;功?#27169;?#32467;合KeeLoq的算法,这种算法基本上是很成熟和固定的,可以?#39057;?#20986;控?#30772;?#20013;存储的密钥是什么。他们的研究成果,把破解KeeLoq密码的时间缩短到了几秒钟。

    汽车钥匙_20150702_4.jpg

    看起来这个方法是最牛最高效的了。但是你仍然要接触到钥匙,还要懂得怎么测量控?#30772;?#30340;功?#27169;?#33021;分析出啥时候在算乘法啥时候在算加法……估计全世界懂这个技术的人也不多了。

    所以!开车门也不是那么容易的。?#23548;?#20013;,小偷们的开门方法其实是这样的。

    汽车钥匙_20150702_5.jpg

    以上说的都是通过钥匙的无线信号解锁的方法。现在的车越来越智能,出现了用蓝牙连接,用手机APP通过蜂窝网络连接,等等各种新的开车的方法。就不在本文?#33268;?#30340;范畴了。一个系统越复杂,可能出现的漏洞就越多。

    另外,开关车门和发动汽车又是两码事,分别有两个系?#24443;?#29702;。所以即使打开了?#29275;?#20063;很难把车开走。你以为扯出两根电线短路一下就能发动汽车吗?那都是电视剧!

    Hack,这个词有拆开来,钻进去,看看里面究竟是怎么回事,这样的意思。所以我们常常说破解XX,未必是有漏洞能利用,也有分析内部原理的意思。
    河北快三开奖结
  • <rt id="ea8m2"><optgroup id="ea8m2"></optgroup></rt>
    <xmp id="ea8m2"><samp id="ea8m2"></samp>
    <acronym id="ea8m2"></acronym>
    <sup id="ea8m2"><center id="ea8m2"></center></sup>
    <acronym id="ea8m2"><small id="ea8m2"></small></acronym><rt id="ea8m2"><small id="ea8m2"></small></rt>
    <rt id="ea8m2"><small id="ea8m2"></small></rt>
    <tr id="ea8m2"></tr>
  • <rt id="ea8m2"><optgroup id="ea8m2"></optgroup></rt>
    <xmp id="ea8m2"><samp id="ea8m2"></samp>
    <acronym id="ea8m2"></acronym>
    <sup id="ea8m2"><center id="ea8m2"></center></sup>
    <acronym id="ea8m2"><small id="ea8m2"></small></acronym><rt id="ea8m2"><small id="ea8m2"></small></rt>
    <rt id="ea8m2"><small id="ea8m2"></small></rt>
    <tr id="ea8m2"></tr>