馮益斌


摘 要: 近年來搭載Android系統的智能可穿戴設備發展迅速,藍牙通信技術廣泛地應用在智能可穿戴設備中,使其能與手機之間相互通信,實現圖片、視頻、文件等數據傳送功能。研究基于Android系統的藍牙遠程控制功能,通過建立的藍牙連接,實現智能手表與手機之間的數據傳送,為了保障數據的安全性,對傳送的數據進行了混合加密。應用程序運行在搭載Android系統的GEAR智能手表和手機上,實現了通過GEAR手表實時預覽手機攝像頭采集到的圖像,并且遠程控制手機拍攝照片的功能。
關鍵詞: 遠程控制; 藍牙; Android; 混合加密
中圖分類號: TN92?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)05?0089?04
0 引 言
基于藍牙的遠程控制功能能夠使智能可穿戴設備更好地與手機相互配合起來。本文實現的遠程控制功能應用于搭載Android系統的三星Gear智能手表與手機之間,通過發送自定義的藍牙數據結構,實現了對控制信息和數據信息的區分,能夠識別控制信息的類型,應用于Gear手表與手機之間,通過相互連接之后,Gear手表能夠實時預覽手機攝像頭獲取的數據,并且能夠控制手機進行拍照。
然而考慮到安全性問題,藍牙數據在傳送的過程中容易被竊取[1],這將對用戶的隱私造成極大的威脅。因此,對藍牙數據進行加密也是尤為重要的。通過對加密算法的分析與研究,本文采用了混合加密算法。對于智能可穿戴設備這一類運算能力不是很強的設備,加密速度尤為重要,RC4加密算法在流加密上的優勢,能夠滿足應用的需求,然而其安全性并不是最好,通過截獲的數據容易分析出加密的秘鑰。因此采用RSA非對稱加密算法對RC4秘鑰進行再一次的加密,由于秘鑰信息比較短,加密算法的復雜度對加密速度的影響比較小,采用RSA安全度高的算法來保證RC4秘鑰信息不被直接讀取到更加重要[2]。
1 功能模塊劃分
Android應用程序由四大基本組件Activity,Service 服務,Content Provider內容提供者和BroadcastReceiver 廣播接收器組成。四大組件通過相互之間的配合、數據傳送,實現了應用程序的功能,完成了用戶與系統之間的交互,滿足了用戶的實際需求[3]。
基于藍牙的遠程控制功能研究是為了使搭載Android系統的智能可穿戴設備與手機之間實現遠程控制的功能。本研究要求創建Android應用程序,實現智能手表遠程控制手機拍攝照片的功能。深入分析了基于藍牙的遠程控制功能的主要內容,將研究的內容劃分為以下3大模塊[4]:
(1) 藍牙通信模塊:通過對Android系統藍牙模塊的分析,調用AndroidSDK中的接口函數,實現了設備之間通過藍牙協議來建立數據的連接,并且實現數據傳送的功能[5]。
(2) 遠程控制模塊:此模塊通過定義的數據包頭來區分發送數據的類型是數據信息還是控制信息,使得Android設備之間可以通過傳送數據信息和控制信息兩種信息類型,從而實現了基于藍牙的遠程控制功能。
(3) 數據加密模塊:此模塊實現了RC4加密算法與RSA加密算法相結合的混合加密算法,應用于基于藍牙的遠程控制功能,保護了數據傳送的安全性。在3大模塊的基礎上,最終設計并實現了一個運行在Android系統上的應用程序。應用程序運行在GEAR手表和Android手機上,實現了手表與手機之間藍牙連接的建立,完成了通過遠程控制來拍攝照片的功能。
2 藍牙通信模塊設計與實現
2.1 藍牙協議數據傳輸
完整的藍牙協議棧根據各協議所處的位置可分三大類,分別是底層協議、中間層協議和高層協議。
藍牙底層協議實現了傳輸鏈路的建立,用于傳送藍牙信息數據流,是藍牙協議體系的基礎。藍牙底層協議包括藍牙射頻協議(RadioFrequencyProtocol)、鏈路管理協議(LinkManagerProtocol,LMP)、藍牙基帶協議(BaseBandProtocol)和主機控制器接口協議(HostControllerInterfaceProtocol,HCI)。藍牙射頻協議決定了藍牙通信的技術特點,使藍牙工作在免許可的2.4 GHz ISM頻段。藍牙基帶協議在藍牙協議棧中位于藍牙射頻層之上,是設備之間通過藍牙協議通信的關鍵程序,定義了微微網的創建過程以及如何通過藍牙相連接。
藍牙中間層協議的主要功能是數據幀的分解與重組、組提取、服務質量控制等。中間層協議為上層應用程序提供服務,提供底層協議的接口。
藍牙高層協議包括對象交換協議(ObjectExchangeProtocol,OBEX)和無線應用協議(WirelessApplicationProtocol,WAP)。對象交換協議屬于會話層協議,由紅外數據協會制定,主要用于紅外數據鏈路中數據對象的交換。使得基于紅外鏈路的應用程序能夠方便地移植到藍牙協議上。
2.2 藍牙功能接口概述
通過調用藍牙協議棧接口,編寫應用程序,從而實現藍牙通信功能,使得應用程序能夠實現藍牙設備的搜索、請求藍牙配對、建立RFCOMM通道、與其他設備相連接的功能。調用AndroidSDK提供的應用編程接口,可以實現藍牙通信的基本功能,功能主要分為以下6大類:搜索藍牙設備;查詢本地藍牙適配器配對的藍牙設備;建立RFCOMM通道;通過服務發現并連接到其他設備;與其他設備之間傳輸數據;管理多個連接[6]。
2.3 藍牙通信模塊的實現
通過對藍牙協議棧的分析,掌握了藍牙協議棧中各協議的主要功能,掌握了數據在藍牙通信過程中的傳送過程以及設備之間建立藍牙連接的完整步驟。通過對Android系統SDK提供的藍牙協議棧接口的學習,掌握了基于Android系統開發藍牙通信模塊的基本步驟和實現方法。Android系統中藍牙通信模塊的實現主要包括4大部分:本機藍牙模塊的配置、藍牙設備的搜索、藍牙設備連接的建立和藍牙設備通信的實現。
2.3.1 本機藍牙模塊的配置
AndroidSDK提供了一個核心類BluetoothAdapter,通過創建BluetoothAdapter實例對象來配置本機藍牙模塊的相關屬性,在程序中的實現如下:
//實例化系統 BluetoothAdapter 對象
BluetoothAdapter mAdapter = Bluetooth Adapter. get DefaultAdapter();
//直接打開系統的藍牙設置面板
Intent intent = new Intent (BluetoothAdapter.ACTION _REQUEST_ENABLE);
startActivityForResult(intent, 0x1);
2.3.2 藍牙設備的搜索
配置了本地的藍牙屬性,開啟藍牙功能之后,接下來調用 BluetoothAdapter. startDiscovery()實現搜索附近設備功能。
startDiscovery()方法是一個異步方法,調用后會立即返回。該方法對附近可見的藍牙設備進行搜索,該過程會持續12 s。當該方法被調用后,搜索過程在一個 System Service中完成,當搜索到需要連接的藍牙設備可以通過調用cancelDiscovery()方法來停止搜索。調用startDiscovery()方法后,系統開始搜索藍牙設備,此時系統會發送以下3個廣播命令:
ACTION_DISCOVERY_START表示開始搜索;ACTION_DISCOVERY_FINISHED表示搜索結束;ACTION_FOUND表示找到設備。應用程序將搜索到的藍牙設備以列表的形式展示給用戶,供用戶選擇。
2.3.3 藍牙設備連接的建立
藍牙設備連接的建立,是以服務器端與客戶端的機制來實現的。兩個藍牙設備在同一個RFCOMMchannel下分別獲得一個連接的BluetoothSocket,便可建立藍牙設備的通信連接??蛻舳讼驅嵗膁evice發出建立連接的請求,即通過createRfcommSocketTo ServiceRecord()方法來請求建立一個連接,當連接創建成功后,返回一個BluetoothSocket類型數據:
BluetoothSocket mSocket = device. createRfcommSocketTo ServiceRecord(MY_UUID_SECURE);
服務器端通過UUID創建BluetoothServerSocket來接收來自其他設備的連接請求:
BluetoothServerSocket mServerSocket=mAdapter.listen UsingWithServiceRecord(NAME_SECURE, UUIDE);
當接收到藍牙設備的連接請求時,調用mServerSocket的accept()方法,實現服務器端BluetoothSocket的初始化。
2.3.4 藍牙設備通信的實現
已經建立了藍牙連接的Android設備通過調用BluetoothSocket的getInputStream()方法來獲得輸入流,調用getOutputStream()方法獲得輸出流。輸入流用于接收已連接的藍牙設備發送過來的數據,從輸入流中讀取數據,即可實現數據的接收。輸出流用來發送數據到已連接的藍牙設備上,向輸出流寫數據,即可實現數據的發送。數據的發送和接收過程如圖1所示。
3 遠程控制模塊的研究與實現
3.1 遠程控制功能研究
Android系統中,藍牙協議棧在AndroidSDK中實現,藍牙數據底層解析的過程是應用程序不可見的。對于兩個通過藍牙協議連接的智能設備,運行在手表端和手機端的應用程序,僅能夠對輸入流和輸出流進行操作,向輸出流寫數據便能夠實現數據的發送,從輸入流中讀數據便能夠實現數據的接收。
3.2 數據結構定義
通過分析設定包頭的大小為1 B,包頭的數值范圍為0~255,最多能夠表示256種不同的數據類型,此應用程序的數據類型有兩種,即數據信息和控制信息,因此可以選取0和1分別表示。其余的數值表示,可用于程序的擴展,當所要區分的數據類型增多后,可使用保留的數值來表示。對于本應用程序用數值0來表示普通數據信息,數值1表示控制信息。
確定了數據包頭的數據大小,以及各數據類型的表示后,定義一個發送數據的結構,管理發送和接收的數據,定義的數據結構如下:
class SendData
{ //定義字節類型的control包頭 public byte control;
//數據部分為字節數組 public byte[]; data; }
3.3 遠程控制功能實現
設計的應用程序將基于Android的遠程控制功能應用于手機與智能手表之間,實現手表控制手機拍攝照片。在Android應用程序中實現遠程控制的功能,首先要對包頭信息進行定義。根據遠程控制功能的分析以及數據結構的定義可知此應用程序中發送信息分為兩類,一類發送的是圖像的數據信息,在Android程序中定義靜態變量:
Private static final byte DATA=(byte)0;
發送圖像信息時,用來對發送數據結構的包頭進行賦值,標明發送的數據圖像信息。另一類是拍攝照片的控制信息,在Android程序中定義靜態變量:
Private static final byte TAKE_PHOTO=(byte)1;
發送拍攝照片的控制信息時,對發送數據結構的包頭進行賦值,標明發送的數據為拍攝照片控制指令。
應用程序中,已經建立藍牙連接的兩個藍牙設備,一個充當主控端,另一個充當被控端。被控端發送的數據為攝像頭采集到的圖像信息。
4 數據加密解密模塊研究與實現
4.1 加密解密算法的選擇
本功能模塊采用了混合加密的加密算法,通過RC4對原始數據進行第一次加密,由于RC4加密算法相對簡單,安全性上存在著一定的風險,而且在傳輸過程中要傳輸加密數據的秘鑰,這將極大地威脅到通信的安全。為了把這種風險降低,采用RSA加密算法進行第二次加密,第二次加密的數據僅僅是第一次加密算法RC4的秘鑰信息。整個的加密過程如圖2所示。
4.2 RC4算法實現
Android應用程序編寫使用的是Java語言的軟件開發工具包,即JDK。JDK中提供了對于加密算法的支持,因此在本應用中可以直接調用JDK提供的RC4加密算法的接口,實現對數據的加密解密過程。首先生成秘鑰程序為:
public static Key getKey()
{ Key key = null;
KeyGenerator kg = KeyGenerator.getInstance("RC4");
kg.init(128); //產生秘鑰
key = kg.generateKey(); return key; }
首先通過KeyGenerator定義秘鑰產生變量kg,通過getInstance方法構造出RC4加密算法的秘鑰產生器。然后初始化秘鑰的大小,init(intkeysize)方法中參數的數值指定了秘鑰的長度。
圖2 加密過程
4.3 混合加密算法實現
在程序中,通過返回字節數組的length數值得到數據信息的長度,長度信息為int類型的數值。int類型數據占用4 B空間,int轉換byte類型的函數為:
public static byte[] intToBytes(int n)
{ byte[] b = new byte[4];
for(int i = 0;i < 4;i++)
{ b[i] = (byte)(n >> (24- i * 8)); } return b; }
程序中RC4與RSA混合加密過程的主要程序:
public synchronized void write(byte[] buffer)
{??
byte[] encr= RC4.encrypt(buffer,key_send);
byte[] encodedData=RSAUtils.encryptByPublic Key(key_ send, publicKey);
int sum = intToBytes(encr.length);
byte[] send=new byte[4+encodedData.length+encr.length];
System.arraycopy(sum, 0, send, 0, 4);
System.arraycopy(encodedData, 0, send, 4, 128);
System.arraycopy(encr, 0, send, 132, encr.length);
?? }
首先使用RC4加密算法來加密數據buffer,秘鑰為key_send。然后使用RSA加密算法加密RC4的秘鑰信息key_send。接著,計算出buffer經過RC4加密后的數據長度。將上述的三部分信息按著定義的結構依次寫入欲發送的字節數組send中。最后,將字節數組send寫入到通過BluetoothSocket獲得的輸出流中,即可實現藍牙數據的發送。
5 藍牙遠程控制拍照實現
藍牙遠程控制的相機拍照程序是基于Android系統的藍牙遠程控制研究的一個實際應用程序。通過藍牙通信模塊的實現、遠程控制功能模塊的實現、混合加密算法的實現,將三部分結合起來,應用于遠程控制照片的拍攝上,實現了通過GEAR手表來控制手機進行照片的拍攝。
6 結 論
通過分析國內外基于藍牙的遠程通信研究現狀以及發展趨勢。對比多種對稱加密算法和非對稱加密算法的優勢和劣勢,最后選擇通過混合加密算法對發送的數據進行加密和解密。本文完成了藍牙遠程控制功能的研究,采用混合加密的方式對數據進行加密解密。將藍牙遠程控制功能的研究應用在拍照程序上,實現了通過智能手表遠程控制手機拍攝照片的功能。
參考文獻
[1] 趙姍姍,楊臻,徐奉,等.基于Android平臺的高可靠遠程控制系統[J].網絡新媒體技術,2013(7):12?14.
[2] 李忠慧,李秀梅.Android系統的安全分析及策略[J].福建電腦,2013(1):112?113.
[3] 蓋索林,王世江.Google Android開發入門指南[M].北京:人民郵電出版社,2009:43?55.
[4] 陸繼翔,李映.Android應用程序的性能優化分析與研究[J].機械設計與制造工程,2013(3):82?85.
[5] 蔡羅成.Android后臺監聽實現機制淺析[J].信息安全與通信保密,2010(6):39?41.
[6] 浩明.基于安卓系統的手機防盜設計與實現[J].現代電子技術,2014,37(14):36?39.