楊新宇
摘要:谷歌推出的安卓平臺以其良好的開放性和靈活性贏得廣大消費者的歡迎。文章針對安卓手機的移動社交軟件中存在的安全隱患,以保護用戶個人通信的隱私,提高短信傳輸的可靠性及安全性為目的,研究了在Android平臺上對字符串進行加密和簽名認證的方法。設計并實現了一個加密和簽名認證的通信系統,該系統用AES加密算法實現對字符串的加密,用RSA簽名算法實現對字符串的簽名和驗證。具有良好的兼容性和實用性,在系統中添加了短信發送功能,更加方便了用戶使用。
關鍵詞:Android系統;AES算法;RSA算法;信息安全
1 引言
云計算技術隨著大數據時代的到來不斷發展,人們通過網絡方便地進行信息交流,隨之而產生的移動社交軟件也層出不窮。諸如QQ、微信、微博、短信等早已深入到人們的日常生活之中。人們享受便利與高效通信的同時,伴隨而來的安全問題正時刻困擾著我們。“棱鏡門”等類似事件也在不斷向我們敲響警鐘,即在雙方利用手機進行通信時,社交軟件公司、互聯網運營商等都有技術來獲得用戶通信內容。就目前來看,主要存在著以下隱患:(1)編輯的字符串以明文形式發送,在不安全的信道中傳輸,字符串內容可能被惡意第三方獲知。(2)接收方無法對字符串的發送者進行身份鑒別,發送方可以抵賴,單憑賬號和手機號已經缺乏可靠性。(3)接收方對字符串內容的完整性不能鑒別,無法獲知該內容是否被他人篡改。
因此,在使用移動社交軟件時如何將用戶的隱私控制在用戶自己手中,如何提高用戶信息的安全性顯得至關重要。為此,本文以安卓手機為例,結合安卓手機短信的運行機制,設計并實現了一個針對社交時敏感字符串的簽名、加密通信系統,用戶可對字符串進行簽名驗證、加密解密。其特點如下:具有較強的實用性;具有較好的兼容性;具有一定的安全性;保證了字符串的可信性、不可抵賴性和數據完整性;操作簡單方便。
2 系統設計
2.1系統模型
整個系統模型可分為3層,其中安卓平臺作為底層,移動社交軟件作為中間層,通信系統作為頂層。圖1是系統的設計模型。
安卓平臺作為底層包括了應用層、應用框架層、系統運行庫層和Linux內核層,該層提供基本的功能支持,如連接互聯網,獲取SIM信息等。社交軟件層包括了用戶常用的各種社交軟件,在該層點擊“發送”按鍵后,信息交由底層發送至信道中,接收方獲得密文后也是在該層顯示出來。通信系統層為字符串提供加密、簽名、簽名加密三種功能(簽名加密是將前兩種功能結合起來一并使用),具體使用哪種由用戶自己選擇。
2.2系統模塊
本系統主要分為3個模塊。分別是發送接收模塊、加密解密模塊、簽名驗證模塊。圖2展現了各模塊之間的關聯。
其中發送接收模塊提供了短信的發送和接收功能。通過該模塊不需要借助于移動社交軟件就可以直接進行字符數據的傳輸,為使用短信通信提供了便利。在發送前,系統會通過判斷語句對短信字符長度進行判斷,如果消息長度超過70個字符,短信會自動分為兩條發送。當然用戶也可以通過復制粘貼的方式將密文導入安卓手機自帶的短信發送軟件中實現發送。
加密解密模塊采用對稱加密中的AES算法。在眾多加密方法中,對稱加密具有加密速度快、加密數據量大的優點,適合在字符串長度較長的情況下進行加密。而其中的AES算法也是當前較為常用的一種加密算法,該加密算法采用分組加密的方式,共有128bit、192bit和256bit三種分組長度,這里采用256bit。在通信前輸入對稱密鑰,編輯字符串,完成加密。復制粘貼到用戶使用的社交軟件對話框中,點擊發送便完成了密文的傳輸。接收方在社交軟件對話框中看到密文后,將密文導入系統中,輸入對稱密鑰進行解密。
簽名驗證模塊采用RSA算法,該算法在數字簽名中使用較為廣泛。為了保證在計算上的困難性,密鑰長度至少在1024bit。
3 系統實現
本系統在安卓系統2.3.3版本上進行設計,該版本在市場上出現較早。
3.1系統流程
1.密鑰分發。(1)AES密鑰:手工分發、RSA加密分發。(2)RSA公鑰:短信發送、互聯網發布。
2.AES加密發送短信。(1)輸入密碼、短信內容和電話號碼。(2)對短信內容加密。(3)發送密文。
3.RSA簽名發送短信。(1)輸入短信文本。(2)對原文簽名生成消息摘要。(3)輸入AES加密密鑰,對消息摘要和明文加密形成密文。(4)發送密文。
3.2功能實現
1.置布局文件。
使用線性布局作為整體的布局框架。首先界面上要有輸入密碼,輸入短信字符串及輸入電話號碼的可編輯文本框,其次一個加密的按鈕點擊后實現加密,一個解密按鈕點擊后實現解密,一個發送按鈕發送短信,以及一個返回按鈕結束程序。整個布局采用線性布局,里面再嵌套兩個線性布局。至于簽名驗證模塊的布局原理類似,不加以贅述。圖3為加密解密模塊的布局效果圖。
2.發送功能。
(1)系統具備發送短信的功能,在AndroidManifest.xml文件中需要添加發送短信的權限
(2)將Android中自帶的telephony.SmsManager類導入。
(3)設置監聽器監聽事件btnSend.setOnClickListener(new OnClickListener(),一旦觸發,立即讀取短信字符串和手機號碼字符串。
(4)發送短信smsManager.sendTextMessage(mobile, null, msg, null, null),彈出提示框“短信已發送”。
3.加密解密功能。
(1)調用加密函數AESCipher類進行加密
dest = AESCipher.encrypt(key, src)
(2)加密函數
public class AESCipher {public static String encrypt(String key, String src) throws Exception {
byte[] rawKey = getRawKey(key.getBytes());
byte[] result = encrypt(rawKey, src.getBytes());
return toHex(result); }
(3)加密流程
字符數據轉化為字節數據。
src = etStr.getText().toString().trim()
字節數據轉化為十六進制字符串
public static String toHex(String txt)
{return toHex(txt.getBytes()); }
圖5、圖6分別為原文加密后的應用界面。
(4)解密
解密時調用相應的解密函數:
dest = AESCipher.decrypt(key, src)
4.簽名驗證功能。
(1)密鑰生成
生成公私密鑰對:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(RSA)
密鑰位數為1024位,keyPairGen.initialize(1024)。
動態生成密鑰對,這是當前最耗時的操作,一般要2s以上。
KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
byte[] publicKeyData = publicKey.getEncoded();
byte[] privateKeyData = privateKey.getEncoded();
(2)簽名
用戶編輯完字符串后,將私鑰導入相應的文本框中,點擊“簽名”按鈕。系統讀取字符串。
String content = txtInput.getText().toString()
RSA簽名函數對字符串完成簽名。
byte[] dataEncode=cipher.doFinal(content.getBytes());
最后經Base64編碼后導入通信雙方的對話框中。
(3)驗證
用戶從對話框中獲得簽名,經過解碼后,導入發送方公鑰,點擊“驗證”按鈕。主要代碼如下:
byte[] miwen = content.getBytes();
byte[]=android.util.Base64.decode(miwen,Base64.DEFAULT);
byte[] dataDecode = cipher.doFinal(b);
4 結束語
本文就移動社交網絡中傳遞的字符串加密和簽名方法進行了研究和設計,在使用社交軟件時,通過本系統可對敏感信息進行即時加密和簽名。即使被惡意第三方獲得了密文,也無法立即獲取信息內容。接收方在獲得密文后同樣使用復制、粘貼的方式,將密文導入系統中完成解密、驗證。在今后的工作中,可嘗試添加RSA公鑰加密模塊,實現對AES對稱密鑰的管理,在社交軟件群聊的信息傳遞模式中也可以實現安全的通信,不再局限于目前點對點的信息傳遞。