其實原理很簡單,大家只要有時間,翻一下Bluetooth Spec,了解一些各種Key的產生方式,就知道如何進行攻擊。當然,這方面的文章,網路上很多,大家可以去看看。在這裡,用我自己的方式,解釋給大家。如果看完後,晃然大悟,那就是對大家有貢獻。若看完了還是不懂,可能是本人表達的不清楚,只好自己想辦法吧。
藍芽配對的流程,從輸入PIN產生Kinit,再產生Kab,即完成配對。配對完的兩個設備,都存放相同的Kab。用下面兩張圖(來自於Multilevel Security Algorithm for Bluetooth Technology)說明。
兩個設備靠近時,要建立安全通訊之前,要先確認對方設備是否曾經被配對過,也就是確認對方是否可信的(Trusted)。如下圖,Device A想要驗證Device B是否可信:
- Device A發一個亂數AU_RANDa給Device B。
- Device B拿到AU_RANDa,和BD_ADDRa和Kab,計算,得到AU_RANDa。
- Device B回傳SRESa'給Device A
- Device A自已也會根據AU_RANDa用和Device B同樣的方式(E1),算出SRESa。
- Device A比較這兩個值,SRESa與SRESa',若一樣,表示Device B是可信的。
以上是兩個設備的驗證過程。駭客可以利用這一點,暴力破解,去猜PIN。若SRESa與RRESa'值一樣,表示PIN被猜到了。
使用者,在做傳統藍牙配對的時候,駭客會用藍牙分析儀去監聽藍牙封包。分析儀是得不到PIN,因為那是使用者自己輸入的。但分析儀可以得到
- IN_RAND
- Kinit xor LK_RANDa
- Kinit xor LK_RANDb
- 雙方的藍牙位址:BD_ADDRa、BD_ADDRb
攻擊步驟:
- Attacker監聽兩個設備配對的過程,截取以下值及藍牙地址,記錄在Table裡
- IN_RAND
- LK_RANDa xor Kinit
- LK_RANDb xor Kinit
- Attacker不知道Device的PIN,但知道配對時傳遞的一些數據,而且存在Table裡,於是開始爆力破解PIN。
- Attacker 發AU_RANDa給Device
- Device傳SRESA’給Attacker
- Attacker不斷地試PIN,就會一直產生SRESa。直到找到PIN,使得SERSa=SERSa’。因為PIN只有6位數,所以很快可以找到。
- 一旦Attacker知道PIN,就可以算出Kinit ==> Kab ==> Kc ==> Kc’。
- 之後兩個設備之間通訊是拿Kc’加密。因所以Attacker會順便破解藍牙通訊傳遞的密文。
為何Bluetooth Simple Paring無法採用這種方式?因為配對過程用的是ECC,雙方各有Public Key與Private Key,而且Key的大小是256 bit,很難爆力破解。這涉及到密碼學,以後有空再為大家介紹。
-Count
您好,想請問藍牙的public key和private key是怎麼產生的?
回覆刪除