前言
最近10年,移動App在數(shù)量和規(guī)模上爆發(fā)式增長,在爆發(fā)式增長的背后隨之而來的是移動App的安全隱患問題。下面一些數(shù)據(jù)和截圖來自于FreeBuf的的《2017年度移動App安全漏洞與數(shù)據(jù)泄露現(xiàn)狀報告》。
2017年度移動App安全漏洞與數(shù)據(jù)泄露現(xiàn)狀報告
常見的移動App的安全問題包括下面幾個方面:
- App本身的代碼、so、資源等文件的保護(hù)。
- 本地數(shù)據(jù)存儲
- 通信過程中的數(shù)據(jù)安全
- 鍵盤輸入
- 等等...
移動App本身是在一種白盒的環(huán)境,用戶可以調(diào)試,dump內(nèi)存,二次修改,抓數(shù)據(jù)包分析等等。我們既要保護(hù)app本地的代碼安全,也要保護(hù)本地數(shù)據(jù)和傳輸數(shù)據(jù)的安全。
常見加密方法介紹
- 對稱加密
DES: DES(Data Encryption Standard)是一種對稱密鑰加密塊密碼算法,以64位為分組對數(shù)據(jù)加密,它的密鑰長度是56位,加密解密用同一算法;DES現(xiàn)在已經(jīng)不是一種安全的加密方法,主要因為它使用的56位密鑰過短。
-
AES:AES(Advanced Encryption Standard)稱為高級加密標(biāo)準(zhǔn),是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。AES的區(qū)塊長度固定為128比特,密鑰長度則可以是128,192或256比特。AES是一種分組加密算法,其模式又分為:
-
ECB(ECBElectronic CodeBook mode,電子密碼本模式)加密之前將明文按固定大小分塊(128bit),不足的比特位需要進(jìn)行填充(padding)。然后,用相同的密鑰對分好塊的明文進(jìn)行加密, 得到密文;解密反之。由于ECB模式的加密方式為對每塊明文進(jìn)行單獨的加密,所以使用EBC模式是可以并行加密或解密的。但是,正是由于單獨的進(jìn)行加密,相同的明文分塊得到的密文是相同的。這種在一定程度上是不安全的。
-
加密過程
加密 -
解密過程
解密
-
-
CBC(Cipher Block Chaining mode,密碼分組鏈接模式)加密前將明文進(jìn)行分塊(128bit),不足的同樣需要填充(padding),并需要初始化一個iv向量;然后,第一塊明文與iv進(jìn)行異或,再然后用加密器生成密文;第二塊的明文再與第一塊的加密密文進(jìn)行異或,然后再進(jìn)行加密得出第二塊的密文,如此類推......實現(xiàn)鏈?zhǔn)郊用埽罱K得到密文。
-
加密過程
加密 -
解密過程
解密
-
-
CFB(Cipher FeedBack mode,密文反饋模式)首先通過加密器加密iv生成密鑰流(key stream);然后將密鑰流和明文異或得到密文。第二次,將第一次得到的密文通過加密器加密得到新的密鑰流,然后把第二次要加密的明文和密鑰流進(jìn)行異或生成密文......如此類推,最終得到密文。
-
加密過程
加密 -
解密過程
解密
-
-
OFB(Output FeedBack mode 輸出反饋模式)OFB是先用塊加密器生成密鑰流(Keystream),然后再將密鑰流與明文流異或得到密文流;解密是先用塊加密器生成密鑰流,再將密鑰流與密文流異或得到明文。由于異或操作的對稱性所以加密和解密的流程是完全一樣的。
-
加密過程
加密 -
解密過程
加密
-
-
- 非對稱加密
- RSA:RSA算法基于一個十分簡單的數(shù)論事實:將兩個大質(zhì)數(shù)相乘十分容易,但是想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。RSA是目前最有影響力和最常用的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA算法理論可以參考:RSA算法理論
- 消息摘要
SHA1:安全散列算法1(Secure Hash Algorithm 1)是一種密碼散列函數(shù),美國國家安全局設(shè)計,并由美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)發(fā)布為聯(lián)邦數(shù)據(jù)處理標(biāo)準(zhǔn)(FIPS)[2]。SHA-1可以生成一個被稱為消息摘要的160位(20字節(jié))散列值,散列值通常的呈現(xiàn)形式為40個十六進(jìn)制數(shù)。
MD5:MD5消息摘要算法(MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。
-
白盒加密
白盒攻擊是指攻擊者對設(shè)備終端擁有完全的控制能力,能夠觀測和更改程序運行時的內(nèi)部數(shù)據(jù)。白盒密碼技術(shù)是一項能夠抵抗白盒攻擊的密碼技術(shù)。保護(hù)密鑰安全是密鑰白盒產(chǎn)品的一個基本訴求,保護(hù)終端密鑰安全是指終端環(huán)境(Android、iOS等)在很多時候就是一個白盒攻擊環(huán)境。
保護(hù)移動App通信數(shù)據(jù)和本地數(shù)據(jù)安全
網(wǎng)易通信協(xié)議加密SDK可以在通信層對通信數(shù)據(jù)進(jìn)行加密保護(hù),防止攻擊者竊取通信數(shù)據(jù)。集成簡單,API使用方便;目前包含了:Android、 IOS和服務(wù)器端的SDK(又包括java,python語言版本,后續(xù)會支持更多語言)。目前API提供了兩種方式保護(hù)傳輸數(shù)據(jù)的安全。
- 普通加解密
- 支持字符串和二進(jìn)制數(shù)據(jù)的加解密。
- 使用AES CBC和RSA算法。
- 客戶端SDK加密數(shù)據(jù)給服務(wù)器端的密鑰與服務(wù)器端SDK加密數(shù)據(jù)給客戶端的密鑰不同。
- 每次加密的密鑰都隨機(jī)生成的,進(jìn)一步提高了加密數(shù)據(jù)的安全性。
- 客戶端SDK和服務(wù)器端SDK都進(jìn)行了消息簽名和完整性驗證,防止數(shù)據(jù)被篡改。
- 客戶端SDK對公鑰和服務(wù)器端SDK對私鑰都進(jìn)行了保護(hù),盡可能保證公私鑰的安全性,防外泄。
- 客戶端SDK經(jīng)過加固保護(hù),防止被逆向分析破解。
- 客戶端SDK支持本地數(shù)據(jù)的加解密,保護(hù)本地數(shù)據(jù)安全。
- 白盒加密
- 支持字符串和二進(jìn)制數(shù)據(jù)的加解密。
- Android、iOS和服務(wù)器端均實現(xiàn)了一套白盒加解密API,既可以加解密本地數(shù)據(jù),也可以用來進(jìn)行客戶端和服務(wù)器端的加解密。
- 采用白盒加密算法將密鑰和算法綁定到了一起,由算法生成一個加密表和一個解密表,都是二進(jìn)制文,通過查表的方式實現(xiàn)加密和解密,中間過程完全不涉及密鑰交換,可抵御白盒攻擊。
- 客戶端SDK經(jīng)過加固保護(hù),防止被逆向分析破解。
后續(xù)開發(fā)計劃
- 大文件的加解密
- 白盒簽名
- 支持國密算法