即時(shí)通訊加密方案探討
1.背景:
因?yàn)榛ヂ?lián)網(wǎng)是開(kāi)發(fā)透明的,任何人都可能對(duì)你的產(chǎn)品進(jìn)行破解研究,因此,在軟件的有良好的安全意識(shí)是十分必要的。
2.安全問(wèn)題分析:
2.1 客戶端方面:
- 客戶端被反編譯源碼,常見(jiàn)如: android apk被反編譯,獲取加密算法與密鑰,從而進(jìn)行破解,類(lèi)似的還要使用JavaScript技術(shù)跨平臺(tái)的移動(dòng)開(kāi)發(fā)框架等,若開(kāi)發(fā)者不注意,很容易被逆向破解。
2.2 網(wǎng)絡(luò)傳輸方面:
一般而言,API在網(wǎng)絡(luò)中經(jīng)http/https協(xié)議傳輸,有可能被黑客截取,修改數(shù)據(jù)包內(nèi)容,偽造通訊數(shù)據(jù)獲取重要信息。如手機(jī)連接到非法免費(fèi)的wifi上,有可能安裝了嗅包軟件,并進(jìn)行中間人攻擊。以下是https中間人攻擊的一個(gè)例子

3. 應(yīng)對(duì)方法
3.1 客戶端方面:
有些客戶端使用的框架避免反編譯是不可能的,常見(jiàn)anroid, 和使用javascript技術(shù)跨平臺(tái)開(kāi)發(fā)的框架如:reactnative, uniapp等。對(duì)于這種方案,最好把加/解密算法,密鑰放置在native程序或動(dòng)態(tài)庫(kù)中,并增加混淆,增加破解難度。
3.2 網(wǎng)絡(luò)傳輸方面:
- 不要使用http等明文通訊手段,使用https;
- 根據(jù)自己的業(yè)務(wù)場(chǎng)景使用合適的加密手段,常見(jiàn)有對(duì)稱(chēng)加密(3DES)與非對(duì)稱(chēng)加密(RSA)
3.2.1 對(duì)稱(chēng)加密(簡(jiǎn)單易用):
假設(shè)客戶端無(wú)法被破解,使用對(duì)稱(chēng)加密已能被避免中間人攻擊,該手段已用于各中大小廠商產(chǎn)品:
# 例子
客戶端對(duì)稱(chēng)加密(3DES)-->路由器(密文傳輸)--> 服務(wù)器(3DES解密)
3.2.2 非對(duì)稱(chēng)加密RSA+數(shù)字簽名:

參考某支付平臺(tái)(有改動(dòng)),使用上可以在通訊中可使用RSA非對(duì)稱(chēng)加密傳輸,并使用MD5(傳輸參數(shù)+鹽)對(duì)傳輸參數(shù)加密,防中間人篡改。可能某支付平臺(tái)考慮到調(diào)試的方便,就沒(méi)有對(duì)報(bào)文進(jìn)行加密了。
3.總結(jié):
采用加密會(huì)一定程度上加大研發(fā)投入與維護(hù)成本,具體需不需要就看業(yè)務(wù)需求了。E聊SDK提供了即時(shí)通訊加密方案的設(shè)計(jì),有興趣來(lái)探討。